From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751382AbcETVXI (ORCPT ); Fri, 20 May 2016 17:23:08 -0400 Received: from smtp-fw-4101.amazon.com ([72.21.198.25]:10650 "EHLO smtp-fw-4101.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751009AbcETVXF (ORCPT ); Fri, 20 May 2016 17:23:05 -0400 X-IronPort-AV: E=Sophos;i="5.26,341,1459814400"; d="scan'208";a="519214757" From: Munehisa Kamata To: boris.ostrovsky@oracle.com, david.vrabel@citrix.com Cc: Munehisa Kamata , xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Matt Wilson Subject: [Xen-devel][PATCH] xen/events: don't migrate disabled IRQs Date: Fri, 20 May 2016 14:22:04 -0700 Message-Id: <1463779324-12225-1-git-send-email-kamatam@amazon.com> X-Mailer: git-send-email 2.8.2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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: G E 4.4.8 #1 Hardware name: Xen HVM domU, BIOS 4.2.amazon 04/04/2016 task: ffff880206200000 ti: ffff880206208000 task.ti: ffff880206208000 RIP: 0010:[] [] irq_move_masked_irq+0xd9/0xf0 RSP: 0018:ffff88020620bc88 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-devel@lists.xenproject.org Cc: linux-kernel@vger.kernel.org Cc: stable@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