linux/virt/kvm
Marcelo Tosatti 547de29e5b KVM: protect assigned dev workqueue, int handler and irq acker
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: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
2009-06-10 11:48:53 +03:00
..
coalesced_mmio.c KVM: Add coalesced MMIO support (common part) 2008-07-20 12:42:31 +03:00
coalesced_mmio.h KVM: Add coalesced MMIO support (common part) 2008-07-20 12:42:31 +03:00
ioapic.c KVM: APIC: get rid of deliver_bitmask 2009-06-10 11:48:27 +03:00
ioapic.h KVM: APIC: get rid of deliver_bitmask 2009-06-10 11:48:27 +03:00
iodev.h KVM: kvm_io_device: extend in_range() to manage len and write attribute 2008-07-20 12:42:30 +03:00
iommu.c KVM: Enable snooping control for supported hardware 2009-06-10 11:48:50 +03:00
irq_comm.c KVM: Trivial format fix in setup_routing_entry() 2009-06-10 11:48:50 +03:00
kvm_main.c KVM: protect assigned dev workqueue, int handler and irq acker 2009-06-10 11:48:53 +03:00
kvm_trace.c KVM: Prevent trace call into unloaded module text 2008-12-31 16:55:04 +02:00