KVM: nVMX: Fix content of MSR_IA32_VMX_ENTRY/EXIT_CTLS
PATCH v2 1/1 KVM: nVMX: Fix content of MSR_IA32_VMX_ENTRY/EXIT_CTLS
Properly set those bits to 1 that the spec demands in case bit 55 of VMX_BASIC is 0 - like in our case.
---
Changes in v2:
- use symbolic constants
arch/x86/include/asm/vmx.h | 4 ++++ arch/x86/kvm/vmx.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-)
arch/x86/include/asm/vmx.h +4 -0
@@ -169,6 +169,8 @@#define VM_EXIT_LOAD_IA32_EFER 0x00200000#define VM_EXIT_SAVE_VMX_PREEMPTION_TIMER 0x00400000 +#define VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR 0x00036dff +#define VM_ENTRY_LOAD_DEBUG_CONTROLS 0x00000002#define VM_ENTRY_IA32E_MODE 0x00000200#define VM_ENTRY_SMM 0x00000400
@@ -177,6 +179,8 @@#define VM_ENTRY_LOAD_IA32_PAT 0x00004000#define VM_ENTRY_LOAD_IA32_EFER 0x00008000 +#define VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR 0x000011ff +#define VMX_MISC_SAVE_EFER_LMA 0x00000020/* VMCS Encodings */
arch/x86/kvm/vmx.c +10 -3
@@ -2050,21 +2050,28 @@ static __init void nested_vmx_setup_ctls_msrs(void)PIN_BASED_EXT_INTR_MASK |PIN_BASED_NMI_EXITING |PIN_BASED_VIRTUAL_NMIS ; -/* exit controls */ - nested_vmx_exit_ctls_low =0 ; +/* +* Exit controls +* If bit 55 of VMX_BASIC is off, bits 0-8 and 10, 11, 13, 14, 16 and +* 17 must be 1. +*/ + nested_vmx_exit_ctls_low =VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR ;/* Note that guest use of VM_EXIT_ACK_INTR_ON_EXIT is not supported. */ #ifdef CONFIG_X86_64 nested_vmx_exit_ctls_high =VM_EXIT_HOST_ADDR_SPACE_SIZE ;#else nested_vmx_exit_ctls_high =0 ;#endif + nested_vmx_exit_ctls_high |=VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR ;/* entry controls */ rdmsr (MSR_IA32_VMX_ENTRY_CTLS , nested_vmx_entry_ctls_low, nested_vmx_entry_ctls_high); - nested_vmx_entry_ctls_low =0 ; +/* If bit 55 of VMX_BASIC is off, bits 0-8 and 12 must be 1. */ + nested_vmx_entry_ctls_low =VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR ; nested_vmx_entry_ctls_high &=VM_ENTRY_LOAD_IA32_PAT |VM_ENTRY_IA32E_MODE ; + nested_vmx_entry_ctls_high |=VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR ;/* cpu-based controls */ rdmsr(MSR_IA32_VMX_PROCBASED_CTLS,
Signature · 1 line
1.7.3.4
Il 04/03/2013 17:15, Jan Kiszka ha scritto:
Quoted 4 lines
Properly set those bits to 1 that the spec demands in case bit 55 of
VMX_BASICis 0 - like in our case.Signed-off-by Jan Kiszka <[email protected]>
Quoted 68 lines
---
Changes in v2:
- use symbolic constantsarch/x86/include/asm/vmx.h | 4 ++++ arch/x86/kvm/vmx.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-)arch/x86/include/asm/vmx.h +4
-0@@ -169,6 +169,8 @@#define VM_EXIT_LOAD_IA32_EFER 0x00200000#define VM_EXIT_SAVE_VMX_PREEMPTION_TIMER 0x00400000 +#define VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR 0x00036dff +#define VM_ENTRY_LOAD_DEBUG_CONTROLS 0x00000002#define VM_ENTRY_IA32E_MODE 0x00000200#define VM_ENTRY_SMM 0x00000400@@ -177,6 +179,8 @@#define VM_ENTRY_LOAD_IA32_PAT 0x00004000#define VM_ENTRY_LOAD_IA32_EFER 0x00008000 +#define VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR 0x000011ff +#define VMX_MISC_SAVE_EFER_LMA 0x00000020/* VMCS Encodings */ arch/x86/kvm/vmx.c +10
-3@@ -2050,21 +2050,28 @@ static __init void nested_vmx_setup_ctls_msrs(void)PIN_BASED_EXT_INTR_MASK |PIN_BASED_NMI_EXITING |PIN_BASED_VIRTUAL_NMIS ; -/* exit controls */ - nested_vmx_exit_ctls_low =0 ; +/* +* Exit controls +* If bit 55 of VMX_BASIC is off, bits 0-8 and 10, 11, 13, 14, 16 and +* 17 must be 1. +*/ + nested_vmx_exit_ctls_low =VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR ;/* Note that guest use of VM_EXIT_ACK_INTR_ON_EXIT is not supported. */ #ifdef CONFIG_X86_64 nested_vmx_exit_ctls_high =VM_EXIT_HOST_ADDR_SPACE_SIZE ;#else nested_vmx_exit_ctls_high =0 ;#endif + nested_vmx_exit_ctls_high |=VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR ;/* entry controls */ rdmsr (MSR_IA32_VMX_ENTRY_CTLS , nested_vmx_entry_ctls_low, nested_vmx_entry_ctls_high); - nested_vmx_entry_ctls_low =0 ; +/* If bit 55 of VMX_BASIC is off, bits 0-8 and 12 must be 1. */ + nested_vmx_entry_ctls_low =VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR ; nested_vmx_entry_ctls_high &=VM_ENTRY_LOAD_IA32_PAT |VM_ENTRY_IA32E_MODE ; + nested_vmx_entry_ctls_high |=VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR ;/* cpu-based controls */ rdmsr(MSR_IA32_VMX_PROCBASED_CTLS,
Quoted 4 lines · Jan Kiszka
Properly set those bits to 1 that the spec demands in case bit 55 of
VMX_BASICis 0 - like in our case.Signed-off-by Jan Kiszka <[email protected]>
Quoted 8 lines
---
Changes in v2:
- use symbolic constantsarch/x86/include/asm/vmx.h | 4 ++++ arch/x86/kvm/vmx.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-)
Please regenerate against queue branch.
PATCH v3 1/1 KVM: nVMX: Fix content of MSR_IA32_VMX_ENTRY/EXIT_CTLS
Properly set those bits to 1 that the spec demands in case bit 55 of VMX_BASIC is 0 - like in our case.
---
Changes in v3:
- rebase over queue
arch/x86/include/asm/vmx.h | 4 ++++ arch/x86/kvm/vmx.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-)
arch/x86/include/asm/vmx.h +4 -0
@@ -81,6 +81,8 @@#define VM_EXIT_LOAD_IA32_EFER 0x00200000#define VM_EXIT_SAVE_VMX_PREEMPTION_TIMER 0x00400000 +#define VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR 0x00036dff +#define VM_ENTRY_LOAD_DEBUG_CONTROLS 0x00000002#define VM_ENTRY_IA32E_MODE 0x00000200#define VM_ENTRY_SMM 0x00000400
@@ -89,6 +91,8 @@#define VM_ENTRY_LOAD_IA32_PAT 0x00004000#define VM_ENTRY_LOAD_IA32_EFER 0x00008000 +#define VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR 0x000011ff +/* VMCS Encodings */ enum vmcs_field {VIRTUAL_PROCESSOR_ID =0x00000000 ,
arch/x86/kvm/vmx.c +10 -3
@@ -2049,21 +2049,28 @@ static __init void nested_vmx_setup_ctls_msrs(void)PIN_BASED_EXT_INTR_MASK |PIN_BASED_NMI_EXITING |PIN_BASED_VIRTUAL_NMIS ; -/* exit controls */ - nested_vmx_exit_ctls_low =0 ; +/* +* Exit controls +* If bit 55 of VMX_BASIC is off, bits 0-8 and 10, 11, 13, 14, 16 and +* 17 must be 1. +*/ + nested_vmx_exit_ctls_low =VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR ;/* Note that guest use of VM_EXIT_ACK_INTR_ON_EXIT is not supported. */ #ifdef CONFIG_X86_64 nested_vmx_exit_ctls_high =VM_EXIT_HOST_ADDR_SPACE_SIZE ;#else nested_vmx_exit_ctls_high =0 ;#endif + nested_vmx_exit_ctls_high |=VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR ;/* entry controls */ rdmsr (MSR_IA32_VMX_ENTRY_CTLS , nested_vmx_entry_ctls_low, nested_vmx_entry_ctls_high); - nested_vmx_entry_ctls_low =0 ; +/* If bit 55 of VMX_BASIC is off, bits 0-8 and 12 must be 1. */ + nested_vmx_entry_ctls_low =VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR ; nested_vmx_entry_ctls_high &=VM_ENTRY_LOAD_IA32_PAT |VM_ENTRY_IA32E_MODE ; + nested_vmx_entry_ctls_high |=VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR ;/* cpu-based controls */ rdmsr(MSR_IA32_VMX_PROCBASED_CTLS,
Signature · 1 line
1.7.3.4
Marcelo Tosatti
AppliedQuoted 4 lines · Jan Kiszka
Properly set those bits to 1 that the spec demands in case bit 55 of
VMX_BASICis 0 - like in our case.Signed-off-by Jan Kiszka <[email protected]>
Quoted 8 lines
---
Changes in v3:
- rebase over queuearch/x86/include/asm/vmx.h | 4 ++++ arch/x86/kvm/vmx.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-)
Applied, thanks.