mirror of https://github.com/torvalds/linux.git
A non-percpu VIRQ (e.g., VIRQ_CONSOLE) may be freed on a different VCPU than it is bound to. This can result in a race between handle_percpu_irq() and removing the action in __free_irq() because handle_percpu_irq() does not take desc->lock. The interrupt handler sees a NULL action and oopses. Only use the percpu chip/handler for per-CPU VIRQs (like VIRQ_TIMER). # cat /proc/interrupts | grep virq 40: 87246 0 xen-percpu-virq timer0 44: 0 0 xen-percpu-virq debug0 47: 0 20995 xen-percpu-virq timer1 51: 0 0 xen-percpu-virq debug1 69: 0 0 xen-dyn-virq xen-pcpu 74: 0 0 xen-dyn-virq mce 75: 29 0 xen-dyn-virq hvc_console Signed-off-by: David Vrabel <david.vrabel@citrix.com> Cc: <stable@vger.kernel.org> |
||
|---|---|---|
| .. | ||
| events | ||
| xen-pciback | ||
| xenbus | ||
| xenfs | ||
| Kconfig | ||
| Makefile | ||
| acpi.c | ||
| balloon.c | ||
| biomerge.c | ||
| cpu_hotplug.c | ||
| dbgp.c | ||
| efi.c | ||
| evtchn.c | ||
| fallback.c | ||
| features.c | ||
| gntalloc.c | ||
| gntdev.c | ||
| grant-table.c | ||
| manage.c | ||
| mcelog.c | ||
| pci.c | ||
| pcpu.c | ||
| platform-pci.c | ||
| preempt.c | ||
| privcmd.c | ||
| privcmd.h | ||
| swiotlb-xen.c | ||
| sys-hypervisor.c | ||
| tmem.c | ||
| xen-acpi-cpuhotplug.c | ||
| xen-acpi-memhotplug.c | ||
| xen-acpi-pad.c | ||
| xen-acpi-processor.c | ||
| xen-balloon.c | ||
| xen-scsiback.c | ||
| xen-selfballoon.c | ||
| xen-stub.c | ||
| xlate_mmu.c | ||