VirtualBox

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


Ignore:
Timestamp:
Jun 21, 2017 8:29:25 AM (7 years ago)
Author:
vboxsync
Message:

VMM: Nested Hw.virt: Fixes and debugger info support for VCPU hwvirt state.

Location:
trunk/src/VBox/VMM/VMMR3
Files:
5 edited

Legend:

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

    r67157 r67529  
    114114#include <VBox/vmm/mm.h>
    115115#include <VBox/vmm/em.h>
     116#include <VBox/vmm/iem.h>
    116117#include <VBox/vmm/selm.h>
    117118#include <VBox/vmm/dbgf.h>
     
    173174static DECLCALLBACK(void) cpumR3InfoAll(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
    174175static DECLCALLBACK(void) cpumR3InfoGuest(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
     176static DECLCALLBACK(void) cpumR3InfoGuestHwvirt(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
    175177static DECLCALLBACK(void) cpumR3InfoGuestInstr(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
    176178static DECLCALLBACK(void) cpumR3InfoHyper(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
     
    981983    DBGFR3InfoRegisterInternalEx(pVM, "cpumguest",        "Displays the guest cpu state.",
    982984                                 &cpumR3InfoGuest, DBGFINFO_FLAGS_ALL_EMTS);
     985    DBGFR3InfoRegisterInternalEx(pVM, "cpumguesthwvirt",   "Displays the guest hwvirt. cpu state.",
     986                                 &cpumR3InfoGuestHwvirt, DBGFINFO_FLAGS_ALL_EMTS);
    983987    DBGFR3InfoRegisterInternalEx(pVM, "cpumhyper",        "Displays the hypervisor cpu state.",
    984988                                 &cpumR3InfoHyper, DBGFINFO_FLAGS_ALL_EMTS);
     
    20972101    cpumR3InfoGuest(pVM, pHlp, pszArgs);
    20982102    cpumR3InfoGuestInstr(pVM, pHlp, pszArgs);
     2103    cpumR3InfoGuestHwvirt(pVM, pHlp, pszArgs);
    20992104    cpumR3InfoHyper(pVM, pHlp, pszArgs);
    21002105    cpumR3InfoHost(pVM, pHlp, pszArgs);
     
    21482153 * @param   pVM         The cross context VM structure.
    21492154 * @param   pHlp        The info helper functions.
    2150  * @param   pszArgs     Arguments, ignored.
     2155 * @param   pszArgs     Arguments.
    21512156 */
    21522157static DECLCALLBACK(void) cpumR3InfoGuest(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs)
     
    21662171}
    21672172
     2173
     2174/**
     2175 * Display the guest's hardware-virtualization cpu state.
     2176 *
     2177 * @param   pVM         The cross context VM structure.
     2178 * @param   pHlp        The info helper functions.
     2179 * @param   pszArgs     Arguments, ignored.
     2180 */
     2181static DECLCALLBACK(void) cpumR3InfoGuestHwvirt(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs)
     2182{
     2183    RT_NOREF(pszArgs);
     2184
     2185    PVMCPU pVCpu = VMMGetCpu(pVM);
     2186    if (!pVCpu)
     2187        pVCpu = &pVM->aCpus[0];
     2188
     2189    /*
     2190     * Figure out what to dump.
     2191     *
     2192     * In the future we may need to dump everything whether or not we're actively in nested-guest mode
     2193     * or not, hence the reason why we use a mask to determine what needs dumping. Currently, we only
     2194     * dump hwvirt. state when the guest CPU is executing a nested-guest.
     2195     */
     2196    /** @todo perhaps make this configurable through pszArgs, depending on how much
     2197     *        noise we wish to accept when nested hwvirt. isn't used. */
     2198#define CPUMHWVIRTDUMP_NONE     (0)
     2199#define CPUMHWVIRTDUMP_SVM      RT_BIT(0)
     2200#define CPUMHWVIRTDUMP_VMX      RT_BIT(1)
     2201#define CPUMHWVIRTDUMP_COMMON   RT_BIT(2)
     2202#define CPUMHWVIRTDUMP_LAST     CPUMHWVIRTDUMP_VMX
     2203#define CPUMHWVIRTDUMP_ALL      (CPUMHWVIRTDUMP_COMMON | CPUMHWVIRTDUMP_VMX | CPUMHWVIRTDUMP_SVM)
     2204
     2205    PCPUMCTX pCtx = &pVCpu->cpum.s.Guest;
     2206    static const char *const s_aHwvirtModes[] = { "No/inactive", "SVM", "VMX", "Common" };
     2207    uint8_t const idxHwvirtState = CPUMIsGuestInSvmNestedHwVirtMode(pCtx) ? CPUMHWVIRTDUMP_SVM
     2208                                 : CPUMIsGuestInVmxNestedHwVirtMode(pCtx) ? CPUMHWVIRTDUMP_VMX : CPUMHWVIRTDUMP_NONE;
     2209    AssertCompile(CPUMHWVIRTDUMP_LAST <= RT_ELEMENTS(s_aHwvirtModes));
     2210    Assert(idxHwvirtState < RT_ELEMENTS(s_aHwvirtModes));
     2211    const char *pcszHwvirtMode   = s_aHwvirtModes[idxHwvirtState];
     2212    uint32_t const fDumpState    = idxHwvirtState; /* | CPUMHWVIRTDUMP_ALL */
     2213
     2214    /*
     2215     * Dump it.
     2216     */
     2217    pHlp->pfnPrintf(pHlp, "VCPU[%u] hardware virtualization state:\n", pVCpu->idCpu);
     2218
     2219    if (fDumpState & CPUMHWVIRTDUMP_COMMON)
     2220        pHlp->pfnPrintf(pHlp, "fLocalForcedActions            = %#RX32\n",  pCtx->hwvirt.fLocalForcedActions);
     2221    pHlp->pfnPrintf(pHlp, "%s hwvirt state%s\n", pcszHwvirtMode, fDumpState ? ":" : "");
     2222    if (fDumpState & CPUMHWVIRTDUMP_SVM)
     2223    {
     2224        pHlp->pfnPrintf(pHlp, "  uMsrHSavePa                = %#RX64\n",    pCtx->hwvirt.svm.uMsrHSavePa);
     2225        pHlp->pfnPrintf(pHlp, "  GCPhysVmcb                 = %#RGp\n",     pCtx->hwvirt.svm.GCPhysVmcb);
     2226        pHlp->pfnPrintf(pHlp, "  VmcbCtrl:\n");
     2227        HMR3InfoSvmVmcbCtrl(pHlp, &pCtx->hwvirt.svm.VmcbCtrl, "    " /* pszPrefix */);
     2228        pHlp->pfnPrintf(pHlp, "  HostState:\n");
     2229        pHlp->pfnPrintf(pHlp, "    uEferMsr                   = %#RX64\n",  pCtx->hwvirt.svm.HostState.uEferMsr);
     2230        pHlp->pfnPrintf(pHlp, "    uCr0                       = %#RX64\n",  pCtx->hwvirt.svm.HostState.uCr0);
     2231        pHlp->pfnPrintf(pHlp, "    uCr4                       = %#RX64\n",  pCtx->hwvirt.svm.HostState.uCr4);
     2232        pHlp->pfnPrintf(pHlp, "    uCr3                       = %#RX64\n",  pCtx->hwvirt.svm.HostState.uCr3);
     2233        pHlp->pfnPrintf(pHlp, "    uRip                       = %#RX64\n",  pCtx->hwvirt.svm.HostState.uRip);
     2234        pHlp->pfnPrintf(pHlp, "    uRsp                       = %#RX64\n",  pCtx->hwvirt.svm.HostState.uRsp);
     2235        pHlp->pfnPrintf(pHlp, "    uRax                       = %#RX64\n",  pCtx->hwvirt.svm.HostState.uRax);
     2236        pHlp->pfnPrintf(pHlp, "    rflags                     = %#RX64\n",  pCtx->hwvirt.svm.HostState.rflags.u64);
     2237        PCPUMSELREG pSel = &pCtx->hwvirt.svm.HostState.es;
     2238        pHlp->pfnPrintf(pHlp, "    es                         = {%04x base=%016RX64 limit=%08x flags=%08x}\n",
     2239                        pSel->Sel, pSel->u64Base, pSel->u32Limit, pSel->fFlags);
     2240        pSel = &pCtx->hwvirt.svm.HostState.cs;
     2241        pHlp->pfnPrintf(pHlp, "    cs                         = {%04x base=%016RX64 limit=%08x flags=%08x}\n",
     2242                        pSel->Sel, pSel->u64Base, pSel->u32Limit, pSel->fFlags);
     2243        pSel = &pCtx->hwvirt.svm.HostState.ss;
     2244        pHlp->pfnPrintf(pHlp, "    ss                         = {%04x base=%016RX64 limit=%08x flags=%08x}\n",
     2245                        pSel->Sel, pSel->u64Base, pSel->u32Limit, pSel->fFlags);
     2246        pSel = &pCtx->hwvirt.svm.HostState.ds;
     2247        pHlp->pfnPrintf(pHlp, "    ds                         = {%04x base=%016RX64 limit=%08x flags=%08x}\n",
     2248                        pSel->Sel, pSel->u64Base, pSel->u32Limit, pSel->fFlags);
     2249        pHlp->pfnPrintf(pHlp, "    gdtr                       = %016RX64:%04x\n", pCtx->hwvirt.svm.HostState.gdtr.pGdt,
     2250                        pCtx->hwvirt.svm.HostState.gdtr.cbGdt);
     2251        pHlp->pfnPrintf(pHlp, "    idtr                       = %016RX64:%04x\n", pCtx->hwvirt.svm.HostState.idtr.pIdt,
     2252                        pCtx->hwvirt.svm.HostState.idtr.cbIdt);
     2253        pHlp->pfnPrintf(pHlp, "  fGif                       = %u\n",        pCtx->hwvirt.svm.fGif);
     2254        pHlp->pfnPrintf(pHlp, "  cPauseFilter               = %RU16\n",     pCtx->hwvirt.svm.cPauseFilter);
     2255        pHlp->pfnPrintf(pHlp, "  cPauseFilterThreshold      = %RU32\n",     pCtx->hwvirt.svm.cPauseFilterThreshold);
     2256        pHlp->pfnPrintf(pHlp, "  fInterceptEvents           = %u\n",        pCtx->hwvirt.svm.fInterceptEvents);
     2257        pHlp->pfnPrintf(pHlp, "  pvMsrBitmapR3              = %p\n",        pCtx->hwvirt.svm.pvMsrBitmapR3);
     2258        pHlp->pfnPrintf(pHlp, "  pvMsrBitmapR0              = %RKv\n",      pCtx->hwvirt.svm.pvMsrBitmapR0);
     2259        pHlp->pfnPrintf(pHlp, "  pvIoBitmapR3               = %p\n",        pCtx->hwvirt.svm.pvIoBitmapR3);
     2260        pHlp->pfnPrintf(pHlp, "  pvIoBitmapR0               = %RKv\n",      pCtx->hwvirt.svm.pvIoBitmapR0);
     2261    }
     2262
     2263    /** @todo Intel.  */
     2264#if 0
     2265    if (fDumpState & CPUMHWVIRTDUMP_VMX)
     2266    {
     2267    }
     2268#endif
     2269
     2270#undef CPUMHWVIRTDUMP_NONE
     2271#undef CPUMHWVIRTDUMP_COMMON
     2272#undef CPUMHWVIRTDUMP_SVM
     2273#undef CPUMHWVIRTDUMP_VMX
     2274#undef CPUMHWVIRTDUMP_LAST
     2275#undef CPUMHWVIRTDUMP_ALL
     2276}
    21682277
    21692278/**
  • trunk/src/VBox/VMM/VMMR3/EM.cpp

    r67204 r67529  
    19601960            {
    19611961                bool     fIntrEnabled;
     1962#ifdef VBOX_WITH_RAW_MODE
     1963                fIntrEnabled = PATMAreInterruptsEnabled(pVM);
     1964#else
     1965                fIntrEnabled = true;
     1966#endif
     1967                /** @todo Can we centralize this under CPUMCanInjectInterrupt()? */
    19621968                PCPUMCTX pCtx = pVCpu->em.s.pCtx;
    1963 #ifdef VBOX_WITH_RAW_MODE
    1964                 fIntrEnabled = PATMAreInterruptsEnabled(pVM); RT_NOREF(pCtx);
    1965 #elif defined(VBOX_WITH_NESTED_HWVIRT)
    1966                 if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
    1967                     fIntrEnabled = HMSvmNstGstCanTakePhysInterrupt(pVCpu, pCtx);
    1968                 else
    1969                     fIntrEnabled = pCtx->eflags.Bits.u1IF;
     1969#ifdef VBOX_WITH_NESTED_HWVIRT
     1970                fIntrEnabled &= pCtx->hwvirt.svm.fGif;
     1971                if (fIntrEnabled)
     1972                {
     1973                    if (CPUMIsGuestInSvmNestedHwVirtMode(pCtx))
     1974                        fIntrEnabled = CPUMCanSvmNstGstTakePhysIntr(pCtx);
     1975                    else
     1976                        fIntrEnabled = pCtx->eflags.Bits.u1IF;
     1977                }
    19701978#else
    19711979                fIntrEnabled = pCtx->eflags.Bits.u1IF;
     
    19801988                        if (CPUMIsGuestSvmCtrlInterceptSet(pCtx, SVM_CTRL_INTERCEPT_INTR))
    19811989                        {
    1982                             VBOXSTRICTRC rcStrict = HMSvmNstGstVmExit(pVCpu, pCtx, SVM_EXIT_INTR, 0 /* uExitInfo1 */, 0 /* uExitInfo2 */);
     1990                            VBOXSTRICTRC rcStrict = IEMExecSvmVmexit(pVCpu, SVM_EXIT_INTR, 0, 0);
    19831991                            if (rcStrict == VINF_SVM_VMEXIT)
    19841992                                rc2 = VINF_EM_RESCHEDULE;
     
    19972005                            /** @todo this really isn't nice, should properly handle this */
    19982006                            rc2 = TRPMR3InjectEvent(pVM, pVCpu, TRPM_HARDWARE_INT);
    1999                             if (pVM->em.s.fIemExecutesAll && (rc2 == VINF_EM_RESCHEDULE_REM || rc2 == VINF_EM_RESCHEDULE_HM || rc2 == VINF_EM_RESCHEDULE_RAW))
     2007                            if (pVM->em.s.fIemExecutesAll && (   rc2 == VINF_EM_RESCHEDULE_REM
     2008                                                              || rc2 == VINF_EM_RESCHEDULE_HM
     2009                                                              || rc2 == VINF_EM_RESCHEDULE_RAW))
    20002010                                rc2 = VINF_EM_RESCHEDULE;
    20012011#ifdef VBOX_STRICT
     
    20132023                         * Check nested-guest virtual interrupts.
    20142024                         */
    2015                         if (HMSvmNstGstCanTakeVirtInterrupt(pVCpu, pCtx))
     2025                        if (CPUMCanSvmNstGstTakeVirtIntr(pCtx))
    20162026                        {
    20172027                            if (CPUMIsGuestSvmCtrlInterceptSet(pCtx, SVM_CTRL_INTERCEPT_VINTR))
    20182028                            {
    2019                                 VBOXSTRICTRC rcStrict = HMSvmNstGstVmExit(pVCpu, pCtx, SVM_EXIT_VINTR, 0 /* uExitInfo1 */, 0 /* uExitInfo2 */);
     2029                                VBOXSTRICTRC rcStrict = IEMExecSvmVmexit(pVCpu, SVM_EXIT_VINTR, 0, 0);
    20202030                                if (rcStrict == VINF_SVM_VMEXIT)
    20212031                                    rc2 = VINF_EM_RESCHEDULE;
     
    20342044                                 */
    20352045                                VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INTERRUPT_NESTED_GUEST);
    2036                                 uint8_t uNstGstVector = HMSvmNstGstGetInterrupt(pCtx);
     2046                                uint8_t uNstGstVector = CPUMGetSvmNstGstInterrupt(pCtx);
    20372047                                TRPMAssertTrap(pVCpu, uNstGstVector, TRPM_HARDWARE_INT);
     2048                                Log(("EM: Asserting nested-guest virt. hardware intr: %#x\n", uNstGstVector));
    20382049                                /** @todo reschedule to HM/REM later, when the HMR0 nested-guest execution is
    20392050                                 *  done. For now just reschedule to IEM. */
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r66684 r67529  
    4747#include <VBox/vmm/dbgf.h>
    4848#include <VBox/vmm/iom.h>
     49#include <VBox/vmm/iem.h>
    4950#include <VBox/vmm/patm.h>
    5051#include <VBox/vmm/csam.h>
     
    26822683    Assert(HMIsEnabled(pVM));
    26832684
     2685#if defined(VBOX_WITH_NESTED_HWVIRT) && defined(VBOX_WITH_NESTED_HWVIRT_ONLY_IN_IEM)
     2686    if (CPUMIsGuestInNestedHwVirtMode(pCtx))
     2687    {
     2688        Log(("HMR3CanExecuteGuest: In nested-guest mode - returning false"));
     2689        return false;
     2690    }
     2691#endif
     2692
    26842693    /* If we're still executing the IO code, then return false. */
    26852694    if (    RT_UNLIKELY(pVCpu->hm.s.EmulateIoBlock.fEnabled)
     
    35933602}
    35943603
     3604
     3605/**
     3606 * Displays SVM VMCB controls.
     3607 *
     3608 * @param   pHlp        The info helper functions.
     3609 * @param   pVmcbCtrl   Pointer to a SVM VMCB controls area.
     3610 * @param   pszPrefix   Caller specified string prefix.
     3611 */
     3612VMMR3_INT_DECL(void) HMR3InfoSvmVmcbCtrl(PCDBGFINFOHLP pHlp, PCSVMVMCBCTRL pVmcbCtrl, const char *pszPrefix)
     3613{
     3614    AssertReturnVoid(pHlp);
     3615    AssertReturnVoid(pVmcbCtrl);
     3616
     3617    pHlp->pfnPrintf(pHlp, "%su16InterceptRdCRx          = %#RX16\n",    pszPrefix, pVmcbCtrl->u16InterceptRdCRx);
     3618    pHlp->pfnPrintf(pHlp, "%su16InterceptWrCRx          = %#RX16\n",    pszPrefix, pVmcbCtrl->u16InterceptWrCRx);
     3619    pHlp->pfnPrintf(pHlp, "%su16InterceptRdDRx          = %#RX16\n",    pszPrefix, pVmcbCtrl->u16InterceptRdDRx);
     3620    pHlp->pfnPrintf(pHlp, "%su16InterceptWrDRx          = %#RX16\n",    pszPrefix, pVmcbCtrl->u16InterceptWrDRx);
     3621    pHlp->pfnPrintf(pHlp, "%su32InterceptXcpt           = %#RX32\n",    pszPrefix, pVmcbCtrl->u32InterceptXcpt);
     3622    pHlp->pfnPrintf(pHlp, "%su64InterceptCtrl           = %#RX64\n",    pszPrefix, pVmcbCtrl->u64InterceptCtrl);
     3623    pHlp->pfnPrintf(pHlp, "%su16PauseFilterThreshold    = %#RX16\n",    pszPrefix, pVmcbCtrl->u16PauseFilterThreshold);
     3624    pHlp->pfnPrintf(pHlp, "%su16PauseFilterCount        = %#RX16\n",    pszPrefix, pVmcbCtrl->u16PauseFilterCount);
     3625    pHlp->pfnPrintf(pHlp, "%su64IOPMPhysAddr            = %#RX64\n",    pszPrefix, pVmcbCtrl->u64IOPMPhysAddr);
     3626    pHlp->pfnPrintf(pHlp, "%su64MSRPMPhysAddr           = %#RX64\n",    pszPrefix, pVmcbCtrl->u64MSRPMPhysAddr);
     3627    pHlp->pfnPrintf(pHlp, "%su64TSCOffset               = %#RX64\n",    pszPrefix, pVmcbCtrl->u64TSCOffset);
     3628    pHlp->pfnPrintf(pHlp, "%sTLBCtrl\n",                                pszPrefix);
     3629    pHlp->pfnPrintf(pHlp, "%s  u32ASID                    = %#RX32\n",  pszPrefix, pVmcbCtrl->TLBCtrl.n.u32ASID);
     3630    pHlp->pfnPrintf(pHlp, "%s  u8TLBFlush                 = %u\n",      pszPrefix, pVmcbCtrl->TLBCtrl.n.u8TLBFlush);
     3631    pHlp->pfnPrintf(pHlp, "%sIntCtrl\n",                                pszPrefix);
     3632    pHlp->pfnPrintf(pHlp, "%s  u8VTPR                     = %#RX8 (%u)\n",   pszPrefix, pVmcbCtrl->IntCtrl.n.u8VTPR, pVmcbCtrl->IntCtrl.n.u8VTPR);
     3633    pHlp->pfnPrintf(pHlp, "%s  u1VIrqPending              = %RTbool\n", pszPrefix, pVmcbCtrl->IntCtrl.n.u1VIrqPending);
     3634    pHlp->pfnPrintf(pHlp, "%s  u4VIntrPrio                = %#RX8\n",   pszPrefix, pVmcbCtrl->IntCtrl.n.u4VIntrPrio);
     3635    pHlp->pfnPrintf(pHlp, "%s  u1IgnoreTPR                = %RTbool\n", pszPrefix, pVmcbCtrl->IntCtrl.n.u1IgnoreTPR);
     3636    pHlp->pfnPrintf(pHlp, "%s  u1VIntrMasking             = %RTbool\n", pszPrefix, pVmcbCtrl->IntCtrl.n.u1VIntrMasking);
     3637    pHlp->pfnPrintf(pHlp, "%s  u1AvicEnable               = %RTbool\n", pszPrefix, pVmcbCtrl->IntCtrl.n.u1AvicEnable);
     3638    pHlp->pfnPrintf(pHlp, "%s  u8VIntrVector              = %#RX8\n",   pszPrefix, pVmcbCtrl->IntCtrl.n.u8VIntrVector);
     3639    pHlp->pfnPrintf(pHlp, "%su64IntShadow               = %#RX64\n",    pszPrefix, pVmcbCtrl->u64IntShadow);
     3640    pHlp->pfnPrintf(pHlp, "%su64ExitCode                = %#RX64\n",    pszPrefix, pVmcbCtrl->u64ExitCode);
     3641    pHlp->pfnPrintf(pHlp, "%su64ExitInfo1               = %#RX64\n",    pszPrefix, pVmcbCtrl->u64ExitInfo1);
     3642    pHlp->pfnPrintf(pHlp, "%su64ExitInfo2               = %#RX64\n",    pszPrefix, pVmcbCtrl->u64ExitInfo2);
     3643    pHlp->pfnPrintf(pHlp, "%sExitIntInfo\n",                            pszPrefix);
     3644    pHlp->pfnPrintf(pHlp, "%s  u8Vector                   = %#RX8 (%u)\n", pszPrefix, pVmcbCtrl->ExitIntInfo.n.u8Vector, pVmcbCtrl->ExitIntInfo.n.u8Vector);
     3645    pHlp->pfnPrintf(pHlp, "%s  u3Type                     = %u\n",      pszPrefix, pVmcbCtrl->ExitIntInfo.n.u3Type);
     3646    pHlp->pfnPrintf(pHlp, "%s  u1ErrorCodeValid           = %RTbool\n", pszPrefix, pVmcbCtrl->ExitIntInfo.n.u1ErrorCodeValid);
     3647    pHlp->pfnPrintf(pHlp, "%s  u1Valid                    = %RTbool\n", pszPrefix, pVmcbCtrl->ExitIntInfo.n.u1Valid);
     3648    pHlp->pfnPrintf(pHlp, "%s  u32ErrorCode               = %#RX32\n",  pszPrefix, pVmcbCtrl->ExitIntInfo.n.u32ErrorCode);
     3649    pHlp->pfnPrintf(pHlp, "%sNestedPaging\n",                           pszPrefix);
     3650    pHlp->pfnPrintf(pHlp, "%s  u1NestedPaging             = %RTbool\n", pszPrefix, pVmcbCtrl->NestedPaging.n.u1NestedPaging);
     3651    pHlp->pfnPrintf(pHlp, "%sAvicBar\n",                                pszPrefix);
     3652    pHlp->pfnPrintf(pHlp, "%s  u40Addr                    = %#RX64\n",  pszPrefix, pVmcbCtrl->AvicBar.n.u40Addr);
     3653    pHlp->pfnPrintf(pHlp, "%sEventInject\n",                            pszPrefix);
     3654    pHlp->pfnPrintf(pHlp, "%s  EventInject\n",                          pszPrefix);
     3655    pHlp->pfnPrintf(pHlp, "%s  u8Vector                   = %#RX32 (%u)\n", pszPrefix, pVmcbCtrl->EventInject.n.u8Vector, pVmcbCtrl->EventInject.n.u8Vector);
     3656    pHlp->pfnPrintf(pHlp, "%s  u3Type                     = %u\n",      pszPrefix, pVmcbCtrl->EventInject.n.u3Type);
     3657    pHlp->pfnPrintf(pHlp, "%s  u1ErrorCodeValid           = %RTbool\n", pszPrefix, pVmcbCtrl->EventInject.n.u1ErrorCodeValid);
     3658    pHlp->pfnPrintf(pHlp, "%s  u1Valid                    = %RTbool\n", pszPrefix, pVmcbCtrl->EventInject.n.u1Valid);
     3659    pHlp->pfnPrintf(pHlp, "%s  u32ErrorCode               = %#RX32\n",  pszPrefix, pVmcbCtrl->EventInject.n.u32ErrorCode);
     3660    pHlp->pfnPrintf(pHlp, "%su64NestedPagingCR3         = %#RX64\n",    pszPrefix, pVmcbCtrl->u64NestedPagingCR3);
     3661    pHlp->pfnPrintf(pHlp, "%su64LBRVirt                 = %#RX64\n",    pszPrefix, pVmcbCtrl->u64LBRVirt);
     3662    pHlp->pfnPrintf(pHlp, "%su64VmcbCleanBits           = %#RX64\n",    pszPrefix, pVmcbCtrl->u64VmcbCleanBits);
     3663    pHlp->pfnPrintf(pHlp, "%su64NextRIP                 = %#RX64\n",    pszPrefix, pVmcbCtrl->u64NextRIP);
     3664    pHlp->pfnPrintf(pHlp, "%scbInstrFetched             = %u\n",        pszPrefix, pVmcbCtrl->cbInstrFetched);
     3665    pHlp->pfnPrintf(pHlp, "%sabInstr                    = %.*Rhxs\n",   pszPrefix, sizeof(pVmcbCtrl->abInstr), pVmcbCtrl->abInstr);
     3666    pHlp->pfnPrintf(pHlp, "%sAvicBackingPagePtr\n",                     pszPrefix);
     3667    pHlp->pfnPrintf(pHlp, "%s  u40Addr                    = %#RX64\n",  pszPrefix, pVmcbCtrl->AvicBackingPagePtr.n.u40Addr);
     3668    pHlp->pfnPrintf(pHlp, "%sAvicLogicalTablePtr\n",                    pszPrefix);
     3669    pHlp->pfnPrintf(pHlp, "%s  u40Addr                    = %#RX64\n",  pszPrefix, pVmcbCtrl->AvicLogicalTablePtr.n.u40Addr);
     3670    pHlp->pfnPrintf(pHlp, "%sAvicPhysicalTablePtr\n",                   pszPrefix);
     3671    pHlp->pfnPrintf(pHlp, "%s  u8LastGuestCoreId          = %u\n",      pszPrefix, pVmcbCtrl->AvicPhysicalTablePtr.n.u8LastGuestCoreId);
     3672    pHlp->pfnPrintf(pHlp, "%s  u40Addr                    = %#RX64\n",  pszPrefix, pVmcbCtrl->AvicPhysicalTablePtr.n.u40Addr);
     3673}
     3674
  • trunk/src/VBox/VMM/VMMR3/VM.cpp

    r66096 r67529  
    23092309            DBGFR3InfoEx(pVM->pUVM, pVCpu->idCpu, "cpumguest", "verbose", DBGFR3InfoLogRelHlp());
    23102310            RTLogRelPrintf("***\n");
     2311            DBGFR3InfoEx(pVM->pUVM, pVCpu->idCpu, "cpumguesthwvirt", "verbose", DBGFR3InfoLogRelHlp());
     2312            RTLogRelPrintf("***\n");
    23112313            DBGFR3InfoEx(pVM->pUVM, pVCpu->idCpu, "mode", NULL, DBGFR3InfoLogRelHlp());
    23122314            RTLogRelPrintf("***\n");
     
    23412343        RTLogRelPrintf("****************** Guest state at power off for VCpu %u ******************\n", pVCpu->idCpu);
    23422344        DBGFR3InfoEx(pVM->pUVM, pVCpu->idCpu, "cpumguest", "verbose", DBGFR3InfoLogRelHlp());
     2345        RTLogRelPrintf("***\n");
     2346        DBGFR3InfoEx(pVM->pUVM, pVCpu->idCpu, "cpumguesthwvirt", "verbose", DBGFR3InfoLogRelHlp());
    23432347        RTLogRelPrintf("***\n");
    23442348        DBGFR3InfoEx(pVM->pUVM, pVCpu->idCpu, "mode", NULL, DBGFR3InfoLogRelHlp());
  • trunk/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp

    r65650 r67529  
    654654            DBGFR3Info(pVM->pUVM, "cpumguest", NULL, pHlp);
    655655            DBGFR3Info(pVM->pUVM, "cpumguestinstr", NULL, pHlp);
     656            DBGFR3Info(pVM->pUVM, "cpumguesthwvirt", NULL, pHlp);
    656657            break;
    657658        }
     
    675676    } const     aInfo[] =
    676677    {
    677         { "mappings",       NULL },
    678         { "hma",            NULL },
    679         { "cpumguest",      "verbose" },
    680         { "cpumguestinstr", "verbose" },
    681         { "cpumhyper",      "verbose" },
    682         { "cpumhost",       "verbose" },
    683         { "mode",           "all" },
    684         { "cpuid",          "verbose" },
    685         { "handlers",       "phys virt hyper stats" },
    686         { "timers",         NULL },
    687         { "activetimers",   NULL },
     678        { "mappings",        NULL },
     679        { "hma",             NULL },
     680        { "cpumguest",       "verbose" },
     681        { "cpumguesthwvirt", "verbose" },
     682        { "cpumguestinstr",  "verbose" },
     683        { "cpumhyper",       "verbose" },
     684        { "cpumhost",        "verbose" },
     685        { "mode",            "all" },
     686        { "cpuid",           "verbose" },
     687        { "handlers",        "phys virt hyper stats" },
     688        { "timers",          NULL },
     689        { "activetimers",    NULL },
    688690    };
    689691    for (unsigned i = 0; i < RT_ELEMENTS(aInfo); i++)
     
    702704    DBGFR3InfoMulti(pVM,
    703705                    "*",
    704                     "mappings|hma|cpum|cpumguest|cpumguestinstr|cpumhyper|cpumhost|mode|cpuid"
     706                    "mappings|hma|cpum|cpumguest|cpumguesthwvirt|cpumguestinstr|cpumhyper|cpumhost|mode|cpuid"
    705707                    "|pgmpd|pgmcr3|timers|activetimers|handlers|help",
    706708                    "!!\n"
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