@@ -20,7 +20,7 @@ enum rw_mode {
20
20
* in either rdmsr_vmexit_handler() or wrmsr_vmexit_handler(), a GP will
21
21
* be thrown to the guest for any R/W accesses.
22
22
*/
23
- #define NUM_EMULATED_MSR 58U
23
+ #define NUM_EMULATED_MSR 96U
24
24
static const uint32_t emulated_msrs [NUM_EMULATED_MSR ] = {
25
25
/* Emulated MSRs */
26
26
MSR_IA32_TSC_DEADLINE ,
@@ -89,6 +89,60 @@ static const uint32_t emulated_msrs[NUM_EMULATED_MSR] = {
89
89
MSR_IA32_VMX_TRUE_EXIT_CTLS ,
90
90
MSR_IA32_VMX_TRUE_ENTRY_CTLS ,
91
91
MSR_IA32_VMX_VMFUNC ,
92
+
93
+ /* SGX disabled: CPUID.12H.EAX[0], CPUID.07H.ECX[30] */
94
+ MSR_IA32_SGXLEPUBKEYHASH0 ,
95
+ MSR_IA32_SGXLEPUBKEYHASH1 ,
96
+ MSR_IA32_SGXLEPUBKEYHASH2 ,
97
+ MSR_IA32_SGXLEPUBKEYHASH3 ,
98
+
99
+ /* SGX disabled : CPUID.07H.EBX[2] */
100
+ MSR_IA32_SGX_SVN_STATUS ,
101
+
102
+ /* SGX disabled : CPUID.12H.EAX[0] */
103
+ MSR_SGXOWNEREPOCH0 ,
104
+ MSR_SGXOWNEREPOCH1 ,
105
+
106
+ /* Performance Counters and Events: CPUID.0AH.EAX[15:8] */
107
+ MSR_IA32_PMC0 ,
108
+ MSR_IA32_PMC1 ,
109
+ MSR_IA32_PMC2 ,
110
+ MSR_IA32_PMC3 ,
111
+ MSR_IA32_PMC4 ,
112
+ MSR_IA32_PMC5 ,
113
+ MSR_IA32_PMC6 ,
114
+ MSR_IA32_PMC7 ,
115
+ MSR_IA32_PERFEVTSEL0 ,
116
+ MSR_IA32_PERFEVTSEL1 ,
117
+ MSR_IA32_PERFEVTSEL2 ,
118
+ MSR_IA32_PERFEVTSEL3 ,
119
+ MSR_IA32_A_PMC0 ,
120
+ MSR_IA32_A_PMC1 ,
121
+ MSR_IA32_A_PMC2 ,
122
+ MSR_IA32_A_PMC3 ,
123
+ MSR_IA32_A_PMC4 ,
124
+ MSR_IA32_A_PMC5 ,
125
+ MSR_IA32_A_PMC6 ,
126
+ MSR_IA32_A_PMC7 ,
127
+ /* CPUID.0AH.EAX[7:0] */
128
+ MSR_IA32_FIXED_CTR_CTL ,
129
+ MSR_IA32_PERF_GLOBAL_STATUS ,
130
+ MSR_IA32_PERF_GLOBAL_CTRL ,
131
+ MSR_IA32_PERF_GLOBAL_OVF_CTRL ,
132
+ MSR_IA32_PERF_GLOBAL_STATUS_SET ,
133
+ MSR_IA32_PERF_GLOBAL_INUSE ,
134
+
135
+ /* QOS Configuration disabled: CPUID.10H.ECX[2] */
136
+ MSR_IA32_L3_QOS_CFG ,
137
+ MSR_IA32_L2_QOS_CFG ,
138
+
139
+ /* RDT-M disabled: CPUID.07H.EBX[12], CPUID.07H.EBX[15] */
140
+ MSR_IA32_QM_EVTSEL ,
141
+ MSR_IA32_QM_CTR ,
142
+ MSR_IA32_PQR_ASSOC
143
+
144
+ /* RDT-A disabled: CPUID.07H.EBX[12], CPUID.10H */
145
+ /* MSR 0xC90 ... 0xD8F, not in this array */
92
146
};
93
147
94
148
static const uint32_t x2apic_msrs [] = {
@@ -201,7 +255,7 @@ static void init_msr_area(struct acrn_vcpu *vcpu)
201
255
202
256
void init_msr_emulation (struct acrn_vcpu * vcpu )
203
257
{
204
- uint32_t i ;
258
+ uint32_t msr , i ;
205
259
uint8_t * msr_bitmap ;
206
260
uint64_t value64 ;
207
261
@@ -213,6 +267,11 @@ void init_msr_emulation(struct acrn_vcpu *vcpu)
213
267
}
214
268
215
269
intercept_x2apic_msrs (msr_bitmap , READ_WRITE );
270
+
271
+ /* RDT-A disabled: CPUID.07H.EBX[12], CPUID.10H */
272
+ for (msr = MSR_IA32_L3_MASK_0 ; msr < MSR_IA32_BNDCFGS ; msr ++ ) {
273
+ enable_msr_interception (msr_bitmap , msr , READ_WRITE );
274
+ }
216
275
}
217
276
218
277
/* Setup MSR bitmap - Intel SDM Vol3 24.6.9 */
0 commit comments