From: Peter Zijlstra <peterz@infradead.org>
To: Waiman Long <Waiman.Long@hpe.com>
Cc: Ingo Molnar <mingo@redhat.com>,
linux-kernel@vger.kernel.org,
Pan Xinhui <xinhui@linux.vnet.ibm.com>,
Boqun Feng <boqun.feng@gmail.com>,
Scott J Norton <scott.norton@hpe.com>,
Douglas Hatch <doug.hatch@hpe.com>
Subject: Re: [PATCH v2 2/5] locking/pvqspinlock: Fix missed PV wakeup problem
Date: Fri, 15 Jul 2016 10:47:32 +0200 [thread overview]
Message-ID: <20160715084732.GF30921@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <1464713631-1066-3-git-send-email-Waiman.Long@hpe.com>
So the reason I never get around to this is because the patch stinks.
It simply doesn't make sense... Remember, the harder you make a reviewer
work the less likely the review will be done.
Present things in clear concise language and draw a picture.
On Tue, May 31, 2016 at 12:53:48PM -0400, Waiman Long wrote:
> Currently, calling pv_hash() and setting _Q_SLOW_VAL is only
> done once for any pv_node. It is either in pv_kick_node() or in
> pv_wait_head_or_lock().
So far so good....
> Because of lock stealing, a pv_kick'ed node is
> not guaranteed to get the lock before the spinning threshold expires
> and has to call pv_wait() again. As a result, the new lock holder
> won't see _Q_SLOW_VAL and so won't wake up the sleeping vCPU.
*brain melts* what!? pv_kick'ed node reads like pv_kick_node() and that
doesn't make any kind of sense.
I'm thinking you're trying to say this:
CPU0 CPU1 CPU2
__pv_queued_spin_unlock_slowpath()
...
smp_store_release(&l->locked, 0);
__pv_queued_spin_lock_slowpath()
...
pv_queued_spin_steal_lock()
cmpxchg(&l->locked, 0, _Q_LOCKED_VAL) == 0
pv_wait_head_or_lock()
pv_kick(node->cpu); ----------------------> pv_wait(&l->locked, _Q_SLOW_VAL);
__pv_queued_spin_unlock()
cmpxchg(&l->locked, _Q_LOCKED_VAL, 0) == _Q_LOCKED_VAL
for () {
trylock_clear_pending();
cpu_relax();
}
pv_wait(&l->locked, _Q_SLOW_VAL);
Which is indeed 'bad', but not fatal, note that the later pv_wait() will
not in fact go wait, since l->locked will _not_ be _Q_SLOW_VAL.
Is this indeed the 3 CPU scenario you tried to describe in a scant 4
lines of text, or is there more to it?
next prev parent reply other threads:[~2016-07-15 8:47 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-31 16:53 [PATCH v2 0/5] locking/pvqspinlock: Fix missed PV wakeup & support PPC Waiman Long
2016-05-31 16:53 ` [PATCH v2 1/5] locking/pvstat: Separate wait_again and spurious wakeup stats Waiman Long
2016-08-10 18:07 ` [tip:locking/core] " tip-bot for Waiman Long
2016-05-31 16:53 ` [PATCH v2 2/5] locking/pvqspinlock: Fix missed PV wakeup problem Waiman Long
2016-07-15 8:47 ` Peter Zijlstra [this message]
2016-07-15 9:39 ` Pan Xinhui
2016-07-15 10:07 ` Peter Zijlstra
2016-07-15 16:35 ` Peter Zijlstra
2016-07-16 1:16 ` Boqun Feng
2016-07-17 23:07 ` Waiman Long
2016-07-17 23:10 ` Waiman Long
2016-07-17 23:22 ` Wanpeng Li
2016-07-17 22:52 ` Waiman Long
2016-07-21 6:40 ` xinhui
2016-07-15 20:06 ` Waiman Long
2016-07-15 19:47 ` Waiman Long
2016-05-31 16:53 ` [PATCH v2 3/5] locking/pvqspinlock: Make pv_unhash() atomic Waiman Long
2016-05-31 16:53 ` [PATCH v2 4/5] locking/pvstat: Add stat counter to track _Q_SLOW_VAL race Waiman Long
2016-05-31 16:53 ` [PATCH v2 5/5] locking/pvqspinlock: Add lock holder CPU argument to pv_wait() Waiman Long
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=20160715084732.GF30921@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=Waiman.Long@hpe.com \
--cc=boqun.feng@gmail.com \
--cc=doug.hatch@hpe.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=scott.norton@hpe.com \
--cc=xinhui@linux.vnet.ibm.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.