Fix busy-spin of lapic_timer_int_injected with APIC-v
cover Fix busy-spin of lapic_timer_int_injected with APIC-v
See patches for details.
PATCH 1/2 KVM: x86: fix lapic_timer_int_injected with APIC-v
With APICv, LAPIC timer interrupt is always delivered via IRR:apic_find_highest_irr syncs PIR to IRR.
--- arch/x86/kvm/lapic.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
arch/x86/kvm/lapic.c +6 -6
@@ -1086,13 +1086,13 @@if (kvm_apic_hw_enabled (apic)) {int vec = reg &APIC_VECTOR_MASK ; +void *bitmap = apic->regs +APIC_ISR ; -if (kvm_x86_ops->test_posted_interrupt) -return kvm_x86_ops->test_posted_interrupt (vcpu, vec); -else { -if (apic_test_vector (vec, apic->regs +APIC_ISR )) -return true; - } +if (kvm_x86_ops->deliver_posted_interrupt) + bitmap = apic->regs +APIC_IRR ; + +if (apic_test_vector (vec, bitmap)) +return true; }return false; }
PATCH 2/2 KVM: x86: revert "add method to test PIR bitmap vector"
In reply to Marcelo TosattiRevert 7c6a98dfa1ba9dc64a62e73624ecea9995736bbd, given that testing PIR is not necessary anymore.
--- arch/x86/include/asm/kvm_host.h | 1 - arch/x86/kvm/vmx.c | 14 -------------- 2 files changed, 15 deletions(-)
arch/x86/include/asm/kvm_host.h +0 -1
@@ -767,7 +767,6 @@void (*set_virtual_x2apic_mode)(struct kvm_vcpu *vcpu,bool set);void (*set_apic_access_page_addr)(struct kvm_vcpu *vcpu,hpa_t hpa);void (*deliver_posted_interrupt)(struct kvm_vcpu *vcpu,int vector); -bool (*test_posted_interrupt)(struct kvm_vcpu *vcpu,int vector);void (*sync_pir_to_irr)(struct kvm_vcpu *vcpu);int (*set_tss_addr)(struct kvm *kvm,unsigned int addr);int (*get_tdp_level)(void );
arch/x86/kvm/vmx.c +0 -14
@@ -438,11 +438,6 @@return test_and_set_bit (vector, (unsigned long *)pi_desc->pir); } -static int pi_test_pir (int vector,struct pi_desc *pi_desc) -{ -return test_bit (vector, (unsigned long *)pi_desc->pir); -} -struct vcpu_vmx {struct kvm_vcpu vcpu;unsigned long host_rsp;
@@ -5908,7 +5903,6 @@ kvm_x86_ops->hwapic_irr_update =NULL ; kvm_x86_ops->hwapic_isr_update =NULL ; kvm_x86_ops->deliver_posted_interrupt =NULL ; - kvm_x86_ops->test_posted_interrupt =NULL ; kvm_x86_ops->sync_pir_to_irr = vmx_sync_pir_to_irr_dummy; }
@@ -6994,13 +6988,6 @@return 1 ; } -static bool vmx_test_pir (struct kvm_vcpu *vcpu,int vector) -{ -struct vcpu_vmx *vmx =to_vmx (vcpu); - -return pi_test_pir (vector, &vmx->pi_desc); -} -static int handle_pml_full (struct kvm_vcpu *vcpu) {unsigned long exit_qualification;
@@ -9753,7 +9740,6 @@ .hwapic_isr_update = vmx_hwapic_isr_update, .sync_pir_to_irr = vmx_sync_pir_to_irr, .deliver_posted_interrupt = vmx_deliver_posted_interrupt, - .test_posted_interrupt = vmx_test_pir, .set_tss_addr = vmx_set_tss_addr, .get_tdp_level = get_ept_level,
Paolo Bonzini
maintainerQuoted 1 line · Marcelo Tosatti
See patches for details.
Nicer indeed. It would be good to know what bug made you do this, though.
Paolo
Quoted 8 lines · Paolo Bonzini
Quoted 1 line · Marcelo Tosatti
See patches for details.
Nicer indeed. It would be good to know what bug made you do this, though.
Paolo
kvm-unit-test tscdeadline-latency shows negative delta.
Do you want me to resend with the modified changelog?
Paolo Bonzini
maintainerQuoted 5 lines · Marcelo Tosatti
Quoted 1 line
Nicer indeed. It would be good to know what bug made you do this, though.
kvm-unit-test tscdeadline-latency shows negative delta.
Do you want me to resend with the modified changelog?
No, it's okay.
Thanks,
Paolo