From: Peter Zijlstra <peterz@infradead.org>
To: Davidlohr Bueso <dave@stgolabs.net>
Cc: manfred@colorfullife.com, Waiman.Long@hpe.com, mingo@kernel.org,
torvalds@linux-foundation.org, ggherdovich@suse.com,
mgorman@techsingularity.net, linux-kernel@vger.kernel.org
Subject: Re: sem_lock() vs qspinlocks
Date: Fri, 20 May 2016 09:53:18 +0200 [thread overview]
Message-ID: <20160520075318.GB3193@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20160520053926.GC31084@linux-uzut.site>
On Thu, May 19, 2016 at 10:39:26PM -0700, Davidlohr Bueso wrote:
> However, this is semantically different to
> what was previously done with ticket locks in that spin_unlock_wait() will always observe
> all waiters by adding itself to the tail.
static inline void arch_spin_unlock_wait(arch_spinlock_t *lock)
{
__ticket_t head = READ_ONCE(lock->tickets.head);
for (;;) {
struct __raw_tickets tmp = READ_ONCE(lock->tickets);
/*
* We need to check "unlocked" in a loop, tmp.head == head
* can be false positive because of overflow.
*/
if (__tickets_equal(tmp.head, tmp.tail) ||
!__tickets_equal(tmp.head, head))
break;
cpu_relax();
}
}
I'm not seeing that (although I think I agreed yesterday on IRC). Note
how we observe the head and then loop until either the lock is unlocked
(head == tail) or simply head isn't what it used to be.
And head is the lock holder end of the queue; see arch_spin_unlock()
incrementing it.
So the ticket lock too should only wait for the current lock holder to
go away, not any longer.
next prev parent reply other threads:[~2016-05-20 7:53 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-20 5:39 Davidlohr Bueso
2016-05-20 7:49 ` Peter Zijlstra
2016-05-20 15:00 ` Davidlohr Bueso
2016-05-20 15:05 ` Peter Zijlstra
2016-05-20 15:25 ` Davidlohr Bueso
2016-05-20 15:28 ` Peter Zijlstra
2016-05-20 20:47 ` Waiman Long
2016-05-20 20:52 ` Peter Zijlstra
2016-05-21 0:59 ` Davidlohr Bueso
2016-05-21 4:01 ` Waiman Long
2016-05-21 7:40 ` Peter Zijlstra
2016-05-20 7:53 ` Peter Zijlstra [this message]
2016-05-20 8:13 ` Peter Zijlstra
2016-05-20 8:18 ` Peter Zijlstra
2016-05-20 9:07 ` Giovanni Gherdovich
2016-05-20 9:34 ` Peter Zijlstra
2016-05-20 8:30 ` Peter Zijlstra
2016-05-20 9:00 ` Peter Zijlstra
2016-05-20 10:09 ` Ingo Molnar
2016-05-20 10:45 ` Mel Gorman
2016-05-20 11:58 ` Peter Zijlstra
2016-05-20 14:05 ` Boqun Feng
2016-05-20 15:21 ` Peter Zijlstra
2016-05-20 16:04 ` Peter Zijlstra
2016-05-20 17:00 ` Linus Torvalds
2016-05-20 21:06 ` Peter Zijlstra
2016-05-20 21:44 ` Linus Torvalds
2016-05-21 0:48 ` Davidlohr Bueso
2016-05-21 2:30 ` Linus Torvalds
2016-05-21 7:37 ` Peter Zijlstra
2016-05-21 13:49 ` Manfred Spraul
2016-05-24 10:57 ` Peter Zijlstra
2016-05-21 17:14 ` Davidlohr Bueso
2016-05-23 12:25 ` Peter Zijlstra
2016-05-23 17:52 ` Linus Torvalds
2016-05-25 6:37 ` Boqun Feng
2016-05-22 8:43 ` Manfred Spraul
2016-05-22 9:38 ` Peter Zijlstra
2016-05-20 16:20 ` Davidlohr Bueso
2016-05-20 20:44 ` Waiman Long
2016-05-20 20:53 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160520075318.GB3193@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=Waiman.Long@hpe.com \
--cc=dave@stgolabs.net \
--cc=ggherdovich@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=mgorman@techsingularity.net \
--cc=mingo@kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®