On Tue, Nov 16, 2010 at 01:08:44PM -0800, Jeremy Fitzhardinge wrote: > From: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> > > Maintain a flag in both LSBs of the ticket lock which indicates whether > anyone is in the lock slowpath and may need kicking when the current > holder unlocks. The flags are set when the first locker enters > the slowpath, and cleared when unlocking to an empty queue. > > In the specific implementation of lock_spinning(), make sure to set > the slowpath flags on the lock just before blocking. We must do > this before the last-chance pickup test to prevent a deadlock > with the unlocker: > > Unlocker Locker > test for lock pickup > -> fail > test slowpath + unlock > -> false > set slowpath flags > block > > Whereas this works in any ordering: > > Unlocker Locker > set slowpath flags > test for lock pickup > -> fail > block > test slowpath + unlock > -> true, kick I think this is still racy .. Unlocker Locker test slowpath -> false set slowpath flag test for lock pickup -> fail block unlock unlock needs to happen first before testing slowpath? I have made that change for my KVM guest and it seems to be working well with that change .. Will cleanup and post my patches shortly - vatsa _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization