|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-4.1-testing] Clear IRQ_GUEST in irq_desc->status wh
# HG changeset patch
# User Igor Mammedov <imammedo@xxxxxxxxxx>
# Date 1317655792 -3600
# Node ID 2a0cd93f7ed9666ac60baa19c69bd89cad63c79e
# Parent 5c395e993fe4064f0e3e13af70af9e440dc00689
Clear IRQ_GUEST in irq_desc->status when setting action to NULL.
Looking more closely at usage of action field with relation to
IRQ_GUEST flag. It appears that set IRQ_GUEST implies that action
is not NULL. As result it is not safe to set action to NULL and
leave IRQ_GUEST set.
Hence IRQ_GUEST should be cleared in dynamic_irq_cleanup where
action is set to NULL.
An addition remove BUGON at __pirq_guest_unbind that appears to be
bogus and not needed anymore.
Thanks Paolo Bonzini for NACKing previous patch, and pointing at the
correct solution.
Signed-off-by: Igor Mammedov <imammedo@xxxxxxxxxx>
Reinstate the BUG_ON, but after the action==NULL check. Since we then
go and start interpreting action as an irq_guest_action_t, the BUG_ON
is relevant here.
More generally, the brute-force nature of dynamic_irq_cleanup() looks
a bit worrying. Possibly there should be more integratioin with
pirq_guest_unbind() logic, for cleaning up un-acked EOIs and the like.
Signed-off-by: Keir Fraser <keir@xxxxxxx>
xen-unstable changeset: 23852:c944e82bb092
xen-unstable date: Sun Sep 18 00:00:26 2011 +0100
---
diff -r 5c395e993fe4 -r 2a0cd93f7ed9 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c Tue Sep 27 17:27:17 2011 +0100
+++ b/xen/arch/x86/irq.c Mon Oct 03 16:29:52 2011 +0100
@@ -152,6 +152,7 @@
spin_lock_irqsave(&desc->lock, flags);
desc->status |= IRQ_DISABLED;
+ desc->status &= ~IRQ_GUEST;
desc->handler->shutdown(irq);
action = desc->action;
desc->action = NULL;
@@ -1288,8 +1289,6 @@
cpumask_t cpu_eoi_map;
int i;
- BUG_ON(!(desc->status & IRQ_GUEST));
-
action = (irq_guest_action_t *)desc->action;
irq = desc - irq_desc;
@@ -1300,6 +1299,8 @@
return NULL;
}
+ BUG_ON(!(desc->status & IRQ_GUEST));
+
for ( i = 0; (i < action->nr_guests) && (action->guest[i] != d); i++ )
continue;
BUG_ON(i == action->nr_guests);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-4.1-testing] Clear IRQ_GUEST in irq_desc->status when setting action to NULL.,
Xen patchbot-4 . 1-testing <=
|
|
|
|
|