VirtualBox

Changeset 76147 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Dec 11, 2018 6:56:36 AM (6 years ago)
Author:
vboxsync
Message:

VMM: Nested VMX: bugref:9180 Use VMX's allowed0 and allowed1 bits nomenclature, it's easier when parsing the spec despite 'val' and 'zap' being shorter and nicer in Log statements.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp

    r75509 r76147  
    13861386                                 | (pGuestFeatures->fVmxPreemptTimer << VMX_BF_PIN_CTLS_PREEMPT_TIMER_SHIFT)
    13871387                                 | (pGuestFeatures->fVmxPostedInt    << VMX_BF_PIN_CTLS_POSTED_INT_SHIFT   );
    1388         uint32_t const fVal      = VMX_PIN_CTLS_DEFAULT1;
    1389         uint32_t const fZap      = fFeatures | VMX_PIN_CTLS_DEFAULT1;
    1390         AssertMsg((fVal & fZap) == fVal, ("fVal=%#RX32 fZap=%#RX32 fFeatures=%#RX32\n", fVal, fZap, fFeatures));
    1391         uVmxMsr = RT_MAKE_U64(fVal, fZap);
     1388        /* Set the default1 class bits. See Intel spec. A.3.1 "Pin-Based VM-Execution Controls". */
     1389        uint32_t const fAllowed0 = VMX_PIN_CTLS_DEFAULT1;
     1390        uint32_t const fAllowed1 = fFeatures | VMX_PIN_CTLS_DEFAULT1;
     1391        AssertMsg((fAllowed0 & fAllowed1) == fAllowed0, ("fAllowed0=%#RX32 fAllowed1=%#RX32 fFeatures=%#RX32\n",
     1392                                                         fAllowed0, fAllowed1, fFeatures));
     1393        uVmxMsr = RT_MAKE_U64(fAllowed0, fAllowed1);
     1394        LogRel(("fVmxExtIntExit=%u fFeatures=%#RX32 uVmxMsr=%#RX64\n", !!pGuestFeatures->fVmxExtIntExit, fFeatures, uVmxMsr));
    13921395    }
    13931396    else
     
    14391442                                 | (pGuestFeatures->fVmxPauseExit         << VMX_BF_PROC_CTLS_PAUSE_EXIT_SHIFT        )
    14401443                                 | (pGuestFeatures->fVmxSecondaryExecCtls << VMX_BF_PROC_CTLS_USE_SECONDARY_CTLS_SHIFT);
    1441         uint32_t const fVal      = VMX_PROC_CTLS_DEFAULT1;
    1442         uint32_t const fZap      = fFeatures | VMX_PROC_CTLS_DEFAULT1;
    1443         AssertMsg((fVal & fZap) == fVal, ("fVal=%#RX32 fZap=%#RX32 fFeatures=%#RX32\n", fVal, fZap, fFeatures));
    1444         uVmxMsr = RT_MAKE_U64(fVal, fZap);
     1444        /* Set the default1 class bits. See Intel spec. A.3.2 "Primary Processor-Based VM-Execution Controls". */
     1445        uint32_t const fAllowed0 = VMX_PROC_CTLS_DEFAULT1;
     1446        uint32_t const fAllowed1 = fFeatures | VMX_PROC_CTLS_DEFAULT1;
     1447        AssertMsg((fAllowed0 & fAllowed1) == fAllowed0, ("fAllowed0=%#RX32 fAllowed1=%#RX32 fFeatures=%#RX32\n", fAllowed0,
     1448                                                         fAllowed1, fFeatures));
     1449        uVmxMsr = RT_MAKE_U64(fAllowed0, fAllowed1);
    14451450    }
    14461451    else
     
    14791484                                 | (pGuestFeatures->fVmxExitLoadEferMsr   << VMX_BF_EXIT_CTLS_LOAD_EFER_MSR_SHIFT       )
    14801485                                 | (pGuestFeatures->fVmxSavePreemptTimer  << VMX_BF_EXIT_CTLS_SAVE_PREEMPT_TIMER_SHIFT  );
    1481         uint32_t const fVal      = VMX_EXIT_CTLS_DEFAULT1;
    1482         uint32_t const fZap      = fFeatures | VMX_EXIT_CTLS_DEFAULT1;
    1483         AssertMsg((fVal & fZap) == fVal, ("fVal=%#RX32 fZap=%#RX32 fFeatures=%#RX32\n", fVal, fZap, fFeatures));
    1484         uVmxMsr = RT_MAKE_U64(fVal, fZap);
     1486        /* Set the default1 class bits. See Intel spec. A.4 "VM-exit Controls". */
     1487        uint32_t const fAllowed0 = VMX_EXIT_CTLS_DEFAULT1;
     1488        uint32_t const fAllowed1 = fFeatures | VMX_EXIT_CTLS_DEFAULT1;
     1489        AssertMsg((fAllowed0 & fAllowed1) == fAllowed0, ("fAllowed0=%#RX32 fAllowed1=%#RX32 fFeatures=%#RX32\n", fAllowed0,
     1490                                                         fAllowed1, fFeatures));
     1491        uVmxMsr = RT_MAKE_U64(fAllowed0, fAllowed1);
    14851492    }
    14861493    else
     
    15151522                                 | (pGuestFeatures->fVmxEntryLoadEferMsr   << VMX_BF_ENTRY_CTLS_LOAD_EFER_MSR_SHIFT   )
    15161523                                 | (pGuestFeatures->fVmxEntryLoadPatMsr    << VMX_BF_ENTRY_CTLS_LOAD_PAT_MSR_SHIFT    );
    1517         uint32_t const fDefault1 = VMX_ENTRY_CTLS_DEFAULT1;
    1518         uint32_t const fVal      = fDefault1;
    1519         uint32_t const fZap      = fFeatures | fDefault1;
    1520         AssertMsg((fVal & fZap) == fVal, ("fVal=%#RX32 fZap=%#RX32 fFeatures=%#RX32\n", fVal, fZap, fFeatures));
    1521         uVmxMsr = RT_MAKE_U64(fVal, fZap);
     1524        /* Set the default1 class bits. See Intel spec. A.5 "VM-entry Controls". */
     1525        uint32_t const fAllowed0 = VMX_ENTRY_CTLS_DEFAULT1;
     1526        uint32_t const fAllowed1 = fFeatures | VMX_ENTRY_CTLS_DEFAULT1;
     1527        AssertMsg((fAllowed0 & fAllowed1) == fAllowed0, ("fAllowed0=%#RX32 fAllowed0=%#RX32 fFeatures=%#RX32\n", fAllowed0,
     1528                                                         fAllowed1, fFeatures));
     1529        uVmxMsr = RT_MAKE_U64(fAllowed0, fAllowed1);
    15221530    }
    15231531    else
     
    17541762                                 | (pGuestFeatures->fVmxXsavesXrstors     << VMX_BF_PROC_CTLS2_XSAVES_XRSTORS_SHIFT    )
    17551763                                 | (pGuestFeatures->fVmxUseTscScaling     << VMX_BF_PROC_CTLS2_TSC_SCALING_SHIFT       );
    1756         uint32_t const fVal      = 0;
    1757         uint32_t const fZap      = fFeatures;
    1758         uVmxMsr = RT_MAKE_U64(fVal, fZap);
     1764        /* No default1 class bits. A.3.3 "Secondary Processor-Based VM-Execution Controls". */
     1765        uint32_t const fAllowed0 = 0;
     1766        uint32_t const fAllowed1 = fFeatures;
     1767        uVmxMsr = RT_MAKE_U64(fAllowed0, fAllowed1);
    17591768    }
    17601769    else
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette