[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] Revert xen: dont fiddle with event channel masking in suspend/resume
Hello, This patch reverts commit e91b2b1194335ca83d8a40fa4e0efd480bf2babe. evtchn are supposed to be masked during resume by irq subsytem however, they are not. This causes special interrupts like PV spinlock to cause kernel BUG() as it expects the IRQ to be masked. This causes instances that are live migrated successfully to crash after few minutes. Live Migration uses suspend resume and when xen_irq_resume is invoked, I saw event channels are not masked. Hence, I reverted this commit to make LM work. Feelings? Recommendations? Things I missed? One such stack: ------------[ cut here ]------------ kernel BUG at arch/x86/xen/spinlock.c:75! CPU: 0 PID: 675 Comm: kauditd Not tainted 4.14.20-48.30.amzn2.x86_64 #1 Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006 task: ffff880205eedac0 task.stack: ffffc90000e4c000 RIP: 0010:dummy_handler+0x0/0x10 RSP: 0018:ffff880207203eb8 EFLAGS: 00010046 RAX: ffffffff81027f10 RBX: ffff880206ce1b00 RCX: 0000000000000035 RDX: ffffffff81a81560 RSI: 0000000000000000 RDI: 0000000000000035 RBP: 0000000000000035 R08: ffff880206800248 R09: ffff880206d03600 R10: 0000000000000000 R11: 0000000000000040 R12: 0000000000000000 R13: ffff880207203f04 R14: 0000000000000000 R15: 0000000000000000 FS: 0000000000000000(0000) GS:ffff880207200000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000561cc8dbd2d0 CR3: 0000000001e0a001 CR4: 00000000001606f0 Call Trace: <IRQ> __handle_irq_event_percpu+0x40/0x190 handle_irq_event_percpu+0x30/0x70 handle_percpu_irq+0x37/0x50 generic_handle_irq+0x24/0x30 evtchn_2l_handle_events+0x162/0x280 __xen_evtchn_do_upcall+0x42/0x80 xen_evtchn_do_upcall+0x27/0x40 xen_hvm_callback_vector+0x98/0xa0 </IRQ> RIP: 0010:finish_task_switch+0x7b/0x200 RSP: 0018:ffffc90000e4fe08 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff0c RAX: 0000000000000001 RBX: ffff880205eedac0 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8802072211c0 RBP: ffffc90000e4fe30 R08: 0000003876060000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000040 R12: ffff8802072211c0 R13: ffffffff81e12480 R14: ffff880202e54c00 R15: 0000000000000000 ? finish_task_switch+0x74/0x200 __schedule+0x29c/0x8a0 ? __wake_up_common_lock+0x89/0xc0 ? kauditd_send_multicast_skb+0x90/0x90 schedule+0x28/0x80 kauditd_thread+0x177/0x220 ? finish_wait+0x80/0x80 ? auditd_reset+0x90/0x90 kthread+0x11a/0x130 ? kthread_create_on_node+0x70/0x70 ? call_usermodehelper_exec_async+0x12a/0x160 ret_from_fork+0x35/0x40 RIP: dummy_handler+0x0/0x10 RSP: ffff880207203eb8 Signed-off-by: Anchal Agarwal <anchalag@xxxxxxxxxx> Signed-off-by: Eduardo Valentin <eduval@xxxxxxxxxx> Reviewed-by: Frank van der Linden <fllinden@xxxxxxxxxx> Reviewed-by: Alakesh Haloi <alakeshh@xxxxxxxxxx> Reviewed-by: Vallish Vaidyeshwara <vallish@xxxxxxxxxx> --- drivers/xen/events/events_base.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index bc03f1a6ad1b..ae71cab207f7 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -343,6 +343,14 @@ static void bind_evtchn_to_cpu(unsigned int chn, unsigned int cpu) info->cpu = cpu; } +static void xen_evtchn_mask_all(void) +{ + unsigned int evtchn; + + for (evtchn = 0; evtchn < xen_evtchn_nr_channels(); evtchn++) + mask_evtchn(evtchn); +} + /** * notify_remote_via_irq - send event to remote end of event channel via irq * @irq: irq of event channel to send event to @@ -1565,6 +1573,7 @@ void xen_irq_resume(void) struct irq_info *info; /* New event-channel space is not 'live' yet. */ + xen_evtchn_mask_all(); xen_evtchn_resume(); /* No IRQ <-> event-channel mappings. */ @@ -1682,7 +1691,6 @@ module_param(fifo_events, bool, 0); void __init xen_init_IRQ(void) { int ret = -EINVAL; - unsigned int evtchn; if (fifo_events) ret = xen_evtchn_fifo_init(); @@ -1694,8 +1702,7 @@ void __init xen_init_IRQ(void) BUG_ON(!evtchn_to_irq); /* No event channels are 'live' right now. */ - for (evtchn = 0; evtchn < xen_evtchn_nr_channels(); evtchn++) - mask_evtchn(evtchn); + xen_evtchn_mask_all(); pirq_needs_eoi = pirq_needs_eoi_flag; -- 2.14.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |