VirtualBox

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


Ignore:
Timestamp:
Dec 25, 2018 5:23:49 AM (6 years ago)
Author:
vboxsync
Message:

VMM, CPUM: Use a function to copy SUPHWVIRTMSRS to VMXMSRS and SVMMSRS rather than duplicate code.

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

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

    r76454 r76469  
    577577#endif /* !IN_RC */
    578578
     579
     580/**
     581 * Gets VMX MSRs from the provided hardware-virtualization MSRs struct.
     582 *
     583 * This abstraction exists to allow insultation of the support driver from including
     584 * VMX structures from HM headers.
     585 *
     586 * @param   pHwvirtMsrs     The hardware-virtualization MSRs.
     587 * @param   pVmxMsrs        Where to store the VMX MSRs.
     588 */
     589VMM_INT_DECL(void) HMVmxGetVmxMsrsFromHwvirtMsrs(PCSUPHWVIRTMSRS pHwvirtMsrs, PVMXMSRS pVmxMsrs)
     590{
     591    AssertReturnVoid(pHwvirtMsrs);
     592    AssertReturnVoid(pVmxMsrs);
     593    pVmxMsrs->u64FeatCtrl      = pHwvirtMsrs->u.vmx.u64FeatCtrl;
     594    pVmxMsrs->u64Basic         = pHwvirtMsrs->u.vmx.u64Basic;
     595    pVmxMsrs->PinCtls.u        = pHwvirtMsrs->u.vmx.u64PinCtls;
     596    pVmxMsrs->ProcCtls.u       = pHwvirtMsrs->u.vmx.u64ProcCtls;
     597    pVmxMsrs->ProcCtls2.u      = pHwvirtMsrs->u.vmx.u64ProcCtls2;
     598    pVmxMsrs->ExitCtls.u       = pHwvirtMsrs->u.vmx.u64ExitCtls;
     599    pVmxMsrs->EntryCtls.u      = pHwvirtMsrs->u.vmx.u64EntryCtls;
     600    pVmxMsrs->TruePinCtls.u    = pHwvirtMsrs->u.vmx.u64TruePinCtls;
     601    pVmxMsrs->TrueProcCtls.u   = pHwvirtMsrs->u.vmx.u64TrueProcCtls;
     602    pVmxMsrs->TrueEntryCtls.u  = pHwvirtMsrs->u.vmx.u64TrueEntryCtls;
     603    pVmxMsrs->TrueExitCtls.u   = pHwvirtMsrs->u.vmx.u64TrueExitCtls;
     604    pVmxMsrs->u64Misc          = pHwvirtMsrs->u.vmx.u64Misc;
     605    pVmxMsrs->u64Cr0Fixed0     = pHwvirtMsrs->u.vmx.u64Cr0Fixed0;
     606    pVmxMsrs->u64Cr0Fixed1     = pHwvirtMsrs->u.vmx.u64Cr0Fixed1;
     607    pVmxMsrs->u64Cr4Fixed0     = pHwvirtMsrs->u.vmx.u64Cr4Fixed0;
     608    pVmxMsrs->u64Cr4Fixed1     = pHwvirtMsrs->u.vmx.u64Cr4Fixed1;
     609    pVmxMsrs->u64VmcsEnum      = pHwvirtMsrs->u.vmx.u64VmcsEnum;
     610    pVmxMsrs->u64VmFunc        = pHwvirtMsrs->u.vmx.u64VmFunc;
     611    pVmxMsrs->u64EptVpidCaps   = pHwvirtMsrs->u.vmx.u64EptVpidCaps;
     612}
     613
     614
     615/**
     616 * Gets SVM MSRs from the provided hardware-virtualization MSRs struct.
     617 *
     618 * This abstraction exists to allow insultation of the support driver from including
     619 * SVM structures from HM headers.
     620 *
     621 * @param   pHwvirtMsrs     The hardware-virtualization MSRs.
     622 * @param   pSvmMsrs        Where to store the SVM MSRs.
     623 */
     624VMM_INT_DECL(void) HMVmxGetSvmMsrsFromHwvirtMsrs(PCSUPHWVIRTMSRS pHwvirtMsrs, PSVMMSRS pSvmMsrs)
     625{
     626    AssertReturnVoid(pHwvirtMsrs);
     627    AssertReturnVoid(pSvmMsrs);
     628    pSvmMsrs->u64MsrHwcr = pHwvirtMsrs->u.svm.u64MsrHwcr;
     629}
     630
  • trunk/src/VBox/VMM/VMMR0/HMR0.cpp

    r76468 r76469  
    11761176        pVM->hm.s.vmx.u64HostEfer           = g_HmR0.hwvirt.u.vmx.u64HostEfer;
    11771177        pVM->hm.s.vmx.u64HostSmmMonitorCtl  = g_HmR0.hwvirt.u.vmx.u64HostSmmMonitorCtl;
    1178 
    1179         pVM->hm.s.vmx.Msrs.u64FeatCtrl      = g_HmR0.hwvirt.Msrs.u.vmx.u64FeatCtrl;
    1180         pVM->hm.s.vmx.Msrs.u64Basic         = g_HmR0.hwvirt.Msrs.u.vmx.u64Basic;
    1181         pVM->hm.s.vmx.Msrs.PinCtls.u        = g_HmR0.hwvirt.Msrs.u.vmx.u64PinCtls;
    1182         pVM->hm.s.vmx.Msrs.ProcCtls.u       = g_HmR0.hwvirt.Msrs.u.vmx.u64ProcCtls;
    1183         pVM->hm.s.vmx.Msrs.ProcCtls2.u      = g_HmR0.hwvirt.Msrs.u.vmx.u64ProcCtls2;
    1184         pVM->hm.s.vmx.Msrs.ExitCtls.u       = g_HmR0.hwvirt.Msrs.u.vmx.u64ExitCtls;
    1185         pVM->hm.s.vmx.Msrs.EntryCtls.u      = g_HmR0.hwvirt.Msrs.u.vmx.u64EntryCtls;
    1186         pVM->hm.s.vmx.Msrs.TruePinCtls.u    = g_HmR0.hwvirt.Msrs.u.vmx.u64TruePinCtls;
    1187         pVM->hm.s.vmx.Msrs.TrueProcCtls.u   = g_HmR0.hwvirt.Msrs.u.vmx.u64TrueProcCtls;
    1188         pVM->hm.s.vmx.Msrs.TrueEntryCtls.u  = g_HmR0.hwvirt.Msrs.u.vmx.u64TrueEntryCtls;
    1189         pVM->hm.s.vmx.Msrs.TrueExitCtls.u   = g_HmR0.hwvirt.Msrs.u.vmx.u64TrueExitCtls;
    1190         pVM->hm.s.vmx.Msrs.u64Misc          = g_HmR0.hwvirt.Msrs.u.vmx.u64Misc;
    1191         pVM->hm.s.vmx.Msrs.u64Cr0Fixed0     = g_HmR0.hwvirt.Msrs.u.vmx.u64Cr0Fixed0;
    1192         pVM->hm.s.vmx.Msrs.u64Cr0Fixed1     = g_HmR0.hwvirt.Msrs.u.vmx.u64Cr0Fixed1;
    1193         pVM->hm.s.vmx.Msrs.u64Cr4Fixed0     = g_HmR0.hwvirt.Msrs.u.vmx.u64Cr4Fixed0;
    1194         pVM->hm.s.vmx.Msrs.u64Cr4Fixed1     = g_HmR0.hwvirt.Msrs.u.vmx.u64Cr4Fixed1;
    1195         pVM->hm.s.vmx.Msrs.u64VmcsEnum      = g_HmR0.hwvirt.Msrs.u.vmx.u64VmcsEnum;
    1196         pVM->hm.s.vmx.Msrs.u64VmFunc        = g_HmR0.hwvirt.Msrs.u.vmx.u64VmFunc;
    1197         pVM->hm.s.vmx.Msrs.u64EptVpidCaps   = g_HmR0.hwvirt.Msrs.u.vmx.u64EptVpidCaps;
     1178        HMVmxGetVmxMsrsFromHwvirtMsrs(&g_HmR0.hwvirt.Msrs, &pVM->hm.s.vmx.Msrs);
    11981179    }
    11991180    else if (pVM->hm.s.svm.fSupported)
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r76468 r76469  
    17501750            {
    17511751                if (fCaps & SUPVTCAPS_VT_X)
    1752                 {
    1753                     pMsrs->hwvirt.vmx.u64FeatCtrl       = HwvirtMsrs.u.vmx.u64FeatCtrl;
    1754                     pMsrs->hwvirt.vmx.u64Basic          = HwvirtMsrs.u.vmx.u64Basic;
    1755                     pMsrs->hwvirt.vmx.PinCtls.u         = HwvirtMsrs.u.vmx.u64PinCtls;
    1756                     pMsrs->hwvirt.vmx.ProcCtls.u        = HwvirtMsrs.u.vmx.u64ProcCtls;
    1757                     pMsrs->hwvirt.vmx.ProcCtls2.u       = HwvirtMsrs.u.vmx.u64ProcCtls2;
    1758                     pMsrs->hwvirt.vmx.ExitCtls.u        = HwvirtMsrs.u.vmx.u64ExitCtls;
    1759                     pMsrs->hwvirt.vmx.EntryCtls.u       = HwvirtMsrs.u.vmx.u64EntryCtls;
    1760                     pMsrs->hwvirt.vmx.TruePinCtls.u     = HwvirtMsrs.u.vmx.u64TruePinCtls;
    1761                     pMsrs->hwvirt.vmx.TrueProcCtls.u    = HwvirtMsrs.u.vmx.u64TrueProcCtls;
    1762                     pMsrs->hwvirt.vmx.TrueEntryCtls.u   = HwvirtMsrs.u.vmx.u64TrueEntryCtls;
    1763                     pMsrs->hwvirt.vmx.TrueExitCtls.u    = HwvirtMsrs.u.vmx.u64TrueExitCtls;
    1764                     pMsrs->hwvirt.vmx.u64Misc           = HwvirtMsrs.u.vmx.u64Misc;
    1765                     pMsrs->hwvirt.vmx.u64Cr0Fixed0      = HwvirtMsrs.u.vmx.u64Cr0Fixed0;
    1766                     pMsrs->hwvirt.vmx.u64Cr0Fixed1      = HwvirtMsrs.u.vmx.u64Cr0Fixed1;
    1767                     pMsrs->hwvirt.vmx.u64Cr4Fixed0      = HwvirtMsrs.u.vmx.u64Cr4Fixed0;
    1768                     pMsrs->hwvirt.vmx.u64Cr4Fixed1      = HwvirtMsrs.u.vmx.u64Cr4Fixed1;
    1769                     pMsrs->hwvirt.vmx.u64VmcsEnum       = HwvirtMsrs.u.vmx.u64VmcsEnum;
    1770                     pMsrs->hwvirt.vmx.u64VmFunc         = HwvirtMsrs.u.vmx.u64VmFunc;
    1771                     pMsrs->hwvirt.vmx.u64EptVpidCaps    = HwvirtMsrs.u.vmx.u64EptVpidCaps;
    1772                 }
     1752                    HMVmxGetVmxMsrsFromHwvirtMsrs(&HwvirtMsrs, &pMsrs->hwvirt.vmx);
    17731753                else
    1774                     pMsrs->hwvirt.svm.u64MsrHwcr = HwvirtMsrs.u.svm.u64MsrHwcr;
     1754                    HMVmxGetSvmMsrsFromHwvirtMsrs(&HwvirtMsrs, &pMsrs->hwvirt.svm);
    17751755                return VINF_SUCCESS;
    17761756            }
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