• David Vrabel's avatar
    xen/events: don't bind non-percpu VIRQs with percpu chip · 0b80fa4b
    David Vrabel authored
    commit 77bb3dfd upstream.
    
    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: default avatarDavid Vrabel <david.vrabel@citrix.com>
    [lizf: Backported to 3.4: adjust filename]
    Signed-off-by: default avatarZefan Li <lizefan@huawei.com>
    0b80fa4b
events.c 42.2 KB