]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commit
xen: save previous spinlock when blocking
authorJeremy Fitzhardinge <jeremy@goop.org>
Thu, 21 Aug 2008 00:02:18 +0000 (17:02 -0700)
committerIngo Molnar <mingo@elte.hu>
Thu, 21 Aug 2008 11:52:57 +0000 (13:52 +0200)
commit168d2f464ab9860f0d1e66cf1f9684973222f1c6
treec3a4199cf2aa4c6322b7860c431fd5bfdc4220ef
parent7708ad64a24a674f7905aa7a5099a50f055debec
xen: save previous spinlock when blocking

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: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Acked-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/xen/spinlock.c
drivers/xen/events.c
include/xen/events.h