Message ID | 20220504073128.12031-13-suravee.suthikulpanit@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Introducing AMD x2AVIC and hybrid-AVIC modes | expand |
On Wed, 2022-05-04 at 02:31 -0500, Suravee Suthikulpanit wrote: > When launching a VM with x2APIC and specify more than 255 vCPUs, > the guest kernel can disable x2APIC (e.g. specify nox2apic kernel option). > The VM fallbacks to xAPIC mode, and disable the vCPU ID 255 and greater. > > In this case, APICV should be deactivated for the disabled vCPUs. > However, the current APICv consistency warning does not account for > this case, which results in a warning. > > Therefore, modify warning logic to report only when vCPU APIC mode > is valid. > > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> > --- > arch/x86/kvm/x86.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 8ee8c91fa762..b14e02ea0ff6 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -9838,6 +9838,10 @@ void kvm_vcpu_update_apicv(struct kvm_vcpu *vcpu) > > activate = kvm_vcpu_apicv_activated(vcpu); > > + /* Do not activate AVIC when APIC is disabled */ > + if (kvm_get_apic_mode(vcpu) == LAPIC_MODE_DISABLED) > + activate = false; > + > if (vcpu->arch.apicv_active == activate) > goto out; > > @@ -10240,7 +10244,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) > * per-VM state, and responsing vCPUs must wait for the update > * to complete before servicing KVM_REQ_APICV_UPDATE. > */ > - WARN_ON_ONCE(kvm_vcpu_apicv_activated(vcpu) != kvm_vcpu_apicv_active(vcpu)); > + if (kvm_vcpu_apicv_activated(vcpu) != kvm_vcpu_apicv_active(vcpu)) > + WARN_ON_ONCE(kvm_get_apic_mode(vcpu) != LAPIC_MODE_DISABLED); > > exit_fastpath = static_call(kvm_x86_vcpu_run)(vcpu); > if (likely(exit_fastpath != EXIT_FASTPATH_REENTER_GUEST)) Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Best regards, Maxim Levitsky
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 8ee8c91fa762..b14e02ea0ff6 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -9838,6 +9838,10 @@ void kvm_vcpu_update_apicv(struct kvm_vcpu *vcpu) activate = kvm_vcpu_apicv_activated(vcpu); + /* Do not activate AVIC when APIC is disabled */ + if (kvm_get_apic_mode(vcpu) == LAPIC_MODE_DISABLED) + activate = false; + if (vcpu->arch.apicv_active == activate) goto out; @@ -10240,7 +10244,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) * per-VM state, and responsing vCPUs must wait for the update * to complete before servicing KVM_REQ_APICV_UPDATE. */ - WARN_ON_ONCE(kvm_vcpu_apicv_activated(vcpu) != kvm_vcpu_apicv_active(vcpu)); + if (kvm_vcpu_apicv_activated(vcpu) != kvm_vcpu_apicv_active(vcpu)) + WARN_ON_ONCE(kvm_get_apic_mode(vcpu) != LAPIC_MODE_DISABLED); exit_fastpath = static_call(kvm_x86_vcpu_run)(vcpu); if (likely(exit_fastpath != EXIT_FASTPATH_REENTER_GUEST))
When launching a VM with x2APIC and specify more than 255 vCPUs, the guest kernel can disable x2APIC (e.g. specify nox2apic kernel option). The VM fallbacks to xAPIC mode, and disable the vCPU ID 255 and greater. In this case, APICV should be deactivated for the disabled vCPUs. However, the current APICv consistency warning does not account for this case, which results in a warning. Therefore, modify warning logic to report only when vCPU APIC mode is valid. Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> --- arch/x86/kvm/x86.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)