Messages in this thread | ![/](/images/icornerl.gif) | | Date | Sat, 16 Jul 2016 13:03:22 -0700 | From | Davidlohr Bueso <> | Subject | Re: [PATCH v4] locking/pvqspinlock: Fix double hash race |
| |
On Sat, 16 Jul 2016, Wanpeng Li wrote:
>From: Wanpeng Li <wanpeng.li@hotmail.com> > >When the lock holder vCPU is racing with the queue head vCPU: > >lock holder vCPU queue head vCPU >===================== ================== > >node->locked = 1; ><preemption> READ_ONCE(node->locked) > ... pv_wait_head_or_lock(): > SPIN_THRESHOLD loop; > pv_hash(); > lock->locked = _Q_SLOW_VAL; > node->state = vcpu_hashed; >pv_kick_node(): > cmpxchg(node->state, > vcpu_halted, vcpu_hashed); > lock->locked = _Q_SLOW_VAL; > pv_hash(); > >With preemption at the right moment, it is possible that both the >lock holder and queue head vCPUs can be racing to set node->state >which can result in hash entry race. Making sure the state is never >set to vcpu_halted will prevent this racing from happening. > >This patch fix it by setting vcpu_hashed after we did all hash thing. > >Reviewed-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> >Cc: Peter Zijlstra (Intel) <peterz@infradead.org> >Cc: Ingo Molnar <mingo@kernel.org> >Cc: Waiman Long <Waiman.Long@hpe.com> >Cc: Davidlohr Bueso <dave@stgolabs.net> >Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
| ![\](/images/icornerr.gif) |