repository: /home/avi/kvm/linux-2.6 branch: master commit 99f6c824362215f3038cfe54ddcd3c940281e9cd Author: Avi Kivity <[EMAIL PROTECTED]> Date: Fri Sep 21 05:29:13 2007 +0200
KVM: Fix ioapic edge-triggered interrupts - clear irr after service - do not service after unmasking; wait for a new edge Signed-off-by: Avi Kivity <[EMAIL PROTECTED]> diff --git a/drivers/kvm/ioapic.c b/drivers/kvm/ioapic.c index b0d3843..9eb5058 100644 --- a/drivers/kvm/ioapic.c +++ b/drivers/kvm/ioapic.c @@ -90,6 +90,8 @@ static void ioapic_service(struct kvm_ioapic *ioapic, unsigned int idx) if (pent->fields.trig_mode == IOAPIC_LEVEL_TRIG) pent->fields.remote_irr = 1; } + if (!pent->fields.trig_mode) + ioapic->irr &= ~(1 << idx); } static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val) @@ -121,7 +123,8 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val) ioapic->redirtbl[index].bits |= (u32) val; ioapic->redirtbl[index].fields.remote_irr = 0; } - ioapic_service(ioapic, index); + if (ioapic->irr & (1 << index)) + ioapic_service(ioapic, index); break; } } ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ kvm-commits mailing list kvm-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-commits