VirtualBox

Changeset 19434 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
May 6, 2009 1:58:35 PM (16 years ago)
Author:
vboxsync
Message:

Further splitup of VMM (ring 0 jump buffer).

File:
1 edited

Legend:

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

    r19406 r19434  
    308308VMMR0DECL(int) VMMR0CallHost(PVM pVM, VMMCALLHOST enmOperation, uint64_t uArg)
    309309{
     310    PVMCPU pVCpu = VMMGetCpu(pVM);
     311
    310312/** @todo profile this! */
    311     pVM->vmm.s.enmCallHostOperation = enmOperation;
    312     pVM->vmm.s.u64CallHostArg = uArg;
    313     pVM->vmm.s.rcCallHost = VERR_INTERNAL_ERROR;
    314     int rc = vmmR0CallHostLongJmp(&pVM->vmm.s.CallHostR0JmpBuf, VINF_VMM_CALL_HOST);
     313    pVCpu->vmm.s.enmCallHostOperation = enmOperation;
     314    pVCpu->vmm.s.u64CallHostArg = uArg;
     315    pVCpu->vmm.s.rcCallHost = VERR_INTERNAL_ERROR;
     316    int rc = vmmR0CallHostLongJmp(&pVCpu->vmm.s.CallHostR0JmpBuf, VINF_VMM_CALL_HOST);
    315317    if (rc == VINF_SUCCESS)
    316         rc = pVM->vmm.s.rcCallHost;
     318        rc = pVCpu->vmm.s.rcCallHost;
    317319    return rc;
    318320}
     
    323325 * Record return code statistics
    324326 * @param   pVM         The VM handle.
     327 * @param   pVCpu       The VMCPU handle.
    325328 * @param   rc          The status code.
    326329 */
    327 static void vmmR0RecordRC(PVM pVM, int rc)
     330static void vmmR0RecordRC(PVM pVM, PVMCPU pVCpu, int rc)
    328331{
    329332    /*
     
    438441            break;
    439442        case VINF_VMM_CALL_HOST:
    440             switch (pVM->vmm.s.enmCallHostOperation)
     443            switch (pVCpu->vmm.s.enmCallHostOperation)
    441444            {
    442445                case VMMCALLHOST_PDM_LOCK:
     
    590593#ifdef VBOX_WITH_STATISTICS
    591594                STAM_COUNTER_INC(&pVM->vmm.s.StatRunRC);
    592                 vmmR0RecordRC(pVM, rc);
     595                vmmR0RecordRC(pVM, pVCpu, rc);
    593596#endif
    594597            }
     
    623626                if (RT_SUCCESS(rc))
    624627                {
    625                     rc = vmmR0CallHostSetJmp(&pVM->vmm.s.CallHostR0JmpBuf, HWACCMR0RunGuestCode, pVM, pVCpu); /* this may resume code. */
     628                    rc = vmmR0CallHostSetJmp(&pVCpu->vmm.s.CallHostR0JmpBuf, HWACCMR0RunGuestCode, pVM, pVCpu); /* this may resume code. */
    626629                    int rc2 = HWACCMR0Leave(pVM, pVCpu);
    627630                    AssertRC(rc2);
     
    639642
    640643#ifdef VBOX_WITH_STATISTICS
    641             vmmR0RecordRC(pVM, rc);
     644            vmmR0RecordRC(pVM, pVCpu, rc);
    642645#endif
    643646            /* No special action required for external interrupts, just return. */
     
    10841087            case VMMR0_DO_VMMR0_TERM:
    10851088            {
    1086                 if (!pVM->vmm.s.CallHostR0JmpBuf.pvSavedStack)
     1089                PVMCPU pVCpu = &pVM->aCpus[idCpu];
     1090
     1091                if (!pVCpu->vmm.s.CallHostR0JmpBuf.pvSavedStack)
    10871092                    break;
    10881093
     
    10951100                Args.u64Arg = u64Arg;
    10961101                Args.pSession = pSession;
    1097                 return vmmR0CallHostSetJmpEx(&pVM->vmm.s.CallHostR0JmpBuf, vmmR0EntryExWrapper, &Args);
     1102                return vmmR0CallHostSetJmpEx(&pVCpu->vmm.s.CallHostR0JmpBuf, vmmR0EntryExWrapper, &Args);
    10981103            }
    10991104
     
    11411146    }
    11421147
     1148    PVMCPU pVCpu = VMMGetCpu(pVM);
     1149
    11431150    /*
    11441151     * Check that the jump buffer is armed.
    11451152     */
    11461153#ifdef RT_ARCH_X86
    1147     if (    !pVM->vmm.s.CallHostR0JmpBuf.eip
    1148         ||  pVM->vmm.s.CallHostR0JmpBuf.fInRing3Call)
     1154    if (    !pVCpu->vmm.s.CallHostR0JmpBuf.eip
     1155        ||  pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call)
    11491156#else
    1150     if (    !pVM->vmm.s.CallHostR0JmpBuf.rip
    1151         ||  pVM->vmm.s.CallHostR0JmpBuf.fInRing3Call)
     1157    if (    !pVCpu->vmm.s.CallHostR0JmpBuf.rip
     1158        ||  pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call)
    11521159#endif
    11531160    {
     
    12001207    if (pVM)
    12011208    {
     1209        PVMCPU pVCpu = VMMGetCpu(pVM);
     1210
    12021211#ifdef RT_ARCH_X86
    1203         if (    pVM->vmm.s.CallHostR0JmpBuf.eip
    1204             &&  !pVM->vmm.s.CallHostR0JmpBuf.fInRing3Call)
     1212        if (    pVCpu->vmm.s.CallHostR0JmpBuf.eip
     1213            &&  !pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call)
    12051214#else
    1206         if (    pVM->vmm.s.CallHostR0JmpBuf.rip
    1207             &&  !pVM->vmm.s.CallHostR0JmpBuf.fInRing3Call)
     1215        if (    pVCpu->vmm.s.CallHostR0JmpBuf.rip
     1216            &&  !pVCpu->vmm.s.CallHostR0JmpBuf.fInRing3Call)
    12081217#endif
    12091218        {
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