VirtualBox

Changeset 87472 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Jan 28, 2021 7:59:55 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142492
Message:

VMM/HMVMX: Moving more stuff to HMR0PERVCPU. Created VMXVMCSINFOSHARED for some bits we seem to need to share with ring-3 (real mode, last branch stuff), the remaining VMXVMCSINFO structure is now ring-0 only. bugref:9217

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r86183 r87472  
    15531553
    15541554    LogRel(("HM: APIC-access page physaddr         = %#RHp\n",  pVM->hm.s.vmx.HCPhysApicAccess));
     1555#ifdef TODO_9217_VMCSINFO
    15551556    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
    15561557    {
    1557         PCVMXVMCSINFO pVmcsInfo = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfo;
     1558        PCVMXVMCSINFOSHARED pVmcsInfo = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfo;
    15581559        LogRel(("HM: VCPU%3d: MSR bitmap physaddr      = %#RHp\n", idCpu, pVmcsInfo->HCPhysMsrBitmap));
    15591560        LogRel(("HM: VCPU%3d: VMCS physaddr            = %#RHp\n", idCpu, pVmcsInfo->HCPhysVmcs));
     
    15651566        for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
    15661567        {
    1567             PCVMXVMCSINFO pVmcsInfoNstGst = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfoNstGst;
     1568            PCVMXVMCSINFOSHARED pVmcsInfoNstGst = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfoNstGst;
    15681569            LogRel(("HM: VCPU%3d: MSR bitmap physaddr      = %#RHp\n", idCpu, pVmcsInfoNstGst->HCPhysMsrBitmap));
    15691570            LogRel(("HM: VCPU%3d: VMCS physaddr            = %#RHp\n", idCpu, pVmcsInfoNstGst->HCPhysVmcs));
     
    15711572    }
    15721573#endif
     1574#endif /* TODO_9217_VMCSINFO */
    15731575
    15741576    /*
     
    28872889
    28882890
     2891#ifdef TODO_9217_VMCSINFO
    28892892/**
    28902893 * Helper for HMR3CheckError to log VMCS controls to the release log.
     
    29912994    }
    29922995}
     2996#endif
    29932997
    29942998
     
    30063010        /** @todo r=ramshankar: Are all EMTs out of ring-0 at this point!? If not, we
    30073011         *  might be getting inaccurate values for non-guru'ing EMTs. */
    3008         PVMCPU        pVCpu = pVM->apCpusR3[idCpu];
    3009         PCVMXVMCSINFO pVmcsInfo = hmGetVmxActiveVmcsInfo(pVCpu);
    3010         bool const    fNstGstVmcsActive = pVCpu->hm.s.vmx.fSwitchedToNstGstVmcs;
     3012        PVMCPU              pVCpu             = pVM->apCpusR3[idCpu];
     3013#ifdef TODO_9217_VMCSINFO
     3014        PCVMXVMCSINFOSHARED pVmcsInfo         = hmGetVmxActiveVmcsInfoShared(pVCpu);
     3015#endif
     3016        bool const          fNstGstVmcsActive = pVCpu->hm.s.vmx.fSwitchedToNstGstVmcs;
    30113017        switch (iStatusCode)
    30123018        {
     
    30153021                LogRel(("HM: VERR_VMX_INVALID_VMCS_PTR:\n"));
    30163022                LogRel(("HM: CPU[%u] %s VMCS active\n", idCpu, fNstGstVmcsActive ? "Nested-guest" : "Guest"));
     3023#ifdef TODO_9217_VMCSINFO
    30173024                LogRel(("HM: CPU[%u] Current pointer      %#RHp vs %#RHp\n", idCpu, pVCpu->hm.s.vmx.LastError.HCPhysCurrentVmcs,
    30183025                                                                                pVmcsInfo->HCPhysVmcs));
     3026#endif
    30193027                LogRel(("HM: CPU[%u] Current VMCS version %#x\n", idCpu, pVCpu->hm.s.vmx.LastError.u32VmcsRev));
    30203028                LogRel(("HM: CPU[%u] Entered Host Cpu     %u\n",  idCpu, pVCpu->hm.s.vmx.LastError.idEnteredCpu));
     
    30383046                else if (pVCpu->hm.s.vmx.LastError.u32InstrError == VMXINSTRERR_VMENTRY_INVALID_CTLS)
    30393047                {
     3048#ifdef TODO_9217_VMCSINFO
    30403049                    hmR3CheckErrorLogVmcsCtls(idCpu, pVmcsInfo);
    30413050                    LogRel(("HM: CPU[%u] HCPhysMsrBitmap      %#RHp\n",  idCpu, pVmcsInfo->HCPhysMsrBitmap));
     
    30463055                    LogRel(("HM: CPU[%u] cExitMsrStore        %u\n",     idCpu, pVmcsInfo->cExitMsrStore));
    30473056                    LogRel(("HM: CPU[%u] cExitMsrLoad         %u\n",     idCpu, pVmcsInfo->cExitMsrLoad));
     3057#endif
    30483058                }
    30493059                /** @todo Log VM-entry event injection control fields
     
    30583068                LogRel(("HM: CPU[%u] HM error = %#RX32\n", idCpu, pVCpu->hm.s.u32HMError));
    30593069                LogRel(("HM: CPU[%u] Guest-intr. state = %#RX32\n", idCpu, pVCpu->hm.s.vmx.LastError.u32GuestIntrState));
     3070#ifdef TODO_9217_VMCSINFO
    30603071                hmR3CheckErrorLogVmcsCtls(idCpu, pVmcsInfo);
     3072#endif
    30613073                break;
    30623074            }
     
    33043316        if (pVM->hm.s.vmx.fSupported)
    33053317        {
    3306             PCVMXVMCSINFO pVmcsInfo         = hmGetVmxActiveVmcsInfo(pVCpu);
    3307             bool const    fRealOnV86Active  = pVmcsInfo->RealMode.fRealOnV86Active;
    3308             bool const    fNstGstVmcsActive = pVCpu->hm.s.vmx.fSwitchedToNstGstVmcs;
     3318            PCVMXVMCSINFOSHARED pVmcsInfoShared   = hmGetVmxActiveVmcsInfoShared(pVCpu);
     3319            bool const          fRealOnV86Active  = pVmcsInfoShared->RealMode.fRealOnV86Active;
     3320            bool const          fNstGstVmcsActive = pVCpu->hm.s.vmx.fSwitchedToNstGstVmcs;
    33093321
    33103322            pHlp->pfnPrintf(pHlp, "  %s VMCS active\n", fNstGstVmcsActive ? "Nested-guest" : "Guest");
     
    33123324            if (fRealOnV86Active)
    33133325            {
    3314                 pHlp->pfnPrintf(pHlp, "      EFlags  = %#x\n", pVmcsInfo->RealMode.Eflags.u32);
    3315                 pHlp->pfnPrintf(pHlp, "      Attr CS = %#x\n", pVmcsInfo->RealMode.AttrCS.u);
    3316                 pHlp->pfnPrintf(pHlp, "      Attr SS = %#x\n", pVmcsInfo->RealMode.AttrSS.u);
    3317                 pHlp->pfnPrintf(pHlp, "      Attr DS = %#x\n", pVmcsInfo->RealMode.AttrDS.u);
    3318                 pHlp->pfnPrintf(pHlp, "      Attr ES = %#x\n", pVmcsInfo->RealMode.AttrES.u);
    3319                 pHlp->pfnPrintf(pHlp, "      Attr FS = %#x\n", pVmcsInfo->RealMode.AttrFS.u);
    3320                 pHlp->pfnPrintf(pHlp, "      Attr GS = %#x\n", pVmcsInfo->RealMode.AttrGS.u);
     3326                pHlp->pfnPrintf(pHlp, "      EFlags  = %#x\n", pVmcsInfoShared->RealMode.Eflags.u32);
     3327                pHlp->pfnPrintf(pHlp, "      Attr CS = %#x\n", pVmcsInfoShared->RealMode.AttrCS.u);
     3328                pHlp->pfnPrintf(pHlp, "      Attr SS = %#x\n", pVmcsInfoShared->RealMode.AttrSS.u);
     3329                pHlp->pfnPrintf(pHlp, "      Attr DS = %#x\n", pVmcsInfoShared->RealMode.AttrDS.u);
     3330                pHlp->pfnPrintf(pHlp, "      Attr ES = %#x\n", pVmcsInfoShared->RealMode.AttrES.u);
     3331                pHlp->pfnPrintf(pHlp, "      Attr FS = %#x\n", pVmcsInfoShared->RealMode.AttrFS.u);
     3332                pHlp->pfnPrintf(pHlp, "      Attr GS = %#x\n", pVmcsInfoShared->RealMode.AttrGS.u);
    33213333            }
    33223334        }
     
    33483360        if (pVM->hm.s.vmx.fLbr)
    33493361        {
    3350             PCVMXVMCSINFO pVmcsInfo = hmGetVmxActiveVmcsInfo(pVCpu);
    3351             uint32_t const cLbrStack = pVM->hm.s.vmx.idLbrFromIpMsrLast - pVM->hm.s.vmx.idLbrFromIpMsrFirst + 1;
     3362            PCVMXVMCSINFOSHARED pVmcsInfoShared = hmGetVmxActiveVmcsInfoShared(pVCpu);
     3363            uint32_t const      cLbrStack      = pVM->hm.s.vmx.idLbrFromIpMsrLast - pVM->hm.s.vmx.idLbrFromIpMsrFirst + 1;
    33523364
    33533365            /** @todo r=ramshankar: The index technically varies depending on the CPU, but
    33543366             *        0xf should cover everything we support thus far. Fix if necessary
    33553367             *        later. */
    3356             uint32_t const idxTopOfStack = pVmcsInfo->u64LbrTosMsr & 0xf;
     3368            uint32_t const idxTopOfStack = pVmcsInfoShared->u64LbrTosMsr & 0xf;
    33573369            if (idxTopOfStack > cLbrStack)
    33583370            {
    33593371                pHlp->pfnPrintf(pHlp, "Top-of-stack LBR MSR seems corrupt (index=%u, msr=%#RX64) expected index < %u\n",
    3360                                 idxTopOfStack, pVmcsInfo->u64LbrTosMsr, cLbrStack);
     3372                                idxTopOfStack, pVmcsInfoShared->u64LbrTosMsr, cLbrStack);
    33613373                return;
    33623374            }
     
    33683380            uint32_t idxCurrent = idxTopOfStack;
    33693381            Assert(idxTopOfStack < cLbrStack);
    3370             Assert(RT_ELEMENTS(pVmcsInfo->au64LbrFromIpMsr) <= cLbrStack);
    3371             Assert(RT_ELEMENTS(pVmcsInfo->au64LbrToIpMsr) <= cLbrStack);
     3382            Assert(RT_ELEMENTS(pVmcsInfoShared->au64LbrFromIpMsr) <= cLbrStack);
     3383            Assert(RT_ELEMENTS(pVmcsInfoShared->au64LbrToIpMsr) <= cLbrStack);
    33723384            for (;;)
    33733385            {
     
    33753387                {
    33763388                    pHlp->pfnPrintf(pHlp, "  Branch (%2u): From IP=%#016RX64 - To IP=%#016RX64\n", idxCurrent,
    3377                                     pVmcsInfo->au64LbrFromIpMsr[idxCurrent], pVmcsInfo->au64LbrToIpMsr[idxCurrent]);
     3389                                    pVmcsInfoShared->au64LbrFromIpMsr[idxCurrent], pVmcsInfoShared->au64LbrToIpMsr[idxCurrent]);
    33783390                }
    33793391                else
    3380                     pHlp->pfnPrintf(pHlp, "  Branch (%2u): LBR=%#RX64\n", idxCurrent, pVmcsInfo->au64LbrFromIpMsr[idxCurrent]);
     3392                    pHlp->pfnPrintf(pHlp, "  Branch (%2u): LBR=%#RX64\n", idxCurrent, pVmcsInfoShared->au64LbrFromIpMsr[idxCurrent]);
    33813393
    33823394                idxCurrent = (idxCurrent - 1) % cLbrStack;
Note: See TracChangeset for help on using the changeset viewer.

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