VirtualBox

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


Ignore:
Timestamp:
May 6, 2013 4:01:47 PM (12 years ago)
Author:
vboxsync
Message:

HM: Added VMX entry refused/allowed stats.

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

Legend:

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

    r45916 r45919  
    731731        HM_REG_COUNTER(&pVCpu->hm.s.StatLoadFull,               "/HM/CPU%d/Load/Full", "VM-entry loading more of the state.");
    732732
     733        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadRmSelBase,   "/HM/CPU%d/VMXCheck/RMSelBase", "Could not use VMX due to unsuitable real-mode selector base.");
     734        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadRmSelLimit,  "/HM/CPU%d/VMXCheck/RMSelLimit", "Could not use VMX due to unsuitable real-mode selector limit.");
     735        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckRmOk,           "/HM/CPU%d/VMXCheck/VMX_RM", "VMX execution in real (V86) mode OK.");
     736
     737        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadSel,         "/HM/CPU%d/VMXCheck/Selector", "Could not use VMX due to unsuitable selector.");
     738        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadRpl,         "/HM/CPU%d/VMXCheck/RPL", "Could not use VMX due to unsuitable RPL.");
     739        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadLdt,         "/HM/CPU%d/VMXCheck/LDT", "Could not use VMX due to unsuitable LDT.");
     740        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckBadTr,          "/HM/CPU%d/VMXCheck/TR", "Could not use VMX due to unsuitable TR.");
     741        HM_REG_COUNTER(&pVCpu->hm.s.StatVmxCheckPmOk,           "/HM/CPU%d/VMXCheck/VMX_PM", "VMX execution in protected mode OK.");
     742
    733743#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) && !defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
    734744        HM_REG_COUNTER(&pVCpu->hm.s.StatFpu64SwitchBack,        "/HM/CPU%d/Switch64/Fpu", "Saving guest FPU/XMM state.");
     
    25252535                    || pCtx->ss.Sel != (pCtx->ss.u64Base >> 4)
    25262536                    || pCtx->fs.Sel != (pCtx->fs.u64Base >> 4)
    2527                     || pCtx->gs.Sel != (pCtx->gs.u64Base >> 4)
    2528                     || (pCtx->cs.u32Limit != 0xffff)
     2537                    || pCtx->gs.Sel != (pCtx->gs.u64Base >> 4))
     2538                {
     2539                    STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadRmSelBase);
     2540                    return false;
     2541                }
     2542                if (   (pCtx->cs.u32Limit != 0xffff)
    25292543                    || (pCtx->ds.u32Limit != 0xffff)
    25302544                    || (pCtx->es.u32Limit != 0xffff)
     
    25332547                    || (pCtx->gs.u32Limit != 0xffff))
    25342548                {
     2549                    STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadRmSelLimit);
    25352550                    return false;
    25362551                }
     2552                STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckRmOk);
    25372553            }
    25382554            else
     
    25572573                        || (pCtx->gs.Sel & X86_SEL_RPL)
    25582574                        || (pCtx->ss.Sel & X86_SEL_RPL))
     2575                    {                       
     2576                        STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadSel);
     2577                        return false;
     2578                    }
    25592579#else
    2560                     if (   ((pCtx->cs.Sel & X86_SEL_RPL) != (pCtx->ss.Sel & X86_SEL_RPL))
    2561                         || !hmR3IsCodeSelectorOkForVmx(&pCtx->cs, pCtx->ss.Attr.n.u2Dpl)
     2580                    if ((pCtx->cs.Sel & X86_SEL_RPL) != (pCtx->ss.Sel & X86_SEL_RPL))
     2581                    {
     2582                        STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadRpl);
     2583                        return false;
     2584                    }
     2585                    if (   !hmR3IsCodeSelectorOkForVmx(&pCtx->cs, pCtx->ss.Attr.n.u2Dpl)
    25622586                        || !hmR3IsDataSelectorOkForVmx(&pCtx->ds)
    25632587                        || !hmR3IsDataSelectorOkForVmx(&pCtx->es)
     
    25652589                        || !hmR3IsDataSelectorOkForVmx(&pCtx->gs)
    25662590                        || !hmR3IsStackSelectorOkForVmx(&pCtx->ss))
     2591                    {                       
     2592                        STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadSel);
     2593                        return false;
     2594                    }
    25672595#endif
     2596                }
     2597                /* VT-x also chokes on invalid tr or ldtr selectors (minix) */
     2598                if (pCtx->gdtr.cbGdt)
     2599                {
     2600                    if (pCtx->tr.Sel > pCtx->gdtr.cbGdt)
    25682601                    {
     2602                        STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadTr);
     2603                        return false;
     2604                    }
     2605                    else if (pCtx->ldtr.Sel > pCtx->gdtr.cbGdt)
     2606                    {
     2607                        STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckBadLdt);
    25692608                        return false;
    25702609                    }
    25712610                }
    2572                 /* VT-x also chokes on invalid tr or ldtr selectors (minix) */
    2573                 if (    pCtx->gdtr.cbGdt
    2574                     &&  (   pCtx->tr.Sel > pCtx->gdtr.cbGdt
    2575                          || pCtx->ldtr.Sel > pCtx->gdtr.cbGdt))
    2576                 {
    2577                         return false;
    2578                 }
     2611                STAM_COUNTER_INC(&pVCpu->hm.s.StatVmxCheckPmOk);
    25792612            }
    25802613        }
  • trunk/src/VBox/VMM/include/HMInternal.h

    r45845 r45919  
    885885    STAMCOUNTER             StatLoadFull;
    886886
     887    STAMCOUNTER             StatVmxCheckBadRmSelBase;
     888    STAMCOUNTER             StatVmxCheckBadRmSelLimit;
     889    STAMCOUNTER             StatVmxCheckRmOk;
     890
     891    STAMCOUNTER             StatVmxCheckBadSel;
     892    STAMCOUNTER             StatVmxCheckBadRpl;
     893    STAMCOUNTER             StatVmxCheckBadLdt;
     894    STAMCOUNTER             StatVmxCheckBadTr;
     895    STAMCOUNTER             StatVmxCheckPmOk;
     896
    887897#if HC_ARCH_BITS == 32 && defined(VBOX_ENABLE_64_BITS_GUESTS) && !defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
    888898    STAMCOUNTER             StatFpu64SwitchBack;
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