VirtualBox

Changeset 45517 in vbox for trunk


Ignore:
Timestamp:
Apr 12, 2013 11:23:56 AM (12 years ago)
Author:
vboxsync
Message:

VMM: Clean up STAM counters and hungarian fixes.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r45513 r45517  
    997997
    998998    uint64_t descriptor[2];
    999     descriptor[0] = pVCpu->hm.s.vmx.GCPhysEPTP;
     999    descriptor[0] = pVCpu->hm.s.vmx.HCPhysEPTP;
    10001000    descriptor[1] = 0;                           /* MBZ. Intel spec. 33.3 "VMX Instructions" */
    10011001
    10021002    int rc = VMXR0InvEPT(enmFlush, &descriptor[0]);
    1003     AssertMsg(rc == VINF_SUCCESS, ("VMXR0InvEPT %#x %RGv failed with %Rrc\n", enmFlush, pVCpu->hm.s.vmx.GCPhysEPTP, rc));
     1003    AssertMsg(rc == VINF_SUCCESS, ("VMXR0InvEPT %#x %RGv failed with %Rrc\n", enmFlush, pVCpu->hm.s.vmx.HCPhysEPTP, rc));
    10041004    STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushNestedPaging);
    10051005}
     
    28132813        if (pVM->hm.s.fNestedPaging)
    28142814        {
    2815             pVCpu->hm.s.vmx.GCPhysEPTP = PGMGetHyperCR3(pVCpu);
     2815            pVCpu->hm.s.vmx.HCPhysEPTP = PGMGetHyperCR3(pVCpu);
    28162816
    28172817            /* Validate. See Intel spec. 28.2.2 "EPT Translation Mechanism" and 24.6.11 "Extended-Page-Table Pointer (EPTP)" */
    2818             Assert(pVCpu->hm.s.vmx.GCPhysEPTP);
    2819             Assert(!(pVCpu->hm.s.vmx.GCPhysEPTP & 0xfff0000000000000ULL));
    2820             Assert(!(pVCpu->hm.s.vmx.GCPhysEPTP & 0xfff));
     2818            Assert(pVCpu->hm.s.vmx.HCPhysEPTP);
     2819            Assert(!(pVCpu->hm.s.vmx.HCPhysEPTP & 0xfff0000000000000ULL));
     2820            Assert(!(pVCpu->hm.s.vmx.HCPhysEPTP & 0xfff));
    28212821
    28222822            /* VMX_EPT_MEMTYPE_WB support is already checked in hmR0VmxSetupTaggedTlb(). */
    2823             pVCpu->hm.s.vmx.GCPhysEPTP |=  VMX_EPT_MEMTYPE_WB
     2823            pVCpu->hm.s.vmx.HCPhysEPTP |=  VMX_EPT_MEMTYPE_WB
    28242824                                         | (VMX_EPT_PAGE_WALK_LENGTH_DEFAULT << VMX_EPT_PAGE_WALK_LENGTH_SHIFT);
    28252825
    28262826            /* Validate. See Intel spec. 26.2.1 "Checks on VMX Controls" */
    2827             AssertMsg(   ((pVCpu->hm.s.vmx.GCPhysEPTP >> 3) & 0x07) == 3      /* Bits 3:5 (EPT page walk length - 1) must be 3. */
    2828                       && ((pVCpu->hm.s.vmx.GCPhysEPTP >> 6) & 0x3f) == 0,     /* Bits 6:11 MBZ. */
    2829                          ("EPTP %#RX64\n", pVCpu->hm.s.vmx.GCPhysEPTP));
    2830 
    2831             rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, pVCpu->hm.s.vmx.GCPhysEPTP);
     2827            AssertMsg(   ((pVCpu->hm.s.vmx.HCPhysEPTP >> 3) & 0x07) == 3      /* Bits 3:5 (EPT page walk length - 1) must be 3. */
     2828                      && ((pVCpu->hm.s.vmx.HCPhysEPTP >> 6) & 0x3f) == 0,     /* Bits 6:11 MBZ. */
     2829                         ("EPTP %#RX64\n", pVCpu->hm.s.vmx.HCPhysEPTP));
     2830
     2831            rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, pVCpu->hm.s.vmx.HCPhysEPTP);
    28322832            AssertRCReturn(rc, rc);
    2833             Log(("VMX_VMCS64_CTRL_EPTP_FULL=%#RX64\n", pVCpu->hm.s.vmx.GCPhysEPTP));
     2833            Log(("VMX_VMCS64_CTRL_EPTP_FULL=%#RX64\n", pVCpu->hm.s.vmx.HCPhysEPTP));
    28342834
    28352835            if (   pVM->hm.s.vmx.fUnrestrictedGuest
     
    76607660{
    76617661    VMX_VALIDATE_EXIT_HANDLER_PARAMS();
     7662    STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitMovCRx, y2);
    76627663    int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient);
    76637664    AssertRCReturn(rc, rc);
     
    77667767        {
    77677768            AssertMsgFailed(("Invalid access-type in Mov CRx exit qualification %#x\n", uAccessType));
    7768             return VERR_VMX_UNEXPECTED_EXCEPTION;
     7769            rc = VERR_VMX_UNEXPECTED_EXCEPTION;
    77697770        }
    77707771    }
    77717772
    77727773    /* Validate possible error codes. */
    7773     Assert(rc == VINF_SUCCESS || rc == VINF_PGM_CHANGE_MODE || rc == VERR_EM_INTERPRETER || rc == VINF_PGM_SYNC_CR3);
     7774    Assert(rc == VINF_SUCCESS || rc == VINF_PGM_CHANGE_MODE || rc == VERR_EM_INTERPRETER || rc == VINF_PGM_SYNC_CR3
     7775           || rc == VERR_VMX_UNEXPECTED_EXCEPTION);
    77747776    if (RT_SUCCESS(rc))
    77757777    {
     
    77787780    }
    77797781
     7782    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitMovCRx, y2);
    77807783    return rc;
    77817784}
     
    77897792{
    77907793    VMX_VALIDATE_EXIT_HANDLER_PARAMS();
     7794    STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitIO, y1);
    77917795
    77927796    int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient);
     
    79487952#endif
    79497953
     7954    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitIO, y1);
    79507955    return rc;
    79517956}
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r45503 r45517  
    22162216        {
    22172217            Assert(PGMGetHyperCR3(pVCpu));
    2218             pVCpu->hm.s.vmx.GCPhysEPTP = PGMGetHyperCR3(pVCpu);
    2219 
    2220             Assert(!(pVCpu->hm.s.vmx.GCPhysEPTP & 0xfff));
     2218            pVCpu->hm.s.vmx.HCPhysEPTP = PGMGetHyperCR3(pVCpu);
     2219
     2220            Assert(!(pVCpu->hm.s.vmx.HCPhysEPTP & 0xfff));
    22212221            /** @todo Check the IA32_VMX_EPT_VPID_CAP MSR for other supported memory types. */
    2222             pVCpu->hm.s.vmx.GCPhysEPTP |=   VMX_EPT_MEMTYPE_WB
     2222            pVCpu->hm.s.vmx.HCPhysEPTP |=   VMX_EPT_MEMTYPE_WB
    22232223                                             | (VMX_EPT_PAGE_WALK_LENGTH_DEFAULT << VMX_EPT_PAGE_WALK_LENGTH_SHIFT);
    22242224
    2225             rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, pVCpu->hm.s.vmx.GCPhysEPTP);
     2225            rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, pVCpu->hm.s.vmx.HCPhysEPTP);
    22262226            AssertRC(rc);
    22272227
     
    35313531            break;
    35323532        }
    3533         STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExit2Sub3, y3);
     3533        STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitXcptNmi, y3);
    35343534        switch (VMX_EXIT_INTERRUPTION_INFO_TYPE(intInfo))
    35353535        {
     
    35673567                    pVCpu->hm.s.fContextUseFlags |= HM_CHANGED_GUEST_CR0;
    35683568
    3569                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3569                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    35703570                    goto ResumeExecution;
    35713571                }
     
    35763576                                         cbInstr, 0);
    35773577                AssertRC(rc2);
    3578                 STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3578                STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    35793579                goto ResumeExecution;
    35803580            }
     
    36013601                    AssertRC(rc2);
    36023602
    3603                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3603                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    36043604                    goto ResumeExecution;
    36053605                }
     
    36743674
    36753675                    TRPMResetTrap(pVCpu);
    3676                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3676                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    36773677                    goto ResumeExecution;
    36783678                }
     
    36963696                    AssertRC(rc2);
    36973697
    3698                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3698                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    36993699                    goto ResumeExecution;
    37003700                }
     
    37273727                AssertRC(rc2);
    37283728
    3729                 STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3729                STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    37303730                goto ResumeExecution;
    37313731            }
     
    37793779                    AssertRC(rc2);
    37803780
    3781                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3781                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    37823782                    goto ResumeExecution;
    37833783                }
     
    37973797                                             cbInstr, errCode);
    37983798                    AssertRC(rc2);
    3799                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3799                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    38003800                    goto ResumeExecution;
    38013801                }
    38023802                if (rc == VINF_SUCCESS)
    38033803                {
    3804                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3804                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    38053805                    goto ResumeExecution;
    38063806                }
     
    38233823                                             cbInstr, errCode);
    38243824                    AssertRC(rc2);
    3825                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     3825                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    38263826                    goto ResumeExecution;
    38273827                }
     
    40554055
    40564056                        /* Only resume if successful. */
    4057                         STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     4057                        STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    40584058                        goto ResumeExecution;
    40594059                    }
     
    40884088                AssertRC(rc2);
    40894089
    4090                 STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     4090                STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    40914091                goto ResumeExecution;
    40924092            }
     
    41094109                    }
    41104110
    4111                     STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     4111                    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    41124112                    goto ResumeExecution;
    41134113                }
     
    41254125        }
    41264126
    4127         STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub3, y3);
     4127        STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitXcptNmi, y3);
    41284128        break;
    41294129    }
     
    44164416    case VMX_EXIT_MOV_CRX:             /* 28 Control-register accesses. */
    44174417    {
    4418         STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExit2Sub2, y2);
     4418        STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitMovCRx, y2);
    44194419
    44204420        switch (VMX_EXIT_QUALIFICATION_CRX_ACCESS(exitQualification))
     
    44994499        {
    45004500            /* Only resume if successful. */
    4501             STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub2, y2);
     4501            STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitMovCRx, y2);
    45024502            goto ResumeExecution;
    45034503        }
    45044504        Assert(rc == VERR_EM_INTERPRETER || rc == VINF_PGM_CHANGE_MODE || rc == VINF_PGM_SYNC_CR3);
    4505         STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub2, y2);
     4505        STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitMovCRx, y2);
    45064506        break;
    45074507    }
     
    45794579    case VMX_EXIT_IO_INSTR:              /* 30 I/O instruction. */
    45804580    {
    4581         STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExit2Sub1, y1);
     4581        STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitIO, y1);
    45824582        uint32_t uPort;
    45834583        uint32_t uIOWidth = VMX_EXIT_QUALIFICATION_IO_WIDTH(exitQualification);
     
    45934593        {
    45944594            rc = fIOWrite ? VINF_IOM_R3_IOPORT_WRITE : VINF_IOM_R3_IOPORT_READ;
    4595             STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub1, y1);
     4595            STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitIO, y1);
    45964596            break;
    45974597        }
     
    47204720                            AssertRC(rc2);
    47214721
    4722                             STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub1, y1);
     4722                            STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitIO, y1);
    47234723                            goto ResumeExecution;
    47244724                        }
    47254725                    }
    47264726                }
    4727                 STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub1, y1);
     4727                STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitIO, y1);
    47284728                goto ResumeExecution;
    47294729            }
    4730             STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub1, y1);
     4730            STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitIO, y1);
    47314731            break;
    47324732        }
     
    47454745        }
    47464746#endif
    4747         STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExit2Sub1, y1);
     4747        STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatExitIO, y1);
    47484748        break;
    47494749    }
     
    51525152    LogFlow(("hmR0VmxFlushEPT %d\n", enmFlush));
    51535153    Assert(pVM->hm.s.fNestedPaging);
    5154     descriptor[0] = pVCpu->hm.s.vmx.GCPhysEPTP;
     5154    descriptor[0] = pVCpu->hm.s.vmx.HCPhysEPTP;
    51555155    descriptor[1] = 0; /* MBZ. Intel spec. 33.3 VMX Instructions */
    51565156    int rc = VMXR0InvEPT(enmFlush, &descriptor[0]);
    5157     AssertMsg(rc == VINF_SUCCESS, ("VMXR0InvEPT %x %RGv failed with %d\n", enmFlush, pVCpu->hm.s.vmx.GCPhysEPTP, rc));
     5157    AssertMsg(rc == VINF_SUCCESS, ("VMXR0InvEPT %x %RGv failed with %d\n", enmFlush, pVCpu->hm.s.vmx.HCPhysEPTP, rc));
    51585158#ifdef VBOX_WITH_STATISTICS
    51595159    STAM_COUNTER_INC(&pVCpu->hm.s.StatFlushNestedPaging);
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r45500 r45517  
    495495                             "/PROF/CPU%d/HM/SwitchFromGC_2", i);
    496496        AssertRC(rc);
    497 # ifdef VBOX_WITH_OLD_VTX_CODE
    498         /* temporary for tracking down darwin holdup. */
    499         rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExit2Sub1, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
    500                              "Temporary - I/O",
    501                              "/PROF/CPU%d/HM/SwitchFromGC_2/Sub1", i);
     497
     498        rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExitIO, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
     499                             "I/O",
     500                             "/PROF/CPU%d/HM/SwitchFromGC_2/IO", i);
    502501        AssertRC(rc);
    503         rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExit2Sub2, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
    504                              "Temporary - CRx RWs",
    505                              "/PROF/CPU%d/HM/SwitchFromGC_2/Sub2", i);
     502        rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExitMovCRx, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
     503                             "MOV CRx",
     504                             "/PROF/CPU%d/HM/SwitchFromGC_2/MovCRx", i);
    506505        AssertRC(rc);
    507         rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExit2Sub3, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
    508                              "Temporary - Exceptions",
    509                              "/PROF/CPU%d/HM/SwitchFromGC_2/Sub3", i);
     506        rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatExitXcptNmi, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
     507                             "Exceptions, NMIs",
     508                             "/PROF/CPU%d/HM/SwitchFromGC_2/XcptNmi", i);
    510509        AssertRC(rc);
    511 # endif
     510
    512511        rc = STAMR3RegisterF(pVM, &pVCpu->hm.s.StatLoadGuestState, STAMTYPE_PROFILE, STAMVISIBILITY_USED, STAMUNIT_TICKS_PER_CALL,
    513512                             "Profiling of VMXR0LoadGuestState",
  • trunk/src/VBox/VMM/include/HMInternal.h

    r45503 r45517  
    628628        uint32_t                    fUpdatedGuestState;
    629629        /** Current EPTP. */
    630         RTHCPHYS                    GCPhysEPTP;
     630        RTHCPHYS                    HCPhysEPTP;
    631631
    632632        /** Physical address of the MSR bitmap. */
     
    793793    STAMPROFILEADV          StatExit1;
    794794    STAMPROFILEADV          StatExit2;
    795 #ifdef VBOX_WITH_OLD_VTX_CODE /* "temporary" for tracking down darwin issues. */
    796     STAMPROFILEADV          StatExit2Sub1;
    797     STAMPROFILEADV          StatExit2Sub2;
    798     STAMPROFILEADV          StatExit2Sub3;
    799 #endif
     795    STAMPROFILEADV          StatExitIO;
     796    STAMPROFILEADV          StatExitMovCRx;
     797    STAMPROFILEADV          StatExitXcptNmi;
    800798    STAMPROFILEADV          StatLoadGuestState;
    801799    STAMPROFILEADV          StatInGC;
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