[Xen-devel] [PATCH] xen/events: don't migrate disabled IRQs

2016-05-20 Thread Munehisa Kamata
Commit ff1e22e7a638 ("xen/events: Mask a moving irq") introduced
a crash below. This can be triggered after being resumed from suspend
 (e.g. live migration) if there are disabled IRQs with
IRQD_SETAFFINITY_PENDING set.

kernel BUG at kernel/irq/migration.c:31!
...
CPU: 0 PID: 9 Comm: migration/0 Tainted: GE   4.4.8 #1
Hardware name: Xen HVM domU, BIOS 4.2.amazon 04/04/2016
task: 88020620 ti: 880206208000 task.ti: 880206208000
RIP: 0010:[]  [] 
irq_move_masked_irq+0xd9/0xf0
RSP: 0018:88020620bc88  EFLAGS: 00010046
...
Call Trace:
 [] eoi_pirq+0xa7/0xd0
 [] __startup_pirq+0xd7/0x140
 [] xen_irq_resume+0x2c7/0x330
 [] xen_suspend+0x86/0x140
 [] multi_cpu_stop+0xb3/0xe0
 [] ? cpu_stop_queue_work+0x80/0x80
 [] cpu_stopper_thread+0x7a/0x110
 [] ? finish_task_switch+0x72/0x1d0
 [] ? __raw_callee_save___pv_queued_spin_unlock+0x11/0x20
 [] smpboot_thread_fn+0x10f/0x170
 [] ? sort_range+0x30/0x30
 [] kthread+0xc9/0xe0
 [] ? kthread_park+0x60/0x60
 [] ret_from_fork+0x3f/0x70
 [] ? kthread_park+0x60/0x60

The pending state may last until being suspended, because some IRQs may
show no activities after their affinity settings have been changed.

This change don't let ACK and EOI handlers of xen-pirq and xen-dyn chips
try to migrate disabled IRQs to avoid the BUG in that situation.

Fixes: ff1e22e7a638 ("xen/events: Mask a moving irq")
Reported-and-tested-by: Guilherme Wuensch Manika 
To: Boris Ostrovsky 
To: David Vrabel 
Cc: xen-de...@lists.xenproject.org
Cc: linux-ker...@vger.kernel.org
Cc: sta...@vger.kernel.org
Cc: Matt Wilson 
Signed-off-by: Munehisa Kamata 
---
 drivers/xen/events/events_base.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index cb7138c..be8410f 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -487,7 +487,8 @@ static void eoi_pirq(struct irq_data *data)
if (!VALID_EVTCHN(evtchn))
return;
 
-   if (unlikely(irqd_is_setaffinity_pending(data))) {
+   if (unlikely(irqd_is_setaffinity_pending(data) &&
+   !irqd_irq_disabled(data))) {
int masked = test_and_set_mask(evtchn);
 
clear_evtchn(evtchn);
@@ -1370,7 +1371,8 @@ static void ack_dynirq(struct irq_data *data)
if (!VALID_EVTCHN(evtchn))
return;
 
-   if (unlikely(irqd_is_setaffinity_pending(data))) {
+   if (unlikely(irqd_is_setaffinity_pending(data) &&
+   !irqd_irq_disabled(data))) {
int masked = test_and_set_mask(evtchn);
 
clear_evtchn(evtchn);
-- 
2.7.4


___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH] xen/events: don't migrate disabled IRQs

2016-05-20 Thread Boris Ostrovsky
On 05/20/2016 05:22 PM, Munehisa Kamata wrote:
> Commit ff1e22e7a638 ("xen/events: Mask a moving irq") introduced
> a crash below. This can be triggered after being resumed from suspend
>  (e.g. live migration) if there are disabled IRQs with
> IRQD_SETAFFINITY_PENDING set.

A patch just like this has been submitted recently
(http://lists.xenproject.org/archives/html/xen-devel/2016-05/msg00956.html)
and should go in soon.

Thanks.
-boris




___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel