@@ -304,6 +304,190 @@ const struct kvm_stats_header kvm_vcpu_stats_header = {
304
304
305
305
static struct kmem_cache * x86_emulator_cache ;
306
306
307
+ /*
308
+ * The three MSR lists(msrs_to_save, emulated_msrs, msr_based_features) track
309
+ * the set of MSRs that KVM exposes to userspace through KVM_GET_MSRS,
310
+ * KVM_SET_MSRS, and KVM_GET_MSR_INDEX_LIST. msrs_to_save holds MSRs that
311
+ * require host support, i.e. should be probed via RDMSR. emulated_msrs holds
312
+ * MSRs that KVM emulates without strictly requiring host support.
313
+ * msr_based_features holds MSRs that enumerate features, i.e. are effectively
314
+ * CPUID leafs. Note, msr_based_features isn't mutually exclusive with
315
+ * msrs_to_save and emulated_msrs.
316
+ */
317
+
318
+ static const u32 msrs_to_save_base [] = {
319
+ MSR_IA32_SYSENTER_CS , MSR_IA32_SYSENTER_ESP , MSR_IA32_SYSENTER_EIP ,
320
+ MSR_STAR ,
321
+ #ifdef CONFIG_X86_64
322
+ MSR_CSTAR , MSR_KERNEL_GS_BASE , MSR_SYSCALL_MASK , MSR_LSTAR ,
323
+ #endif
324
+ MSR_IA32_TSC , MSR_IA32_CR_PAT , MSR_VM_HSAVE_PA ,
325
+ MSR_IA32_FEAT_CTL , MSR_IA32_BNDCFGS , MSR_TSC_AUX ,
326
+ MSR_IA32_SPEC_CTRL , MSR_IA32_TSX_CTRL ,
327
+ MSR_IA32_RTIT_CTL , MSR_IA32_RTIT_STATUS , MSR_IA32_RTIT_CR3_MATCH ,
328
+ MSR_IA32_RTIT_OUTPUT_BASE , MSR_IA32_RTIT_OUTPUT_MASK ,
329
+ MSR_IA32_RTIT_ADDR0_A , MSR_IA32_RTIT_ADDR0_B ,
330
+ MSR_IA32_RTIT_ADDR1_A , MSR_IA32_RTIT_ADDR1_B ,
331
+ MSR_IA32_RTIT_ADDR2_A , MSR_IA32_RTIT_ADDR2_B ,
332
+ MSR_IA32_RTIT_ADDR3_A , MSR_IA32_RTIT_ADDR3_B ,
333
+ MSR_IA32_UMWAIT_CONTROL ,
334
+
335
+ MSR_IA32_XFD , MSR_IA32_XFD_ERR ,
336
+ };
337
+
338
+ static const u32 msrs_to_save_pmu [] = {
339
+ MSR_ARCH_PERFMON_FIXED_CTR0 , MSR_ARCH_PERFMON_FIXED_CTR1 ,
340
+ MSR_ARCH_PERFMON_FIXED_CTR0 + 2 ,
341
+ MSR_CORE_PERF_FIXED_CTR_CTRL , MSR_CORE_PERF_GLOBAL_STATUS ,
342
+ MSR_CORE_PERF_GLOBAL_CTRL ,
343
+ MSR_IA32_PEBS_ENABLE , MSR_IA32_DS_AREA , MSR_PEBS_DATA_CFG ,
344
+
345
+ /* This part of MSRs should match KVM_MAX_NR_INTEL_GP_COUNTERS. */
346
+ MSR_ARCH_PERFMON_PERFCTR0 , MSR_ARCH_PERFMON_PERFCTR1 ,
347
+ MSR_ARCH_PERFMON_PERFCTR0 + 2 , MSR_ARCH_PERFMON_PERFCTR0 + 3 ,
348
+ MSR_ARCH_PERFMON_PERFCTR0 + 4 , MSR_ARCH_PERFMON_PERFCTR0 + 5 ,
349
+ MSR_ARCH_PERFMON_PERFCTR0 + 6 , MSR_ARCH_PERFMON_PERFCTR0 + 7 ,
350
+ MSR_ARCH_PERFMON_EVENTSEL0 , MSR_ARCH_PERFMON_EVENTSEL1 ,
351
+ MSR_ARCH_PERFMON_EVENTSEL0 + 2 , MSR_ARCH_PERFMON_EVENTSEL0 + 3 ,
352
+ MSR_ARCH_PERFMON_EVENTSEL0 + 4 , MSR_ARCH_PERFMON_EVENTSEL0 + 5 ,
353
+ MSR_ARCH_PERFMON_EVENTSEL0 + 6 , MSR_ARCH_PERFMON_EVENTSEL0 + 7 ,
354
+
355
+ MSR_K7_EVNTSEL0 , MSR_K7_EVNTSEL1 , MSR_K7_EVNTSEL2 , MSR_K7_EVNTSEL3 ,
356
+ MSR_K7_PERFCTR0 , MSR_K7_PERFCTR1 , MSR_K7_PERFCTR2 , MSR_K7_PERFCTR3 ,
357
+
358
+ /* This part of MSRs should match KVM_MAX_NR_AMD_GP_COUNTERS. */
359
+ MSR_F15H_PERF_CTL0 , MSR_F15H_PERF_CTL1 , MSR_F15H_PERF_CTL2 ,
360
+ MSR_F15H_PERF_CTL3 , MSR_F15H_PERF_CTL4 , MSR_F15H_PERF_CTL5 ,
361
+ MSR_F15H_PERF_CTR0 , MSR_F15H_PERF_CTR1 , MSR_F15H_PERF_CTR2 ,
362
+ MSR_F15H_PERF_CTR3 , MSR_F15H_PERF_CTR4 , MSR_F15H_PERF_CTR5 ,
363
+
364
+ MSR_AMD64_PERF_CNTR_GLOBAL_CTL ,
365
+ MSR_AMD64_PERF_CNTR_GLOBAL_STATUS ,
366
+ MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR ,
367
+ };
368
+
369
+ static u32 msrs_to_save [ARRAY_SIZE (msrs_to_save_base ) +
370
+ ARRAY_SIZE (msrs_to_save_pmu )];
371
+ static unsigned num_msrs_to_save ;
372
+
373
+ static const u32 emulated_msrs_all [] = {
374
+ MSR_KVM_SYSTEM_TIME , MSR_KVM_WALL_CLOCK ,
375
+ MSR_KVM_SYSTEM_TIME_NEW , MSR_KVM_WALL_CLOCK_NEW ,
376
+
377
+ #ifdef CONFIG_KVM_HYPERV
378
+ HV_X64_MSR_GUEST_OS_ID , HV_X64_MSR_HYPERCALL ,
379
+ HV_X64_MSR_TIME_REF_COUNT , HV_X64_MSR_REFERENCE_TSC ,
380
+ HV_X64_MSR_TSC_FREQUENCY , HV_X64_MSR_APIC_FREQUENCY ,
381
+ HV_X64_MSR_CRASH_P0 , HV_X64_MSR_CRASH_P1 , HV_X64_MSR_CRASH_P2 ,
382
+ HV_X64_MSR_CRASH_P3 , HV_X64_MSR_CRASH_P4 , HV_X64_MSR_CRASH_CTL ,
383
+ HV_X64_MSR_RESET ,
384
+ HV_X64_MSR_VP_INDEX ,
385
+ HV_X64_MSR_VP_RUNTIME ,
386
+ HV_X64_MSR_SCONTROL ,
387
+ HV_X64_MSR_STIMER0_CONFIG ,
388
+ HV_X64_MSR_VP_ASSIST_PAGE ,
389
+ HV_X64_MSR_REENLIGHTENMENT_CONTROL , HV_X64_MSR_TSC_EMULATION_CONTROL ,
390
+ HV_X64_MSR_TSC_EMULATION_STATUS , HV_X64_MSR_TSC_INVARIANT_CONTROL ,
391
+ HV_X64_MSR_SYNDBG_OPTIONS ,
392
+ HV_X64_MSR_SYNDBG_CONTROL , HV_X64_MSR_SYNDBG_STATUS ,
393
+ HV_X64_MSR_SYNDBG_SEND_BUFFER , HV_X64_MSR_SYNDBG_RECV_BUFFER ,
394
+ HV_X64_MSR_SYNDBG_PENDING_BUFFER ,
395
+ #endif
396
+
397
+ MSR_KVM_ASYNC_PF_EN , MSR_KVM_STEAL_TIME ,
398
+ MSR_KVM_PV_EOI_EN , MSR_KVM_ASYNC_PF_INT , MSR_KVM_ASYNC_PF_ACK ,
399
+
400
+ MSR_IA32_TSC_ADJUST ,
401
+ MSR_IA32_TSC_DEADLINE ,
402
+ MSR_IA32_ARCH_CAPABILITIES ,
403
+ MSR_IA32_PERF_CAPABILITIES ,
404
+ MSR_IA32_MISC_ENABLE ,
405
+ MSR_IA32_MCG_STATUS ,
406
+ MSR_IA32_MCG_CTL ,
407
+ MSR_IA32_MCG_EXT_CTL ,
408
+ MSR_IA32_SMBASE ,
409
+ MSR_SMI_COUNT ,
410
+ MSR_PLATFORM_INFO ,
411
+ MSR_MISC_FEATURES_ENABLES ,
412
+ MSR_AMD64_VIRT_SPEC_CTRL ,
413
+ MSR_AMD64_TSC_RATIO ,
414
+ MSR_IA32_POWER_CTL ,
415
+ MSR_IA32_UCODE_REV ,
416
+
417
+ /*
418
+ * KVM always supports the "true" VMX control MSRs, even if the host
419
+ * does not. The VMX MSRs as a whole are considered "emulated" as KVM
420
+ * doesn't strictly require them to exist in the host (ignoring that
421
+ * KVM would refuse to load in the first place if the core set of MSRs
422
+ * aren't supported).
423
+ */
424
+ MSR_IA32_VMX_BASIC ,
425
+ MSR_IA32_VMX_TRUE_PINBASED_CTLS ,
426
+ MSR_IA32_VMX_TRUE_PROCBASED_CTLS ,
427
+ MSR_IA32_VMX_TRUE_EXIT_CTLS ,
428
+ MSR_IA32_VMX_TRUE_ENTRY_CTLS ,
429
+ MSR_IA32_VMX_MISC ,
430
+ MSR_IA32_VMX_CR0_FIXED0 ,
431
+ MSR_IA32_VMX_CR4_FIXED0 ,
432
+ MSR_IA32_VMX_VMCS_ENUM ,
433
+ MSR_IA32_VMX_PROCBASED_CTLS2 ,
434
+ MSR_IA32_VMX_EPT_VPID_CAP ,
435
+ MSR_IA32_VMX_VMFUNC ,
436
+
437
+ MSR_K7_HWCR ,
438
+ MSR_KVM_POLL_CONTROL ,
439
+ };
440
+
441
+ static u32 emulated_msrs [ARRAY_SIZE (emulated_msrs_all )];
442
+ static unsigned num_emulated_msrs ;
443
+
444
+ /*
445
+ * List of MSRs that control the existence of MSR-based features, i.e. MSRs
446
+ * that are effectively CPUID leafs. VMX MSRs are also included in the set of
447
+ * feature MSRs, but are handled separately to allow expedited lookups.
448
+ */
449
+ static const u32 msr_based_features_all_except_vmx [] = {
450
+ MSR_AMD64_DE_CFG ,
451
+ MSR_IA32_UCODE_REV ,
452
+ MSR_IA32_ARCH_CAPABILITIES ,
453
+ MSR_IA32_PERF_CAPABILITIES ,
454
+ };
455
+
456
+ static u32 msr_based_features [ARRAY_SIZE (msr_based_features_all_except_vmx ) +
457
+ (KVM_LAST_EMULATED_VMX_MSR - KVM_FIRST_EMULATED_VMX_MSR + 1 )];
458
+ static unsigned int num_msr_based_features ;
459
+
460
+ /*
461
+ * All feature MSRs except uCode revID, which tracks the currently loaded uCode
462
+ * patch, are immutable once the vCPU model is defined.
463
+ */
464
+ static bool kvm_is_immutable_feature_msr (u32 msr )
465
+ {
466
+ int i ;
467
+
468
+ if (msr >= KVM_FIRST_EMULATED_VMX_MSR && msr <= KVM_LAST_EMULATED_VMX_MSR )
469
+ return true;
470
+
471
+ for (i = 0 ; i < ARRAY_SIZE (msr_based_features_all_except_vmx ); i ++ ) {
472
+ if (msr == msr_based_features_all_except_vmx [i ])
473
+ return msr != MSR_IA32_UCODE_REV ;
474
+ }
475
+
476
+ return false;
477
+ }
478
+
479
+ static bool kvm_is_msr_to_save (u32 msr_index )
480
+ {
481
+ unsigned int i ;
482
+
483
+ for (i = 0 ; i < num_msrs_to_save ; i ++ ) {
484
+ if (msrs_to_save [i ] == msr_index )
485
+ return true;
486
+ }
487
+
488
+ return false;
489
+ }
490
+
307
491
typedef int (* msr_access_t )(struct kvm_vcpu * vcpu , u32 index , u64 * data ,
308
492
bool host_initiated );
309
493
@@ -1425,178 +1609,6 @@ int kvm_emulate_rdpmc(struct kvm_vcpu *vcpu)
1425
1609
}
1426
1610
EXPORT_SYMBOL_GPL (kvm_emulate_rdpmc );
1427
1611
1428
- /*
1429
- * The three MSR lists(msrs_to_save, emulated_msrs, msr_based_features) track
1430
- * the set of MSRs that KVM exposes to userspace through KVM_GET_MSRS,
1431
- * KVM_SET_MSRS, and KVM_GET_MSR_INDEX_LIST. msrs_to_save holds MSRs that
1432
- * require host support, i.e. should be probed via RDMSR. emulated_msrs holds
1433
- * MSRs that KVM emulates without strictly requiring host support.
1434
- * msr_based_features holds MSRs that enumerate features, i.e. are effectively
1435
- * CPUID leafs. Note, msr_based_features isn't mutually exclusive with
1436
- * msrs_to_save and emulated_msrs.
1437
- */
1438
-
1439
- static const u32 msrs_to_save_base [] = {
1440
- MSR_IA32_SYSENTER_CS , MSR_IA32_SYSENTER_ESP , MSR_IA32_SYSENTER_EIP ,
1441
- MSR_STAR ,
1442
- #ifdef CONFIG_X86_64
1443
- MSR_CSTAR , MSR_KERNEL_GS_BASE , MSR_SYSCALL_MASK , MSR_LSTAR ,
1444
- #endif
1445
- MSR_IA32_TSC , MSR_IA32_CR_PAT , MSR_VM_HSAVE_PA ,
1446
- MSR_IA32_FEAT_CTL , MSR_IA32_BNDCFGS , MSR_TSC_AUX ,
1447
- MSR_IA32_SPEC_CTRL , MSR_IA32_TSX_CTRL ,
1448
- MSR_IA32_RTIT_CTL , MSR_IA32_RTIT_STATUS , MSR_IA32_RTIT_CR3_MATCH ,
1449
- MSR_IA32_RTIT_OUTPUT_BASE , MSR_IA32_RTIT_OUTPUT_MASK ,
1450
- MSR_IA32_RTIT_ADDR0_A , MSR_IA32_RTIT_ADDR0_B ,
1451
- MSR_IA32_RTIT_ADDR1_A , MSR_IA32_RTIT_ADDR1_B ,
1452
- MSR_IA32_RTIT_ADDR2_A , MSR_IA32_RTIT_ADDR2_B ,
1453
- MSR_IA32_RTIT_ADDR3_A , MSR_IA32_RTIT_ADDR3_B ,
1454
- MSR_IA32_UMWAIT_CONTROL ,
1455
-
1456
- MSR_IA32_XFD , MSR_IA32_XFD_ERR ,
1457
- };
1458
-
1459
- static const u32 msrs_to_save_pmu [] = {
1460
- MSR_ARCH_PERFMON_FIXED_CTR0 , MSR_ARCH_PERFMON_FIXED_CTR1 ,
1461
- MSR_ARCH_PERFMON_FIXED_CTR0 + 2 ,
1462
- MSR_CORE_PERF_FIXED_CTR_CTRL , MSR_CORE_PERF_GLOBAL_STATUS ,
1463
- MSR_CORE_PERF_GLOBAL_CTRL ,
1464
- MSR_IA32_PEBS_ENABLE , MSR_IA32_DS_AREA , MSR_PEBS_DATA_CFG ,
1465
-
1466
- /* This part of MSRs should match KVM_MAX_NR_INTEL_GP_COUNTERS. */
1467
- MSR_ARCH_PERFMON_PERFCTR0 , MSR_ARCH_PERFMON_PERFCTR1 ,
1468
- MSR_ARCH_PERFMON_PERFCTR0 + 2 , MSR_ARCH_PERFMON_PERFCTR0 + 3 ,
1469
- MSR_ARCH_PERFMON_PERFCTR0 + 4 , MSR_ARCH_PERFMON_PERFCTR0 + 5 ,
1470
- MSR_ARCH_PERFMON_PERFCTR0 + 6 , MSR_ARCH_PERFMON_PERFCTR0 + 7 ,
1471
- MSR_ARCH_PERFMON_EVENTSEL0 , MSR_ARCH_PERFMON_EVENTSEL1 ,
1472
- MSR_ARCH_PERFMON_EVENTSEL0 + 2 , MSR_ARCH_PERFMON_EVENTSEL0 + 3 ,
1473
- MSR_ARCH_PERFMON_EVENTSEL0 + 4 , MSR_ARCH_PERFMON_EVENTSEL0 + 5 ,
1474
- MSR_ARCH_PERFMON_EVENTSEL0 + 6 , MSR_ARCH_PERFMON_EVENTSEL0 + 7 ,
1475
-
1476
- MSR_K7_EVNTSEL0 , MSR_K7_EVNTSEL1 , MSR_K7_EVNTSEL2 , MSR_K7_EVNTSEL3 ,
1477
- MSR_K7_PERFCTR0 , MSR_K7_PERFCTR1 , MSR_K7_PERFCTR2 , MSR_K7_PERFCTR3 ,
1478
-
1479
- /* This part of MSRs should match KVM_MAX_NR_AMD_GP_COUNTERS. */
1480
- MSR_F15H_PERF_CTL0 , MSR_F15H_PERF_CTL1 , MSR_F15H_PERF_CTL2 ,
1481
- MSR_F15H_PERF_CTL3 , MSR_F15H_PERF_CTL4 , MSR_F15H_PERF_CTL5 ,
1482
- MSR_F15H_PERF_CTR0 , MSR_F15H_PERF_CTR1 , MSR_F15H_PERF_CTR2 ,
1483
- MSR_F15H_PERF_CTR3 , MSR_F15H_PERF_CTR4 , MSR_F15H_PERF_CTR5 ,
1484
-
1485
- MSR_AMD64_PERF_CNTR_GLOBAL_CTL ,
1486
- MSR_AMD64_PERF_CNTR_GLOBAL_STATUS ,
1487
- MSR_AMD64_PERF_CNTR_GLOBAL_STATUS_CLR ,
1488
- };
1489
-
1490
- static u32 msrs_to_save [ARRAY_SIZE (msrs_to_save_base ) +
1491
- ARRAY_SIZE (msrs_to_save_pmu )];
1492
- static unsigned num_msrs_to_save ;
1493
-
1494
- static const u32 emulated_msrs_all [] = {
1495
- MSR_KVM_SYSTEM_TIME , MSR_KVM_WALL_CLOCK ,
1496
- MSR_KVM_SYSTEM_TIME_NEW , MSR_KVM_WALL_CLOCK_NEW ,
1497
-
1498
- #ifdef CONFIG_KVM_HYPERV
1499
- HV_X64_MSR_GUEST_OS_ID , HV_X64_MSR_HYPERCALL ,
1500
- HV_X64_MSR_TIME_REF_COUNT , HV_X64_MSR_REFERENCE_TSC ,
1501
- HV_X64_MSR_TSC_FREQUENCY , HV_X64_MSR_APIC_FREQUENCY ,
1502
- HV_X64_MSR_CRASH_P0 , HV_X64_MSR_CRASH_P1 , HV_X64_MSR_CRASH_P2 ,
1503
- HV_X64_MSR_CRASH_P3 , HV_X64_MSR_CRASH_P4 , HV_X64_MSR_CRASH_CTL ,
1504
- HV_X64_MSR_RESET ,
1505
- HV_X64_MSR_VP_INDEX ,
1506
- HV_X64_MSR_VP_RUNTIME ,
1507
- HV_X64_MSR_SCONTROL ,
1508
- HV_X64_MSR_STIMER0_CONFIG ,
1509
- HV_X64_MSR_VP_ASSIST_PAGE ,
1510
- HV_X64_MSR_REENLIGHTENMENT_CONTROL , HV_X64_MSR_TSC_EMULATION_CONTROL ,
1511
- HV_X64_MSR_TSC_EMULATION_STATUS , HV_X64_MSR_TSC_INVARIANT_CONTROL ,
1512
- HV_X64_MSR_SYNDBG_OPTIONS ,
1513
- HV_X64_MSR_SYNDBG_CONTROL , HV_X64_MSR_SYNDBG_STATUS ,
1514
- HV_X64_MSR_SYNDBG_SEND_BUFFER , HV_X64_MSR_SYNDBG_RECV_BUFFER ,
1515
- HV_X64_MSR_SYNDBG_PENDING_BUFFER ,
1516
- #endif
1517
-
1518
- MSR_KVM_ASYNC_PF_EN , MSR_KVM_STEAL_TIME ,
1519
- MSR_KVM_PV_EOI_EN , MSR_KVM_ASYNC_PF_INT , MSR_KVM_ASYNC_PF_ACK ,
1520
-
1521
- MSR_IA32_TSC_ADJUST ,
1522
- MSR_IA32_TSC_DEADLINE ,
1523
- MSR_IA32_ARCH_CAPABILITIES ,
1524
- MSR_IA32_PERF_CAPABILITIES ,
1525
- MSR_IA32_MISC_ENABLE ,
1526
- MSR_IA32_MCG_STATUS ,
1527
- MSR_IA32_MCG_CTL ,
1528
- MSR_IA32_MCG_EXT_CTL ,
1529
- MSR_IA32_SMBASE ,
1530
- MSR_SMI_COUNT ,
1531
- MSR_PLATFORM_INFO ,
1532
- MSR_MISC_FEATURES_ENABLES ,
1533
- MSR_AMD64_VIRT_SPEC_CTRL ,
1534
- MSR_AMD64_TSC_RATIO ,
1535
- MSR_IA32_POWER_CTL ,
1536
- MSR_IA32_UCODE_REV ,
1537
-
1538
- /*
1539
- * KVM always supports the "true" VMX control MSRs, even if the host
1540
- * does not. The VMX MSRs as a whole are considered "emulated" as KVM
1541
- * doesn't strictly require them to exist in the host (ignoring that
1542
- * KVM would refuse to load in the first place if the core set of MSRs
1543
- * aren't supported).
1544
- */
1545
- MSR_IA32_VMX_BASIC ,
1546
- MSR_IA32_VMX_TRUE_PINBASED_CTLS ,
1547
- MSR_IA32_VMX_TRUE_PROCBASED_CTLS ,
1548
- MSR_IA32_VMX_TRUE_EXIT_CTLS ,
1549
- MSR_IA32_VMX_TRUE_ENTRY_CTLS ,
1550
- MSR_IA32_VMX_MISC ,
1551
- MSR_IA32_VMX_CR0_FIXED0 ,
1552
- MSR_IA32_VMX_CR4_FIXED0 ,
1553
- MSR_IA32_VMX_VMCS_ENUM ,
1554
- MSR_IA32_VMX_PROCBASED_CTLS2 ,
1555
- MSR_IA32_VMX_EPT_VPID_CAP ,
1556
- MSR_IA32_VMX_VMFUNC ,
1557
-
1558
- MSR_K7_HWCR ,
1559
- MSR_KVM_POLL_CONTROL ,
1560
- };
1561
-
1562
- static u32 emulated_msrs [ARRAY_SIZE (emulated_msrs_all )];
1563
- static unsigned num_emulated_msrs ;
1564
-
1565
- /*
1566
- * List of MSRs that control the existence of MSR-based features, i.e. MSRs
1567
- * that are effectively CPUID leafs. VMX MSRs are also included in the set of
1568
- * feature MSRs, but are handled separately to allow expedited lookups.
1569
- */
1570
- static const u32 msr_based_features_all_except_vmx [] = {
1571
- MSR_AMD64_DE_CFG ,
1572
- MSR_IA32_UCODE_REV ,
1573
- MSR_IA32_ARCH_CAPABILITIES ,
1574
- MSR_IA32_PERF_CAPABILITIES ,
1575
- };
1576
-
1577
- static u32 msr_based_features [ARRAY_SIZE (msr_based_features_all_except_vmx ) +
1578
- (KVM_LAST_EMULATED_VMX_MSR - KVM_FIRST_EMULATED_VMX_MSR + 1 )];
1579
- static unsigned int num_msr_based_features ;
1580
-
1581
- /*
1582
- * All feature MSRs except uCode revID, which tracks the currently loaded uCode
1583
- * patch, are immutable once the vCPU model is defined.
1584
- */
1585
- static bool kvm_is_immutable_feature_msr (u32 msr )
1586
- {
1587
- int i ;
1588
-
1589
- if (msr >= KVM_FIRST_EMULATED_VMX_MSR && msr <= KVM_LAST_EMULATED_VMX_MSR )
1590
- return true;
1591
-
1592
- for (i = 0 ; i < ARRAY_SIZE (msr_based_features_all_except_vmx ); i ++ ) {
1593
- if (msr == msr_based_features_all_except_vmx [i ])
1594
- return msr != MSR_IA32_UCODE_REV ;
1595
- }
1596
-
1597
- return false;
1598
- }
1599
-
1600
1612
/*
1601
1613
* Some IA32_ARCH_CAPABILITIES bits have dependencies on MSRs that KVM
1602
1614
* does not yet virtualize. These include:
@@ -3744,18 +3756,6 @@ static void record_steal_time(struct kvm_vcpu *vcpu)
3744
3756
mark_page_dirty_in_slot (vcpu -> kvm , ghc -> memslot , gpa_to_gfn (ghc -> gpa ));
3745
3757
}
3746
3758
3747
- static bool kvm_is_msr_to_save (u32 msr_index )
3748
- {
3749
- unsigned int i ;
3750
-
3751
- for (i = 0 ; i < num_msrs_to_save ; i ++ ) {
3752
- if (msrs_to_save [i ] == msr_index )
3753
- return true;
3754
- }
3755
-
3756
- return false;
3757
- }
3758
-
3759
3759
int kvm_set_msr_common (struct kvm_vcpu * vcpu , struct msr_data * msr_info )
3760
3760
{
3761
3761
u32 msr = msr_info -> index ;
0 commit comments