diff options
author | Keir Fraser <keir@xen.org> | 2011-03-26 09:42:01 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2011-03-26 09:42:01 +0000 |
commit | 4d21248c007f0b688d41d9282e69e0d6cbde3ece (patch) | |
tree | ab433fc1782742a33bcc588a824883fb0d58b6ba /xen/arch/x86/irq.c | |
parent | a3bb65086b8bebd7f7d3c5f7bbb8885647850cf5 (diff) | |
download | xen-4d21248c007f0b688d41d9282e69e0d6cbde3ece.tar.gz xen-4d21248c007f0b688d41d9282e69e0d6cbde3ece.tar.bz2 xen-4d21248c007f0b688d41d9282e69e0d6cbde3ece.zip |
x86: __pirq_guest_eoi() must check it is called for a fully
guest-bound irq before accessing desc->action.
Signed-off-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/irq.c')
-rw-r--r-- | xen/arch/x86/irq.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index 3595ef5271..ab2e6c9993 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -1022,6 +1022,12 @@ static void __pirq_guest_eoi(struct domain *d, int pirq) if ( desc == NULL ) return; + if ( !(desc->status & IRQ_GUEST) ) + { + spin_unlock_irq(&desc->lock); + return; + } + action = (irq_guest_action_t *)desc->action; irq = desc - irq_desc; |