Skip to content

Commit 68ac422

Browse files
sean-jcbonzini
authored andcommitted
KVM: nVMX: Move EVMCS1_SUPPORT_* macros to hyperv.c
Move the macros that define the set of VMCS controls that are supported by eVMCS1 from hyperv.h to hyperv.c, i.e. make them "private". The macros should never be consumed directly by KVM at-large since the "final" set of supported controls depends on guest CPUID. No functional change intended. Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20230211003534.564198-2-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 9a96770 commit 68ac422

2 files changed

Lines changed: 105 additions & 105 deletions

File tree

arch/x86/kvm/vmx/hyperv.c

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,111 @@
1313

1414
#define CC KVM_NESTED_VMENTER_CONSISTENCY_CHECK
1515

16+
/*
17+
* Enlightened VMCSv1 doesn't support these:
18+
*
19+
* POSTED_INTR_NV = 0x00000002,
20+
* GUEST_INTR_STATUS = 0x00000810,
21+
* APIC_ACCESS_ADDR = 0x00002014,
22+
* POSTED_INTR_DESC_ADDR = 0x00002016,
23+
* EOI_EXIT_BITMAP0 = 0x0000201c,
24+
* EOI_EXIT_BITMAP1 = 0x0000201e,
25+
* EOI_EXIT_BITMAP2 = 0x00002020,
26+
* EOI_EXIT_BITMAP3 = 0x00002022,
27+
* GUEST_PML_INDEX = 0x00000812,
28+
* PML_ADDRESS = 0x0000200e,
29+
* VM_FUNCTION_CONTROL = 0x00002018,
30+
* EPTP_LIST_ADDRESS = 0x00002024,
31+
* VMREAD_BITMAP = 0x00002026,
32+
* VMWRITE_BITMAP = 0x00002028,
33+
*
34+
* TSC_MULTIPLIER = 0x00002032,
35+
* PLE_GAP = 0x00004020,
36+
* PLE_WINDOW = 0x00004022,
37+
* VMX_PREEMPTION_TIMER_VALUE = 0x0000482E,
38+
*
39+
* Currently unsupported in KVM:
40+
* GUEST_IA32_RTIT_CTL = 0x00002814,
41+
*/
42+
#define EVMCS1_SUPPORTED_PINCTRL \
43+
(PIN_BASED_ALWAYSON_WITHOUT_TRUE_MSR | \
44+
PIN_BASED_EXT_INTR_MASK | \
45+
PIN_BASED_NMI_EXITING | \
46+
PIN_BASED_VIRTUAL_NMIS)
47+
48+
#define EVMCS1_SUPPORTED_EXEC_CTRL \
49+
(CPU_BASED_ALWAYSON_WITHOUT_TRUE_MSR | \
50+
CPU_BASED_HLT_EXITING | \
51+
CPU_BASED_CR3_LOAD_EXITING | \
52+
CPU_BASED_CR3_STORE_EXITING | \
53+
CPU_BASED_UNCOND_IO_EXITING | \
54+
CPU_BASED_MOV_DR_EXITING | \
55+
CPU_BASED_USE_TSC_OFFSETTING | \
56+
CPU_BASED_MWAIT_EXITING | \
57+
CPU_BASED_MONITOR_EXITING | \
58+
CPU_BASED_INVLPG_EXITING | \
59+
CPU_BASED_RDPMC_EXITING | \
60+
CPU_BASED_INTR_WINDOW_EXITING | \
61+
CPU_BASED_CR8_LOAD_EXITING | \
62+
CPU_BASED_CR8_STORE_EXITING | \
63+
CPU_BASED_RDTSC_EXITING | \
64+
CPU_BASED_TPR_SHADOW | \
65+
CPU_BASED_USE_IO_BITMAPS | \
66+
CPU_BASED_MONITOR_TRAP_FLAG | \
67+
CPU_BASED_USE_MSR_BITMAPS | \
68+
CPU_BASED_NMI_WINDOW_EXITING | \
69+
CPU_BASED_PAUSE_EXITING | \
70+
CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
71+
72+
#define EVMCS1_SUPPORTED_2NDEXEC \
73+
(SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE | \
74+
SECONDARY_EXEC_WBINVD_EXITING | \
75+
SECONDARY_EXEC_ENABLE_VPID | \
76+
SECONDARY_EXEC_ENABLE_EPT | \
77+
SECONDARY_EXEC_UNRESTRICTED_GUEST | \
78+
SECONDARY_EXEC_DESC | \
79+
SECONDARY_EXEC_ENABLE_RDTSCP | \
80+
SECONDARY_EXEC_ENABLE_INVPCID | \
81+
SECONDARY_EXEC_XSAVES | \
82+
SECONDARY_EXEC_RDSEED_EXITING | \
83+
SECONDARY_EXEC_RDRAND_EXITING | \
84+
SECONDARY_EXEC_TSC_SCALING | \
85+
SECONDARY_EXEC_ENABLE_USR_WAIT_PAUSE | \
86+
SECONDARY_EXEC_PT_USE_GPA | \
87+
SECONDARY_EXEC_PT_CONCEAL_VMX | \
88+
SECONDARY_EXEC_BUS_LOCK_DETECTION | \
89+
SECONDARY_EXEC_NOTIFY_VM_EXITING | \
90+
SECONDARY_EXEC_ENCLS_EXITING)
91+
92+
#define EVMCS1_SUPPORTED_3RDEXEC (0ULL)
93+
94+
#define EVMCS1_SUPPORTED_VMEXIT_CTRL \
95+
(VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR | \
96+
VM_EXIT_SAVE_DEBUG_CONTROLS | \
97+
VM_EXIT_ACK_INTR_ON_EXIT | \
98+
VM_EXIT_HOST_ADDR_SPACE_SIZE | \
99+
VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL | \
100+
VM_EXIT_SAVE_IA32_PAT | \
101+
VM_EXIT_LOAD_IA32_PAT | \
102+
VM_EXIT_SAVE_IA32_EFER | \
103+
VM_EXIT_LOAD_IA32_EFER | \
104+
VM_EXIT_CLEAR_BNDCFGS | \
105+
VM_EXIT_PT_CONCEAL_PIP | \
106+
VM_EXIT_CLEAR_IA32_RTIT_CTL)
107+
108+
#define EVMCS1_SUPPORTED_VMENTRY_CTRL \
109+
(VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR | \
110+
VM_ENTRY_LOAD_DEBUG_CONTROLS | \
111+
VM_ENTRY_IA32E_MODE | \
112+
VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \
113+
VM_ENTRY_LOAD_IA32_PAT | \
114+
VM_ENTRY_LOAD_IA32_EFER | \
115+
VM_ENTRY_LOAD_BNDCFGS | \
116+
VM_ENTRY_PT_CONCEAL_PIP | \
117+
VM_ENTRY_LOAD_IA32_RTIT_CTL)
118+
119+
#define EVMCS1_SUPPORTED_VMFUNC (0)
120+
16121
DEFINE_STATIC_KEY_FALSE(enable_evmcs);
17122

18123
#define EVMCS1_OFFSET(x) offsetof(struct hv_enlightened_vmcs, x)

arch/x86/kvm/vmx/hyperv.h

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -22,111 +22,6 @@ DECLARE_STATIC_KEY_FALSE(enable_evmcs);
2222

2323
#define KVM_EVMCS_VERSION 1
2424

25-
/*
26-
* Enlightened VMCSv1 doesn't support these:
27-
*
28-
* POSTED_INTR_NV = 0x00000002,
29-
* GUEST_INTR_STATUS = 0x00000810,
30-
* APIC_ACCESS_ADDR = 0x00002014,
31-
* POSTED_INTR_DESC_ADDR = 0x00002016,
32-
* EOI_EXIT_BITMAP0 = 0x0000201c,
33-
* EOI_EXIT_BITMAP1 = 0x0000201e,
34-
* EOI_EXIT_BITMAP2 = 0x00002020,
35-
* EOI_EXIT_BITMAP3 = 0x00002022,
36-
* GUEST_PML_INDEX = 0x00000812,
37-
* PML_ADDRESS = 0x0000200e,
38-
* VM_FUNCTION_CONTROL = 0x00002018,
39-
* EPTP_LIST_ADDRESS = 0x00002024,
40-
* VMREAD_BITMAP = 0x00002026,
41-
* VMWRITE_BITMAP = 0x00002028,
42-
*
43-
* TSC_MULTIPLIER = 0x00002032,
44-
* PLE_GAP = 0x00004020,
45-
* PLE_WINDOW = 0x00004022,
46-
* VMX_PREEMPTION_TIMER_VALUE = 0x0000482E,
47-
*
48-
* Currently unsupported in KVM:
49-
* GUEST_IA32_RTIT_CTL = 0x00002814,
50-
*/
51-
#define EVMCS1_SUPPORTED_PINCTRL \
52-
(PIN_BASED_ALWAYSON_WITHOUT_TRUE_MSR | \
53-
PIN_BASED_EXT_INTR_MASK | \
54-
PIN_BASED_NMI_EXITING | \
55-
PIN_BASED_VIRTUAL_NMIS)
56-
57-
#define EVMCS1_SUPPORTED_EXEC_CTRL \
58-
(CPU_BASED_ALWAYSON_WITHOUT_TRUE_MSR | \
59-
CPU_BASED_HLT_EXITING | \
60-
CPU_BASED_CR3_LOAD_EXITING | \
61-
CPU_BASED_CR3_STORE_EXITING | \
62-
CPU_BASED_UNCOND_IO_EXITING | \
63-
CPU_BASED_MOV_DR_EXITING | \
64-
CPU_BASED_USE_TSC_OFFSETTING | \
65-
CPU_BASED_MWAIT_EXITING | \
66-
CPU_BASED_MONITOR_EXITING | \
67-
CPU_BASED_INVLPG_EXITING | \
68-
CPU_BASED_RDPMC_EXITING | \
69-
CPU_BASED_INTR_WINDOW_EXITING | \
70-
CPU_BASED_CR8_LOAD_EXITING | \
71-
CPU_BASED_CR8_STORE_EXITING | \
72-
CPU_BASED_RDTSC_EXITING | \
73-
CPU_BASED_TPR_SHADOW | \
74-
CPU_BASED_USE_IO_BITMAPS | \
75-
CPU_BASED_MONITOR_TRAP_FLAG | \
76-
CPU_BASED_USE_MSR_BITMAPS | \
77-
CPU_BASED_NMI_WINDOW_EXITING | \
78-
CPU_BASED_PAUSE_EXITING | \
79-
CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)
80-
81-
#define EVMCS1_SUPPORTED_2NDEXEC \
82-
(SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE | \
83-
SECONDARY_EXEC_WBINVD_EXITING | \
84-
SECONDARY_EXEC_ENABLE_VPID | \
85-
SECONDARY_EXEC_ENABLE_EPT | \
86-
SECONDARY_EXEC_UNRESTRICTED_GUEST | \
87-
SECONDARY_EXEC_DESC | \
88-
SECONDARY_EXEC_ENABLE_RDTSCP | \
89-
SECONDARY_EXEC_ENABLE_INVPCID | \
90-
SECONDARY_EXEC_XSAVES | \
91-
SECONDARY_EXEC_RDSEED_EXITING | \
92-
SECONDARY_EXEC_RDRAND_EXITING | \
93-
SECONDARY_EXEC_TSC_SCALING | \
94-
SECONDARY_EXEC_ENABLE_USR_WAIT_PAUSE | \
95-
SECONDARY_EXEC_PT_USE_GPA | \
96-
SECONDARY_EXEC_PT_CONCEAL_VMX | \
97-
SECONDARY_EXEC_BUS_LOCK_DETECTION | \
98-
SECONDARY_EXEC_NOTIFY_VM_EXITING | \
99-
SECONDARY_EXEC_ENCLS_EXITING)
100-
101-
#define EVMCS1_SUPPORTED_3RDEXEC (0ULL)
102-
103-
#define EVMCS1_SUPPORTED_VMEXIT_CTRL \
104-
(VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR | \
105-
VM_EXIT_SAVE_DEBUG_CONTROLS | \
106-
VM_EXIT_ACK_INTR_ON_EXIT | \
107-
VM_EXIT_HOST_ADDR_SPACE_SIZE | \
108-
VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL | \
109-
VM_EXIT_SAVE_IA32_PAT | \
110-
VM_EXIT_LOAD_IA32_PAT | \
111-
VM_EXIT_SAVE_IA32_EFER | \
112-
VM_EXIT_LOAD_IA32_EFER | \
113-
VM_EXIT_CLEAR_BNDCFGS | \
114-
VM_EXIT_PT_CONCEAL_PIP | \
115-
VM_EXIT_CLEAR_IA32_RTIT_CTL)
116-
117-
#define EVMCS1_SUPPORTED_VMENTRY_CTRL \
118-
(VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR | \
119-
VM_ENTRY_LOAD_DEBUG_CONTROLS | \
120-
VM_ENTRY_IA32E_MODE | \
121-
VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \
122-
VM_ENTRY_LOAD_IA32_PAT | \
123-
VM_ENTRY_LOAD_IA32_EFER | \
124-
VM_ENTRY_LOAD_BNDCFGS | \
125-
VM_ENTRY_PT_CONCEAL_PIP | \
126-
VM_ENTRY_LOAD_IA32_RTIT_CTL)
127-
128-
#define EVMCS1_SUPPORTED_VMFUNC (0)
129-
13025
struct evmcs_field {
13126
u16 offset;
13227
u16 clean_field;

0 commit comments

Comments
 (0)