• Marcelo Tosatti's avatar
    KVM: protect assigned dev workqueue, int handler and irq acker · 547de29e
    Marcelo Tosatti authored
    kvm_assigned_dev_ack_irq is vulnerable to a race condition with the
    interrupt handler function. It does:
    
            if (dev->host_irq_disabled) {
                    enable_irq(dev->host_irq);
                    dev->host_irq_disabled = false;
            }
    
    If an interrupt triggers before the host->dev_irq_disabled assignment,
    it will disable the interrupt and set dev->host_irq_disabled to true.
    
    On return to kvm_assigned_dev_ack_irq, dev->host_irq_disabled is set to
    false, and the next kvm_assigned_dev_ack_irq call will fail to reenable
    it.
    
    Other than that, having the interrupt handler and work handlers run in
    parallel sounds like asking for trouble (could not spot any obvious
    problem, but better not have to, its fragile).
    
    CC: sheng.yang@intel.com
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
    547de29e
kvm_main.c 59.9 KB