]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - arch/x86/kvm/cpuid.c
KVM: MMU: Expose the LA57 feature to VM.
[mirror_ubuntu-bionic-kernel.git] / arch / x86 / kvm / cpuid.c
index f8f18f41976cce20a6c81c15543de13675af8cbd..1cea3ffba82d9474f603d14b40acb970dcf1a41b 100644 (file)
@@ -126,13 +126,16 @@ int kvm_update_cpuid(struct kvm_vcpu *vcpu)
                best->ebx = xstate_required_size(vcpu->arch.xcr0, true);
 
        /*
-        * The existing code assumes virtual address is 48-bit in the canonical
-        * address checks; exit if it is ever changed.
+        * The existing code assumes virtual address is 48-bit or 57-bit in the
+        * canonical address checks; exit if it is ever changed.
         */
        best = kvm_find_cpuid_entry(vcpu, 0x80000008, 0);
-       if (best && ((best->eax & 0xff00) >> 8) != 48 &&
-               ((best->eax & 0xff00) >> 8) != 0)
-               return -EINVAL;
+       if (best) {
+               int vaddr_bits = (best->eax & 0xff00) >> 8;
+
+               if (vaddr_bits != 48 && vaddr_bits != 57 && vaddr_bits != 0)
+                       return -EINVAL;
+       }
 
        /* Update physical-address width */
        vcpu->arch.maxphyaddr = cpuid_query_maxphyaddr(vcpu);
@@ -384,7 +387,8 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
 
        /* cpuid 7.0.ecx*/
        const u32 kvm_cpuid_7_0_ecx_x86_features =
-               F(AVX512VBMI) | F(PKU) | 0 /*OSPKE*/ | F(AVX512_VPOPCNTDQ);
+               F(AVX512VBMI) | F(LA57) | F(PKU) |
+               0 /*OSPKE*/ | F(AVX512_VPOPCNTDQ);
 
        /* cpuid 7.0.edx*/
        const u32 kvm_cpuid_7_0_edx_x86_features =