Radim Krčmář <rkrcmar@xxxxxxxxxx> writes: > kvm_ioapic_update_eoi() wasn't called if directed EOI was enabled. > We need to do that for irq notifiers. (Like with edge interrupts.) > > Fix it by skipping EOI broadcast only. > > Bug: https://bugzilla.kernel.org/show_bug.cgi?id=82211 > Signed-off-by: Radim Krčmář <rkrcmar@xxxxxxxxxx> > --- > arch/x86/kvm/ioapic.c | 4 +++- > arch/x86/kvm/lapic.c | 3 +-- > 2 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c > index b1947e0f3e10..46d4449772bc 100644 > --- a/arch/x86/kvm/ioapic.c > +++ b/arch/x86/kvm/ioapic.c > @@ -422,6 +422,7 @@ static void __kvm_ioapic_update_eoi(struct kvm_vcpu *vcpu, > struct kvm_ioapic *ioapic, int vector, int trigger_mode) > { > int i; > + struct kvm_lapic *apic = vcpu->arch.apic; > > for (i = 0; i < IOAPIC_NUM_PINS; i++) { > union kvm_ioapic_redirect_entry *ent = &ioapic->redirtbl[i]; > @@ -443,7 +444,8 @@ static void __kvm_ioapic_update_eoi(struct kvm_vcpu *vcpu, > kvm_notify_acked_irq(ioapic->kvm, KVM_IRQCHIP_IOAPIC, i); > spin_lock(&ioapic->lock); > > - if (trigger_mode != IOAPIC_LEVEL_TRIG) > + if (trigger_mode != IOAPIC_LEVEL_TRIG || > + kvm_apic_get_reg(apic, APIC_SPIV) & APIC_SPIV_DIRECTED_EOI) > continue; > > ASSERT(ent->fields.trig_mode == IOAPIC_LEVEL_TRIG); > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index bd4e34de24c7..4ee827d7bf36 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -833,8 +833,7 @@ int kvm_apic_compare_prio(struct kvm_vcpu *vcpu1, struct kvm_vcpu *vcpu2) > > static void kvm_ioapic_send_eoi(struct kvm_lapic *apic, int vector) > { > - if (!(kvm_apic_get_reg(apic, APIC_SPIV) & APIC_SPIV_DIRECTED_EOI) && > - kvm_ioapic_handles_vector(apic->vcpu->kvm, vector)) { > + if (kvm_ioapic_handles_vector(apic->vcpu->kvm, vector)) { > int trigger_mode; > if (apic_test_vector(vector, apic->regs + APIC_TMR)) > trigger_mode = IOAPIC_LEVEL_TRIG; Works on my Xen 4.4 L1 setup with Intel E5 v2 host. Without this patch, L1 panics as reported in the bug referenced above. Tested-by: Bandan Das<bsd@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html