On Tue, 21 Apr 2020 at 19:40, Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On 21/04/20 13:20, Wanpeng Li wrote: > > + > > + if (!vmx->req_immediate_exit && > > + !unlikely(vmx->loaded_vmcs->hv_timer_soft_disabled)) { > > + if (!vmx_interrupt_allowed(vcpu) || For non-APICv case, we need to request interrupt-window. > > + !apic_lvtt_tscdeadline(apic) || Now just add fastpath for tscdeadline mode. > > + vmx->rmode.vm86_active || > > + is_smm(vcpu) || > > + !kvm_apic_hw_enabled(apic)) These stuff can be removed, kvm_apic_hw_enable() is check in vmx_fast_deliver_interrupt(). > > + return EXIT_FASTPATH_NONE; > > + > > + if (!apic->lapic_timer.hv_timer_in_use) > > + return EXIT_FASTPATH_CONT_RUN; > > + > > + WARN_ON(swait_active(&vcpu->wq)); > > + vmx_cancel_hv_timer(vcpu); > > + apic->lapic_timer.hv_timer_in_use = false; > > + > > + if (atomic_read(&apic->lapic_timer.pending)) > > + return EXIT_FASTPATH_CONT_RUN; Other two checks are the same in kvm_lapic_expired_hv_timer(). Wanpeng > > + > > + ktimer->expired_tscdeadline = ktimer->tscdeadline; > > + vmx_fast_deliver_interrupt(vcpu); > > + ktimer->tscdeadline = 0; > > + return EXIT_FASTPATH_CONT_RUN; > > + } > > + > > Can you explain all the checks you have here, and why you need something > more complex than apic_timer_expired (possibly by adding some > optimizations to kvm_apic_local_deliver)? This code is impossible to > maintain. > > Paolo >