> -----Original Message----- > From: Sean Christopherson <seanjc@xxxxxxxxxx> > Sent: Saturday, December 2, 2023 12:58 AM > To: Li,Rongqing <lirongqing@xxxxxxxxx> > Cc: x86@xxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; mlevitsk@xxxxxxxxxx; > yilun.xu@xxxxxxxxxxxxxxx > Subject: Re: [PATCH v2] KVM: x86: fix kvm_has_noapic_vcpu updates when fail > to create vcpu > > On Thu, Nov 23, 2023, Li RongQing wrote: > > Static key kvm_has_noapic_vcpu should be reduced when fail to create > > vcpu, opportunistically change to call kvm_free_lapic only when LAPIC > > is in kernel in kvm_arch_vcpu_destroy > > Heh, this has been on my todo list for a comically long time. > > > Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx> > > Signed-off-by: Li RongQing <lirongqing@xxxxxxxxx> > > --- > > diff v1: call kvm_free_lapic conditionally in kvm_arch_vcpu_destroy > > > > arch/x86/kvm/x86.c | 14 ++++++++++---- > > 1 file changed, 10 insertions(+), 4 deletions(-) > > > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index > > 2c92407..3cadf28 100644 > > --- a/arch/x86/kvm/x86.c > > +++ b/arch/x86/kvm/x86.c > > @@ -12079,7 +12079,10 @@ int kvm_arch_vcpu_create(struct kvm_vcpu > *vcpu) > > kfree(vcpu->arch.mci_ctl2_banks); > > free_page((unsigned long)vcpu->arch.pio_data); > > fail_free_lapic: > > - kvm_free_lapic(vcpu); > > + if (lapic_in_kernel(vcpu)) > > + kvm_free_lapic(vcpu); > > + else > > + static_branch_dec(&kvm_has_noapic_vcpu); > > fail_mmu_destroy: > > kvm_mmu_destroy(vcpu); > > return r; > > @@ -12122,14 +12125,17 @@ void kvm_arch_vcpu_destroy(struct kvm_vcpu > *vcpu) > > kvm_pmu_destroy(vcpu); > > kfree(vcpu->arch.mce_banks); > > kfree(vcpu->arch.mci_ctl2_banks); > > - kvm_free_lapic(vcpu); > > + > > + if (lapic_in_kernel(vcpu)) > > + kvm_free_lapic(vcpu); > > + else > > + static_branch_dec(&kvm_has_noapic_vcpu); > > Rather than split code like this, what if we let the APIC code deal with bumping > the static branch? I am fine, thanks -Li