]> git.baikalelectronics.ru Git - kernel.git/commitdiff
KVM: x86/mmu: Remove broken WARN that fires on 32-bit KVM w/ nested EPT
authorSean Christopherson <seanjc@google.com>
Tue, 22 Jun 2021 17:56:46 +0000 (10:56 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 24 Jun 2021 22:00:35 +0000 (18:00 -0400)
Remove a misguided WARN that attempts to detect the scenario where using
a special A/D tracking flag will set reserved bits on a non-MMIO spte.
The WARN triggers false positives when using EPT with 32-bit KVM because
of the !64-bit clause, which is just flat out wrong.  The whole A/D
tracking goo is specific to EPT, and one of the big selling points of EPT
is that EPT is decoupled from the host's native paging mode.

Drop the WARN instead of trying to salvage the check.  Keeping a check
specific to A/D tracking bits would essentially regurgitate the same code
that led to KVM needed the tracking bits in the first place.

A better approach would be to add a generic WARN on reserved bits being
set, which would naturally cover the A/D tracking bits, work for all
flavors of paging, and be self-documenting to some extent.

Fixes: b2a9df0ca886 ("KVM: x86/mmu: Rename and document A/D scheme for TDP SPTEs")
Cc: stable@vger.kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20210622175739.3610207-2-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu/spte.c

index 66d43cec0c31aa51d18cdf5c32c0cad9590daa35..8e8e8da740a07b30e4c555af58791039b9c714de 100644 (file)
@@ -102,13 +102,6 @@ int make_spte(struct kvm_vcpu *vcpu, unsigned int pte_access, int level,
        else if (kvm_vcpu_ad_need_write_protect(vcpu))
                spte |= SPTE_TDP_AD_WRPROT_ONLY_MASK;
 
-       /*
-        * Bits 62:52 of PAE SPTEs are reserved.  WARN if said bits are set
-        * if PAE paging may be employed (shadow paging or any 32-bit KVM).
-        */
-       WARN_ON_ONCE((!tdp_enabled || !IS_ENABLED(CONFIG_X86_64)) &&
-                    (spte & SPTE_TDP_AD_MASK));
-
        /*
         * For the EPT case, shadow_present_mask is 0 if hardware
         * supports exec-only page table entries.  In that case,