On 03/05/19 15:38, Suthikulpanit, Suravee wrote: > AVIC doorbell is used to notify a running vCPU that interrupts > has been injected into the vCPU AVIC backing page. Current logic > checks only if a VCPU is running before sending a doorbell. > However, the doorbell is not necessary if the destination > CPU is itself. > > Add logic to check currently running CPU before sending doorbell. > > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> > --- > arch/x86/kvm/svm.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > index 122788f..4bbf6fc 100644 > --- a/arch/x86/kvm/svm.c > +++ b/arch/x86/kvm/svm.c > @@ -5283,10 +5283,13 @@ static void svm_deliver_avic_intr(struct kvm_vcpu *vcpu, int vec) > kvm_lapic_set_irr(vec, vcpu->arch.apic); > smp_mb__after_atomic(); > > - if (avic_vcpu_is_running(vcpu)) > - wrmsrl(SVM_AVIC_DOORBELL, > - kvm_cpu_get_apicid(vcpu->cpu)); > - else > + if (avic_vcpu_is_running(vcpu)) { > + int cpuid = vcpu->cpu; > + > + if (cpuid != get_cpu()) > + wrmsrl(SVM_AVIC_DOORBELL, kvm_cpu_get_apicid(cpuid)); > + put_cpu(); > + } else > kvm_vcpu_wake_up(vcpu); > } > > Queued, thanks. Paolo