diff options
-rw-r--r-- | drivers/kvm/ioapic.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/kvm/ioapic.c b/drivers/kvm/ioapic.c index b0d3843b7963..9eb505861475 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; } } |