Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[sfrench/cifs-2.6.git] / arch / x86 / kernel / cpu / feat_ctl.c
index da696eb4821a0b159e14ea0246beea0bcaf22cfc..993697e71854c0de3c8a02c054980df3eb57b390 100644 (file)
@@ -15,6 +15,8 @@ enum vmx_feature_leafs {
        MISC_FEATURES = 0,
        PRIMARY_CTLS,
        SECONDARY_CTLS,
+       TERTIARY_CTLS_LOW,
+       TERTIARY_CTLS_HIGH,
        NR_VMX_FEATURE_WORDS,
 };
 
@@ -22,7 +24,7 @@ enum vmx_feature_leafs {
 
 static void init_vmx_capabilities(struct cpuinfo_x86 *c)
 {
-       u32 supported, funcs, ept, vpid, ign;
+       u32 supported, funcs, ept, vpid, ign, low, high;
 
        BUILD_BUG_ON(NVMXINTS != NR_VMX_FEATURE_WORDS);
 
@@ -42,6 +44,11 @@ static void init_vmx_capabilities(struct cpuinfo_x86 *c)
        rdmsr_safe(MSR_IA32_VMX_PROCBASED_CTLS2, &ign, &supported);
        c->vmx_capability[SECONDARY_CTLS] = supported;
 
+       /* All 64 bits of tertiary controls MSR are allowed-1 settings. */
+       rdmsr_safe(MSR_IA32_VMX_PROCBASED_CTLS3, &low, &high);
+       c->vmx_capability[TERTIARY_CTLS_LOW] = low;
+       c->vmx_capability[TERTIARY_CTLS_HIGH] = high;
+
        rdmsr(MSR_IA32_VMX_PINBASED_CTLS, ign, supported);
        rdmsr_safe(MSR_IA32_VMX_VMFUNC, &ign, &funcs);