@@ -212,54 +212,6 @@ static const uint32_t unsupported_msrs[NUM_UNSUPPORTED_MSRS] = {
212
212
/* MSR 0x400 ... 0x473, not in this array */
213
213
};
214
214
215
- #define NUM_X2APIC_MSRS 44U
216
- static const uint32_t x2apic_msrs [NUM_X2APIC_MSRS ] = {
217
- MSR_IA32_EXT_XAPICID ,
218
- MSR_IA32_EXT_APIC_VERSION ,
219
- MSR_IA32_EXT_APIC_TPR ,
220
- MSR_IA32_EXT_APIC_PPR ,
221
- MSR_IA32_EXT_APIC_EOI ,
222
- MSR_IA32_EXT_APIC_LDR ,
223
- MSR_IA32_EXT_APIC_SIVR ,
224
- MSR_IA32_EXT_APIC_ISR0 ,
225
- MSR_IA32_EXT_APIC_ISR1 ,
226
- MSR_IA32_EXT_APIC_ISR2 ,
227
- MSR_IA32_EXT_APIC_ISR3 ,
228
- MSR_IA32_EXT_APIC_ISR4 ,
229
- MSR_IA32_EXT_APIC_ISR5 ,
230
- MSR_IA32_EXT_APIC_ISR6 ,
231
- MSR_IA32_EXT_APIC_ISR7 ,
232
- MSR_IA32_EXT_APIC_TMR0 ,
233
- MSR_IA32_EXT_APIC_TMR1 ,
234
- MSR_IA32_EXT_APIC_TMR2 ,
235
- MSR_IA32_EXT_APIC_TMR3 ,
236
- MSR_IA32_EXT_APIC_TMR4 ,
237
- MSR_IA32_EXT_APIC_TMR5 ,
238
- MSR_IA32_EXT_APIC_TMR6 ,
239
- MSR_IA32_EXT_APIC_TMR7 ,
240
- MSR_IA32_EXT_APIC_IRR0 ,
241
- MSR_IA32_EXT_APIC_IRR1 ,
242
- MSR_IA32_EXT_APIC_IRR2 ,
243
- MSR_IA32_EXT_APIC_IRR3 ,
244
- MSR_IA32_EXT_APIC_IRR4 ,
245
- MSR_IA32_EXT_APIC_IRR5 ,
246
- MSR_IA32_EXT_APIC_IRR6 ,
247
- MSR_IA32_EXT_APIC_IRR7 ,
248
- MSR_IA32_EXT_APIC_ESR ,
249
- MSR_IA32_EXT_APIC_LVT_CMCI ,
250
- MSR_IA32_EXT_APIC_ICR ,
251
- MSR_IA32_EXT_APIC_LVT_TIMER ,
252
- MSR_IA32_EXT_APIC_LVT_THERMAL ,
253
- MSR_IA32_EXT_APIC_LVT_PMI ,
254
- MSR_IA32_EXT_APIC_LVT_LINT0 ,
255
- MSR_IA32_EXT_APIC_LVT_LINT1 ,
256
- MSR_IA32_EXT_APIC_LVT_ERROR ,
257
- MSR_IA32_EXT_APIC_INIT_COUNT ,
258
- MSR_IA32_EXT_APIC_CUR_COUNT ,
259
- MSR_IA32_EXT_APIC_DIV_CONF ,
260
- MSR_IA32_EXT_APIC_SELF_IPI ,
261
- };
262
-
263
215
/* emulated_guest_msrs[] shares same indexes with array vcpu->arch->guest_msrs[] */
264
216
uint32_t vmsr_get_guest_msr_index (uint32_t msr )
265
217
{
@@ -314,18 +266,14 @@ static void enable_msr_interception(uint8_t *bitmap, uint32_t msr_arg, uint32_t
314
266
315
267
/*
316
268
* Enable read and write msr interception for x2APIC MSRs
317
- * MSRs that are not supported in the x2APIC range of MSRs,
318
- * i.e. anything other than the ones below and between
319
- * 0x802 and 0x83F, are not intercepted
320
269
*/
321
-
322
270
static void intercept_x2apic_msrs (uint8_t * msr_bitmap_arg , uint32_t mode )
323
271
{
324
272
uint8_t * msr_bitmap = msr_bitmap_arg ;
325
- uint32_t i ;
273
+ uint32_t msr ;
326
274
327
- for (i = 0U ; i < NUM_X2APIC_MSRS ; i ++ ) {
328
- enable_msr_interception (msr_bitmap , x2apic_msrs [ i ] , mode );
275
+ for (msr = 0x800U ; msr < 0x900U ; msr ++ ) {
276
+ enable_msr_interception (msr_bitmap , msr , mode );
329
277
}
330
278
}
331
279
@@ -646,8 +594,8 @@ void update_msr_bitmap_x2apic_apicv(const struct acrn_vcpu *vcpu)
646
594
* writes to them are virtualized with Register Virtualization
647
595
* Refer to Section 29.1 in Intel SDM Vol. 3
648
596
*/
649
- enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_EOI , INTERCEPT_READ );
650
- enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_SELF_IPI , INTERCEPT_READ );
597
+ enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_EOI , INTERCEPT_DISABLE );
598
+ enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_SELF_IPI , INTERCEPT_DISABLE );
651
599
}
652
600
653
601
enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_TPR , INTERCEPT_DISABLE );
@@ -661,14 +609,9 @@ void update_msr_bitmap_x2apic_apicv(const struct acrn_vcpu *vcpu)
661
609
*/
662
610
void update_msr_bitmap_x2apic_passthru (const struct acrn_vcpu * vcpu )
663
611
{
664
- uint32_t msr ;
665
- uint8_t * msr_bitmap ;
612
+ uint8_t * msr_bitmap = vcpu -> vm -> arch_vm .msr_bitmap ;
666
613
667
- msr_bitmap = vcpu -> vm -> arch_vm .msr_bitmap ;
668
- for (msr = MSR_IA32_EXT_XAPICID ;
669
- msr <= MSR_IA32_EXT_APIC_SELF_IPI ; msr ++ ) {
670
- enable_msr_interception (msr_bitmap , msr , INTERCEPT_DISABLE );
671
- }
614
+ intercept_x2apic_msrs (msr_bitmap , INTERCEPT_DISABLE );
672
615
enable_msr_interception (msr_bitmap , MSR_IA32_EXT_XAPICID , INTERCEPT_READ );
673
616
enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_LDR , INTERCEPT_READ );
674
617
enable_msr_interception (msr_bitmap , MSR_IA32_EXT_APIC_ICR , INTERCEPT_WRITE );
0 commit comments