mirror of https://gitee.com/openkylin/linux.git
77bb3dfdc0
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> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
hvc_beat.c | ||
hvc_bfin_jtag.c | ||
hvc_console.c | ||
hvc_console.h | ||
hvc_dcc.c | ||
hvc_irq.c | ||
hvc_iucv.c | ||
hvc_opal.c | ||
hvc_rtas.c | ||
hvc_tile.c | ||
hvc_udbg.c | ||
hvc_vio.c | ||
hvc_xen.c | ||
hvcs.c | ||
hvsi.c | ||
hvsi_lib.c |