[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Xen-devel] Re: [PATCH] Fix memory order issue inside pv spinlock
Jeremy Fitzhardinge wrote:
On 09/07/09 00:40, Yang, Xiaowei wrote:barrier() can't prevent reads after it not being reordered with older writes to different locates before it. Because of it, I can't bring up4 HVM guests on one SMP machine. Use mb() instead.Which read is happening too early? Is it "xl->spinners"? How does it fail?
Yes. If read of xl->spinners happens earlier than write 0 to xl->lock, notifications to wake up other spinners can be omitted incorrectly, resulting in others polling indefinitely (because of poll evtchn not pending) with the lock is uncontended.
Thanks, JSigned-off-by: Yang Xiaowei <xiaowei.yang@xxxxxxxxx> diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c index 5601506..9dee5f8 100644 --- a/arch/x86/xen/spinlock.c +++ b/arch/x86/xen/spinlock.c @@ -324,7 +325,7 @@ static void xen_spin_unlock(struct raw_spinlock *lock) xl->lock = 0; /* release lock */ /* make sure unlock happens before kick */ - barrier(); + mb(); if (unlikely(xl->spinners)) xen_spin_unlock_slow(xl); Thanks, Xiaowei
_______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
Lists.xenproject.org is hosted with RackSpace, monitoring our