2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-29 15:43:59 +08:00

KVM: nVMX: list VMX MSRs in KVM_GET_MSR_INDEX_LIST

This allows userspace to know which MSRs are supported by the hypervisor.
Unfortunately userspace must resort to tricks for everything except
MSR_IA32_VMX_VMFUNC (which was just added in the previous patch).
One possibility is to use the feature control MSR, which is tied to nested
VMX as well and is present on all KVM versions that support feature MSRs.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2019-07-02 14:45:24 +02:00
parent e8a70bd4e9
commit 95c5c7c77c
3 changed files with 23 additions and 0 deletions

View File

@ -5885,6 +5885,7 @@ static bool svm_has_emulated_msr(int index)
{ {
switch (index) { switch (index) {
case MSR_IA32_MCG_EXT_CTL: case MSR_IA32_MCG_EXT_CTL:
case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMFUNC:
return false; return false;
default: default:
break; break;

View File

@ -6223,6 +6223,8 @@ static bool vmx_has_emulated_msr(int index)
* real mode. * real mode.
*/ */
return enable_unrestricted_guest || emulate_invalid_guest_state; return enable_unrestricted_guest || emulate_invalid_guest_state;
case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMFUNC:
return nested;
case MSR_AMD64_VIRT_SPEC_CTRL: case MSR_AMD64_VIRT_SPEC_CTRL:
/* This is AMD only. */ /* This is AMD only. */
return false; return false;

View File

@ -1176,6 +1176,26 @@ static u32 emulated_msrs[] = {
MSR_AMD64_VIRT_SPEC_CTRL, MSR_AMD64_VIRT_SPEC_CTRL,
MSR_IA32_POWER_CTL, MSR_IA32_POWER_CTL,
/*
* The following list leaves out MSRs whose values are determined
* by arch/x86/kvm/vmx/nested.c based on CPUID or other MSRs.
* We always support the "true" VMX control MSRs, even if the host
* processor does not, so I am putting these registers here rather
* than in msrs_to_save.
*/
MSR_IA32_VMX_BASIC,
MSR_IA32_VMX_TRUE_PINBASED_CTLS,
MSR_IA32_VMX_TRUE_PROCBASED_CTLS,
MSR_IA32_VMX_TRUE_EXIT_CTLS,
MSR_IA32_VMX_TRUE_ENTRY_CTLS,
MSR_IA32_VMX_MISC,
MSR_IA32_VMX_CR0_FIXED0,
MSR_IA32_VMX_CR4_FIXED0,
MSR_IA32_VMX_VMCS_ENUM,
MSR_IA32_VMX_PROCBASED_CTLS2,
MSR_IA32_VMX_EPT_VPID_CAP,
MSR_IA32_VMX_VMFUNC,
MSR_K7_HWCR, MSR_K7_HWCR,
MSR_KVM_POLL_CONTROL, MSR_KVM_POLL_CONTROL,
}; };