• Jeremy Fitzhardinge's avatar
    xen: save previous spinlock when blocking · 168d2f46
    Jeremy Fitzhardinge authored
    A spinlock can be interrupted while spinning, so make sure we preserve
    the previous lock of interest if we're taking a lock from within an
    interrupt handler.
    
    We also need to deal with the case where the blocking path gets
    interrupted between testing to see if the lock is free and actually
    blocking.  If we get interrupted there and end up in the state where
    the lock is free but the irq isn't pending, then we'll block
    indefinitely in the hypervisor.  This fix is to make sure that any
    nested lock-takers will always leave the irq pending if there's any
    chance the outer lock became free.
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Acked-by: default avatarJan Beulich <jbeulich@novell.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    168d2f46
spinlock.c 5.05 KB