Changeset 87472 in vbox for trunk/src/VBox/VMM/VMMR3
- Timestamp:
- Jan 28, 2021 7:59:55 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 142492
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/HM.cpp
r86183 r87472 1553 1553 1554 1554 LogRel(("HM: APIC-access page physaddr = %#RHp\n", pVM->hm.s.vmx.HCPhysApicAccess)); 1555 #ifdef TODO_9217_VMCSINFO 1555 1556 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 1556 1557 { 1557 PCVMXVMCSINFO pVmcsInfo = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfo;1558 PCVMXVMCSINFOSHARED pVmcsInfo = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfo; 1558 1559 LogRel(("HM: VCPU%3d: MSR bitmap physaddr = %#RHp\n", idCpu, pVmcsInfo->HCPhysMsrBitmap)); 1559 1560 LogRel(("HM: VCPU%3d: VMCS physaddr = %#RHp\n", idCpu, pVmcsInfo->HCPhysVmcs)); … … 1565 1566 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 1566 1567 { 1567 PCVMXVMCSINFO pVmcsInfoNstGst = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfoNstGst;1568 PCVMXVMCSINFOSHARED pVmcsInfoNstGst = &pVM->apCpusR3[idCpu]->hm.s.vmx.VmcsInfoNstGst; 1568 1569 LogRel(("HM: VCPU%3d: MSR bitmap physaddr = %#RHp\n", idCpu, pVmcsInfoNstGst->HCPhysMsrBitmap)); 1569 1570 LogRel(("HM: VCPU%3d: VMCS physaddr = %#RHp\n", idCpu, pVmcsInfoNstGst->HCPhysVmcs)); … … 1571 1572 } 1572 1573 #endif 1574 #endif /* TODO_9217_VMCSINFO */ 1573 1575 1574 1576 /* … … 2887 2889 2888 2890 2891 #ifdef TODO_9217_VMCSINFO 2889 2892 /** 2890 2893 * Helper for HMR3CheckError to log VMCS controls to the release log. … … 2991 2994 } 2992 2995 } 2996 #endif 2993 2997 2994 2998 … … 3006 3010 /** @todo r=ramshankar: Are all EMTs out of ring-0 at this point!? If not, we 3007 3011 * 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; 3011 3017 switch (iStatusCode) 3012 3018 { … … 3015 3021 LogRel(("HM: VERR_VMX_INVALID_VMCS_PTR:\n")); 3016 3022 LogRel(("HM: CPU[%u] %s VMCS active\n", idCpu, fNstGstVmcsActive ? "Nested-guest" : "Guest")); 3023 #ifdef TODO_9217_VMCSINFO 3017 3024 LogRel(("HM: CPU[%u] Current pointer %#RHp vs %#RHp\n", idCpu, pVCpu->hm.s.vmx.LastError.HCPhysCurrentVmcs, 3018 3025 pVmcsInfo->HCPhysVmcs)); 3026 #endif 3019 3027 LogRel(("HM: CPU[%u] Current VMCS version %#x\n", idCpu, pVCpu->hm.s.vmx.LastError.u32VmcsRev)); 3020 3028 LogRel(("HM: CPU[%u] Entered Host Cpu %u\n", idCpu, pVCpu->hm.s.vmx.LastError.idEnteredCpu)); … … 3038 3046 else if (pVCpu->hm.s.vmx.LastError.u32InstrError == VMXINSTRERR_VMENTRY_INVALID_CTLS) 3039 3047 { 3048 #ifdef TODO_9217_VMCSINFO 3040 3049 hmR3CheckErrorLogVmcsCtls(idCpu, pVmcsInfo); 3041 3050 LogRel(("HM: CPU[%u] HCPhysMsrBitmap %#RHp\n", idCpu, pVmcsInfo->HCPhysMsrBitmap)); … … 3046 3055 LogRel(("HM: CPU[%u] cExitMsrStore %u\n", idCpu, pVmcsInfo->cExitMsrStore)); 3047 3056 LogRel(("HM: CPU[%u] cExitMsrLoad %u\n", idCpu, pVmcsInfo->cExitMsrLoad)); 3057 #endif 3048 3058 } 3049 3059 /** @todo Log VM-entry event injection control fields … … 3058 3068 LogRel(("HM: CPU[%u] HM error = %#RX32\n", idCpu, pVCpu->hm.s.u32HMError)); 3059 3069 LogRel(("HM: CPU[%u] Guest-intr. state = %#RX32\n", idCpu, pVCpu->hm.s.vmx.LastError.u32GuestIntrState)); 3070 #ifdef TODO_9217_VMCSINFO 3060 3071 hmR3CheckErrorLogVmcsCtls(idCpu, pVmcsInfo); 3072 #endif 3061 3073 break; 3062 3074 } … … 3304 3316 if (pVM->hm.s.vmx.fSupported) 3305 3317 { 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; 3309 3321 3310 3322 pHlp->pfnPrintf(pHlp, " %s VMCS active\n", fNstGstVmcsActive ? "Nested-guest" : "Guest"); … … 3312 3324 if (fRealOnV86Active) 3313 3325 { 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); 3321 3333 } 3322 3334 } … … 3348 3360 if (pVM->hm.s.vmx.fLbr) 3349 3361 { 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; 3352 3364 3353 3365 /** @todo r=ramshankar: The index technically varies depending on the CPU, but 3354 3366 * 0xf should cover everything we support thus far. Fix if necessary 3355 3367 * later. */ 3356 uint32_t const idxTopOfStack = pVmcsInfo ->u64LbrTosMsr & 0xf;3368 uint32_t const idxTopOfStack = pVmcsInfoShared->u64LbrTosMsr & 0xf; 3357 3369 if (idxTopOfStack > cLbrStack) 3358 3370 { 3359 3371 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); 3361 3373 return; 3362 3374 } … … 3368 3380 uint32_t idxCurrent = idxTopOfStack; 3369 3381 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); 3372 3384 for (;;) 3373 3385 { … … 3375 3387 { 3376 3388 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]); 3378 3390 } 3379 3391 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]); 3381 3393 3382 3394 idxCurrent = (idxCurrent - 1) % cLbrStack;
Note:
See TracChangeset
for help on using the changeset viewer.