• Ian Campbell's avatar
    xen: events: do not unmask event channels on resume · 6903591f
    Ian Campbell authored
    The IRQ core code will take care of disabling and reenabling
    interrupts over suspend resume automatically, therefore we do not need
    to do this in the Xen event channel code.
    
    The only exception is those event channels marked IRQF_NO_SUSPEND
    which the IRQ core ignores. We must unmask these ourselves, taking
    care to obey the current IRQ_DISABLED status. Failure check for
    IRQ_DISABLED leads to enabling polled only event channels, such as
    that associated with the pv spinlocks, which must never be enabled:
    
    [   21.970432] ------------[ cut here ]------------
    [   21.970432] kernel BUG at arch/x86/xen/spinlock.c:343!
    [   21.970432] invalid opcode: 0000 [#1] SMP
    [   21.970432] last sysfs file: /sys/devices/virtual/net/lo/operstate
    [   21.970432] Modules linked in:
    [   21.970432]
    [   21.970432] Pid: 0, comm: swapper Not tainted (2.6.32.24-x86_32p-xen-01034-g787c727 #34)
    [   21.970432] EIP: 0061:[<c102e209>] EFLAGS: 00010046 CPU: 3
    [   21.970432] EIP is at dummy_handler+0x3/0x7
    [   21.970432] EAX: 0000021c EBX: dfc16880 ECX: 0000001a EDX: 00000000
    [   21.970432] ESI: dfc02c00 EDI: 00000001 EBP: dfc47e10 ESP: dfc47e10
    [   21.970432]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0069
    [   21.970432] Process swapper (pid: 0, ti=dfc46000 task=dfc39440 task.ti=dfc46000)
    [   21.970432] Stack:
    [   21.970432]  dfc47e30 c10a39f0 0000021c 00000000 00000000 dfc16880 0000021c 00000001
    [   21.970432] <0> dfc47e40 c10a4f08 0000021c 00000000 dfc47e78 c12240a7 c1839284 c1839284
    [   21.970432] <0> 00000200 00000000 00000000 f5720000 c1f3d028 c1f3d02c 00000180 dfc47e90
    [   21.970432] Call Trace:
    [   21.970432]  [<c10a39f0>] ? handle_IRQ_event+0x5f/0x122
    [   21.970432]  [<c10a4f08>] ? handle_percpu_irq+0x2f/0x55
    [   21.970432]  [<c12240a7>] ? __xen_evtchn_do_upcall+0xdb/0x15f
    [   21.970432]  [<c122481e>] ? xen_evtchn_do_upcall+0x20/0x30
    [   21.970432]  [<c1030d47>] ? xen_do_upcall+0x7/0xc
    [   21.970432]  [<c102007b>] ? apic_reg_read+0xd3/0x22d
    [   21.970432]  [<c1002227>] ? hypercall_page+0x227/0x1005
    [   21.970432]  [<c102d30b>] ? xen_force_evtchn_callback+0xf/0x14
    [   21.970432]  [<c102da7c>] ? check_events+0x8/0xc
    [   21.970432]  [<c102da3b>] ? xen_irq_enable_direct_end+0x0/0x1
    [   21.970432]  [<c105e485>] ? finish_task_switch+0x62/0xba
    [   21.970432]  [<c14e3f84>] ? schedule+0x808/0x89d
    [   21.970432]  [<c1084dc5>] ? hrtimer_start_expires+0x1a/0x22
    [   21.970432]  [<c1085154>] ? tick_nohz_restart_sched_tick+0x15a/0x162
    [   21.970432]  [<c102f43a>] ? cpu_idle+0x6d/0x6f
    [   21.970432]  [<c14db29e>] ? cpu_bringup_and_idle+0xd/0xf
    [   21.970432] Code: 5d 0f 95 c0 0f b6 c0 c3 55 66 83 78 02 00 89 e5 5d 0f 95 \
    c0 0f b6 c0 c3 55 b2 01 86 10 31 c0 84 d2 89 e5 0f 94 c0 5d c3 55 89 e5 <0f> 0b \
    eb fe 55 80 3d 4c ce 84 c1 00 89 e5 57 56 89 c6 53 74 15
    [   21.970432] EIP: [<c102e209>] dummy_handler+0x3/0x7 SS:ESP 0069:dfc47e10
    [   21.970432] ---[ end trace c0b71f7e12cf3011 ]---
    Signed-off-by: default avatarIan Campbell <ian.campbell@citrix.com>
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    6903591f
events.c 35.2 KB