Ping Ingo, Peterz. :) 2016-07-17 4:03 GMT+08:00 Davidlohr Bueso <[email protected]>: > On Sat, 16 Jul 2016, Wanpeng Li wrote: > >> From: Wanpeng Li <[email protected]> >> >> 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 <[email protected]> >> Cc: Peter Zijlstra (Intel) <[email protected]> >> Cc: Ingo Molnar <[email protected]> >> Cc: Waiman Long <[email protected]> >> Cc: Davidlohr Bueso <[email protected]> >> Signed-off-by: Wanpeng Li <[email protected]> > > > Reviewed-by: Davidlohr Bueso <[email protected]>

