This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-changelog] [xen-unstable] Clear IRQ_GUEST in irq_desc->status when

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Clear IRQ_GUEST in irq_desc->status when setting action to NULL.
From: Xen patchbot-unstable <patchbot@xxxxxxx>
Date: Wed, 21 Sep 2011 15:33:08 +0100
Delivery-date: Wed, 21 Sep 2011 07:33:33 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Igor Mammedov <imammedo@xxxxxxxxxx>
# Date 1316300426 -3600
# Node ID c944e82bb092925f31403a129087e9d40e0fa06a
# Parent  994b5b125c31dd243e412aa568a0a6eb0d6436e9
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>

diff -r 994b5b125c31 -r c944e82bb092 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c        Sat Sep 17 16:44:56 2011 +0100
+++ b/xen/arch/x86/irq.c        Sun Sep 18 00:00:26 2011 +0100
@@ -192,6 +192,7 @@
     spin_lock_irqsave(&desc->lock, flags);
     desc->status  |= IRQ_DISABLED;
+    desc->status  &= ~IRQ_GUEST;
     action = desc->action;
     desc->action  = NULL;
@@ -1465,8 +1466,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;
@@ -1477,6 +1476,8 @@
         return NULL;
+    BUG_ON(!(desc->status & IRQ_GUEST));
     for ( i = 0; (i < action->nr_guests) && (action->guest[i] != d); i++ )
     BUG_ON(i == action->nr_guests);

Xen-changelog mailing list

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Clear IRQ_GUEST in irq_desc->status when setting action to NULL., Xen patchbot-unstable <=