2022-10-01 01:01:43

by Sean Christopherson

[permalink] [raw]
Subject: [PATCH v4 05/32] KVM: x86: Don't inhibit APICv/AVIC on xAPIC ID "change" if APIC is disabled

Don't inhibit APICv/AVIC due to an xAPIC ID mismatch if the APIC is
hardware disabled. The ID cannot be consumed while the APIC is disabled,
and the ID is guaranteed to be set back to the vcpu_id when the APIC is
hardware enabled (architectural behavior correctly emulated by KVM).

Fixes: 3743c2f02517 ("KVM: x86: inhibit APICv/AVIC on changes to APIC ID or APIC base")
Cc: [email protected]
Signed-off-by: Sean Christopherson <[email protected]>
---
arch/x86/kvm/lapic.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 5de1c7aa1ce9..67260f7ce43a 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -2072,6 +2072,9 @@ static void kvm_lapic_xapic_id_updated(struct kvm_lapic *apic)
{
struct kvm *kvm = apic->vcpu->kvm;

+ if (!kvm_apic_hw_enabled(apic))
+ return;
+
if (KVM_BUG_ON(apic_x2apic_mode(apic), kvm))
return;

--
2.38.0.rc1.362.ged0d419d3c-goog


2022-12-08 22:07:09

by Maxim Levitsky

[permalink] [raw]
Subject: Re: [PATCH v4 05/32] KVM: x86: Don't inhibit APICv/AVIC on xAPIC ID "change" if APIC is disabled

On Sat, 2022-10-01 at 00:58 +0000, Sean Christopherson wrote:
> Don't inhibit APICv/AVIC due to an xAPIC ID mismatch if the APIC is
> hardware disabled. The ID cannot be consumed while the APIC is disabled,
> and the ID is guaranteed to be set back to the vcpu_id when the APIC is
> hardware enabled (architectural behavior correctly emulated by KVM).
>
> Fixes: 3743c2f02517 ("KVM: x86: inhibit APICv/AVIC on changes to APIC ID or APIC base")
> Cc: [email protected]
> Signed-off-by: Sean Christopherson <[email protected]>
> ---
> arch/x86/kvm/lapic.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
> index 5de1c7aa1ce9..67260f7ce43a 100644
> --- a/arch/x86/kvm/lapic.c
> +++ b/arch/x86/kvm/lapic.c
> @@ -2072,6 +2072,9 @@ static void kvm_lapic_xapic_id_updated(struct kvm_lapic *apic)
> {
> struct kvm *kvm = apic->vcpu->kvm;
>
> + if (!kvm_apic_hw_enabled(apic))
> + return;
> +
> if (KVM_BUG_ON(apic_x2apic_mode(apic), kvm))
> return;
>
Reviewed-by: Maxim Levitsky <[email protected]>

Best regards,
Maxim Levitsky