All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Davidlohr Bueso <dave@stgolabs.net>
Cc: Waiman Long <Waiman.Long@hp.com>, Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org,
	Scott J Norton <scott.norton@hp.com>,
	Douglas Hatch <doug.hatch@hp.com>
Subject: Re: [PATCH v4 1/7] locking/pvqspinlock: Unconditional PV kick with _Q_SLOW_VAL
Date: Mon, 3 Aug 2015 21:56:43 +0200	[thread overview]
Message-ID: <20150803195643.GD25159@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <1438628982.17146.20.camel@stgolabs.net>

On Mon, Aug 03, 2015 at 12:09:42PM -0700, Davidlohr Bueso wrote:
> On Mon, 2015-08-03 at 20:37 +0200, Peter Zijlstra wrote:
> > OK, so there's no 'fix'? The patch claims we can loose a wakeup and I
> > just don't see how that is true.
> 
> Taking another look, I think you could hit something like this:
> 
> CPU0 (lock):					CPU1 (unlock):
>   pv_wait_head					  __pv_queued_spin_unlock
> 						    <load ->state> [bogus ->state != halted]

I don't think this can happen, see below, IF you take the slow path, you
_must_ see halted.

>     <spin>					    smp_store_release(&l->locked, 0);
> 						    
>     WRITE_ONCE(pn->state, vcpu_halted);             
>     pv_wait(&l->locked, _Q_SLOW_VAL);		    if (->state == vcpu_halted)
> 					              pv_kick(node->cpu); <-- missing wakeup, never called
> 
> So basically you can miss a wakeup if node->state load is done while the
> locking thread is spinning and hasn't gotten a chance to update the
> state to halted. That would also imply that it occurs right when the
> threshold limit is about to be reached.

	pv_wait_head()			__pv_queued_spin_unlock()

	[S] node->state = halted
	[S] hash(lock, node)
	    MB
	[S] ->locked = SLOW
	    MB
					[L] ->locked == SLOW
					    RMB
					[L] node = unhash(lock)
					[L] node->state == halted
					    RELEASE
					[S] ->locked = 0

					   kick(node->cpu)
	   CLI
	[L] ->locked

If we don't see SLOW, nothing to be done. If we do, we _must_ then also
see ->state == halted and will kick.

And note that the load of node->state _cannot_ be pushed up further, it
depends on the load of node, which in turn depends on the load of
->locked.

So I'm still not seeing it. You cannot miss a kick.

  reply	other threads:[~2015-08-03 19:56 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-01  2:21 [PATCH v4 0/7] locking/qspinlock: Enhance pvqspinlock performance Waiman Long
2015-08-01  2:21 ` [PATCH v4 1/7] locking/pvqspinlock: Unconditional PV kick with _Q_SLOW_VAL Waiman Long
2015-08-01 18:01   ` Davidlohr Bueso
2015-08-01 20:12     ` Long, Wai Man
2015-08-01 22:29   ` Peter Zijlstra
2015-08-03 18:22     ` Davidlohr Bueso
2015-08-03 18:37       ` Peter Zijlstra
2015-08-03 19:09         ` Davidlohr Bueso
2015-08-03 19:56           ` Peter Zijlstra [this message]
2015-08-04  3:26     ` Waiman Long
2015-08-01  2:21 ` [PATCH v4 2/7] locking/pvqspinlock: Add pending bit support Waiman Long
2015-08-03 18:37   ` Davidlohr Bueso
2015-08-03 21:30     ` Waiman Long
2015-08-01  2:22 ` [PATCH v4 3/7] locking/pvqspinlock: Collect slowpath lock statistics Waiman Long
2015-08-01  2:22 ` [PATCH v4 4/7] locking/pvqspinlock, x86: Optimize PV unlock code path Waiman Long
2015-08-01  2:22 ` [PATCH v4 5/7] locking/pvqspinlock: Enable deferment of vCPU kicking to unlock call Waiman Long
2015-08-01  2:22 ` [PATCH v4 6/7] locking/pvqspinlock: Allow vCPUs kick-ahead Waiman Long
2015-08-01  2:22 ` [PATCH v4 7/7] locking/pvqspinlock: Queue node adaptive spinning 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=20150803195643.GD25159@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=Waiman.Long@hp.com \
    --cc=dave@stgolabs.net \
    --cc=doug.hatch@hp.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=scott.norton@hp.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.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 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.