David Vrabel 77bb3dfdc0 xen/events: don't bind non-percpu VIRQs with percpu chip
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>
2015-05-19 19:55:36 +01:00
..
2015-04-16 13:53:32 -05:00
2015-04-22 09:18:17 -07:00
2015-04-21 09:42:58 -07:00
2015-04-22 09:03:30 -07:00
2015-04-22 09:18:17 -07:00
2015-04-22 09:04:39 -07:00
2015-04-17 15:32:07 -04:00
2015-04-26 13:36:02 -07:00
2015-04-24 08:23:45 -07:00
2015-04-24 09:28:01 -07:00
2015-04-22 09:18:17 -07:00
2015-04-26 13:36:02 -07:00
2015-04-21 09:42:58 -07:00
2015-04-07 12:05:12 +02:00
2015-04-24 08:46:18 -07:00
2015-04-16 14:01:03 -05:00
2015-04-22 09:04:39 -07:00
2015-04-13 17:07:21 -07:00
2015-04-15 10:02:42 +02:00
2015-04-26 13:44:46 -07:00
2015-04-08 08:11:51 -06:00
2015-04-20 15:16:25 -07:00