Messages in this thread | | | Date | Tue, 14 Jul 2015 11:31:48 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH 1/7] locking/pvqspinlock: Only kick CPU at unlock time |
| |
On Mon, Jul 13, 2015 at 03:48:28PM +0200, Peter Zijlstra wrote: > @@ -239,9 +265,16 @@ static void pv_wait_head(struct qspinloc > cpu_relax(); > } > > - WRITE_ONCE(pn->state, vcpu_halted); > + /* > + * Either pv_kick_node() advanced us and ->state is already > + * vcpu_hashed and this store is superfluous, or this is the > + * first in which case the below cmpxchg() provides the > + * required barriers. > + */ > + WRITE_ONCE(pn->state, vcpu_hashed);
The easier option is of course to just move this store into the branch below. That immediately clarifies the logic and avoids the superfluous store.
> if (!lp) { /* ONCE */ > lp = pv_hash(lock, pn); > + > /* > * lp must be set before setting _Q_SLOW_VAL > *
| |