b4a2f5e723
The check for an edge is broken in current ioapic code. ioapic->irr is cleared on each edge interrupt by ioapic_service() and this makes old_irr != ioapic->irr condition in kvm_ioapic_set_irq() to be always true. The patch fixes the code to properly recognise edge. Some HW emulation calls set_irq() without level change. If each such call is propagated to an OS it may confuse a device driver. This is the case with keyboard device emulation and Windows XP x64 installer on SMP VM. Each keystroke produce two interrupts (down/up) one interrupt is submitted to CPU0 and another to CPU1. This confuses Windows somehow and it ignores keystrokes. Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com> |
||
---|---|---|
.. | ||
coalesced_mmio.c | ||
coalesced_mmio.h | ||
ioapic.c | ||
ioapic.h | ||
iodev.h | ||
iommu.c | ||
irq_comm.c | ||
kvm_main.c | ||
kvm_trace.c |