VirtualBox

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


Ignore:
Timestamp:
Nov 5, 2008 1:45:41 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
38855
Message:

Pass the VMCPU id to the ring 0 callbacks.

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

Legend:

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

    r13826 r13858  
    10581058 * @returns VBox status code.
    10591059 * @param   pVM     The VM handle.
    1060  */
    1061 static int emR3HwAccStep(PVM pVM)
     1060 * @param   idCpu   VMCPU id.
     1061 */
     1062static int emR3HwAccStep(PVM pVM, RTCPUID idCpu)
    10621063{
    10631064    Assert(pVM->em.s.enmState == EMSTATE_DEBUG_GUEST_HWACC);
     
    10871088    do
    10881089    {
    1089         rc = VMMR3HwAccRunGC(pVM);
     1090        rc = VMMR3HwAccRunGC(pVM, idCpu);
    10901091    } while (   rc == VINF_SUCCESS
    10911092             || rc == VINF_EM_RAW_INTERRUPT);
     
    11271128
    11281129
    1129 void emR3SingleStepExecHwAcc(PVM pVM, uint32_t cIterations)
     1130void emR3SingleStepExecHwAcc(PVM pVM, RTCPUID idCpu, uint32_t cIterations)
    11301131{
    11311132    EMSTATE  enmOldState = pVM->em.s.enmState;
     
    11381139        DBGFR3PrgStep(pVM);
    11391140        DBGFR3DisasInstrCurrentLog(pVM, "RSS: ");
    1140         emR3HwAccStep(pVM);
     1141        emR3HwAccStep(pVM, idCpu);
    11411142    }
    11421143    Log(("Single step END:\n"));
     
    27612762 *
    27622763 * @param   pVM         VM handle.
     2764 * @param   idCpu       VMCPU id.
    27632765 * @param   pfFFDone    Where to store an indicator telling whether or not
    27642766 *                      FFs were done before returning.
    27652767 */
    2766 static int emR3HwAccExecute(PVM pVM, bool *pfFFDone)
     2768static int emR3HwAccExecute(PVM pVM, RTCPUID idCpu, bool *pfFFDone)
    27672769{
    27682770    int      rc = VERR_INTERNAL_ERROR;
    27692771    PCPUMCTX pCtx = pVM->em.s.pCtx;
    27702772
    2771     LogFlow(("emR3HwAccExecute: (cs:eip=%04x:%RGv)\n", pCtx->cs, (RTGCPTR)pCtx->rip));
     2773    LogFlow(("emR3HwAccExecute%d: (cs:eip=%04x:%RGv)\n", idCpu, pCtx->cs, (RTGCPTR)pCtx->rip));
    27722774    *pfFFDone = false;
    27732775
     
    28182820        STAM_PROFILE_START(&pVM->em.s.StatHwAccExec, x);
    28192821        VMMR3Unlock(pVM);
    2820         rc = VMMR3HwAccRunGC(pVM);
     2822        rc = VMMR3HwAccRunGC(pVM, idCpu);
    28212823        VMMR3Lock(pVM);
    28222824        STAM_PROFILE_STOP(&pVM->em.s.StatHwAccExec, x);
     
    32973299 * @returns VBox status code, informational status codes may indicate failure.
    32983300 * @param   pVM         The VM to operate on.
    3299  */
    3300 VMMR3DECL(int) EMR3ExecuteVM(PVM pVM)
     3301 * @param   idCpu       VMCPU id.
     3302 */
     3303VMMR3DECL(int) EMR3ExecuteVM(PVM pVM, RTCPUID idCpu)
    33013304{
    33023305    LogFlow(("EMR3ExecuteVM: pVM=%p enmVMState=%d  enmState=%d (%s) fForceRAW=%d\n", pVM, pVM->enmVMState,
     
    35443547                 */
    35453548                case EMSTATE_HWACC:
    3546                     rc = emR3HwAccExecute(pVM, &fFFDone);
     3549                    rc = emR3HwAccExecute(pVM, idCpu, &fFFDone);
    35473550                    break;
    35483551
  • trunk/src/VBox/VMM/VM.cpp

    r13823 r13858  
    401401    {
    402402        pUVM->aCpus[i].pUVM  = pUVM;
    403         pUVM->aCpus[i].idCPU = i;
     403        pUVM->aCpus[i].idCpu = i;
    404404    }
    405405
     
    31903190
    31913191    AssertMsg(pUVMCPU, ("RTTlsGet %d failed!\n", pVM->pUVM->vm.s.idxTLS));
    3192     return pUVMCPU->idCPU;
     3192    return pUVMCPU->idCpu;
    31933193}
    31943194
  • trunk/src/VBox/VMM/VMEmt.cpp

    r13818 r13858  
    5656    PUVMCPU pUVMCPU = (PUVMCPU)pvArgs;
    5757    PUVM    pUVM    = pUVMCPU->pUVM;
    58     RTCPUID idCPU   = pUVMCPU->idCPU;
     58    RTCPUID idCpu   = pUVMCPU->idCpu;
    5959    int     rc;
    6060
     
    184184        {
    185185            PVM pVM = pUVM->pVM;
    186             rc = EMR3ExecuteVM(pVM);
     186            rc = EMR3ExecuteVM(pVM, idCpu);
    187187            Log(("vmR3EmulationThread: EMR3ExecuteVM() -> rc=%Rrc, enmVMState=%d\n", rc, pVM->enmVMState));
    188188            if (   EMGetState(pVM) == EMSTATE_GURU_MEDITATION
  • trunk/src/VBox/VMM/VMM.cpp

    r13823 r13858  
    10701070            rc = VERR_GENERAL_FAILURE;
    10711071#else
    1072             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     1072            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    10731073            if (RT_LIKELY(rc == VINF_SUCCESS))
    10741074                rc = pVM->vmm.s.iLastGZRc;
     
    11071107 *
    11081108 * @param   pVM         VM handle.
    1109  */
    1110 VMMR3DECL(int) VMMR3HwAccRunGC(PVM pVM)
     1109 * @param   idCpu       VMCPU id.
     1110 */
     1111VMMR3DECL(int) VMMR3HwAccRunGC(PVM pVM, RTCPUID idCpu)
    11111112{
    11121113    Log2(("VMMR3HwAccRunGC: (cs:eip=%04x:%08x)\n", CPUMGetGuestCS(pVM), CPUMGetGuestEIP(pVM)));
     
    11201121            rc = VERR_GENERAL_FAILURE;
    11211122#else
    1122             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_HWACC_RUN);
     1123            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_HWACC_RUN, idCpu);
    11231124            if (RT_LIKELY(rc == VINF_SUCCESS))
    11241125                rc = pVM->vmm.s.iLastGZRc;
     
    12041205            rc = VERR_GENERAL_FAILURE;
    12051206#else
    1206             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     1207            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    12071208            if (RT_LIKELY(rc == VINF_SUCCESS))
    12081209                rc = pVM->vmm.s.iLastGZRc;
     
    12601261            rc = VERR_GENERAL_FAILURE;
    12611262#else
    1262             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     1263            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    12631264            if (RT_LIKELY(rc == VINF_SUCCESS))
    12641265                rc = pVM->vmm.s.iLastGZRc;
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r13818 r13858  
    566566 * @param   pVM             The VM to operate on.
    567567 *                          The return code is stored in pVM->vmm.s.iLastGZRc.
     568 * @param   idCPU           VMCPU id.
    568569 * @param   enmOperation    Which operation to execute.
    569570 * @remarks Assume called with interrupts _enabled_.
    570571 */
    571 VMMR0DECL(void) VMMR0EntryFast(PVM pVM, VMMR0OPERATION enmOperation)
     572VMMR0DECL(void) VMMR0EntryFast(PVM pVM, unsigned idCPU, VMMR0OPERATION enmOperation)
    572573{
    573574    switch (enmOperation)
     
    620621
    621622            STAM_COUNTER_INC(&pVM->vmm.s.StatRunRC);
     623
     624            if (idCPU >= pVM->cCPUs)
     625            {
     626                pVM->vmm.s.iLastGZRc = VERR_INVALID_PARAMETER;
     627                return;
     628            }
    622629
    623630#ifndef RT_OS_WINDOWS /** @todo check other hosts */
  • trunk/src/VBox/VMM/VMMTests.cpp

    r13830 r13858  
    7070    CPUMPushHyper(pVM, RCPtrEP);                /* what to call */
    7171    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
    72     rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     72    rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    7373    if (RT_LIKELY(rc == VINF_SUCCESS))
    7474        rc = pVM->vmm.s.iLastGZRc;
     
    107107    CPUMPushHyper(pVM, RCPtrEP);                /* what to call */
    108108    CPUMSetHyperEIP(pVM, pVM->vmm.s.pfnCallTrampolineRC);
    109     rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     109    rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    110110    if (RT_LIKELY(rc == VINF_SUCCESS))
    111111        rc = pVM->vmm.s.iLastGZRc;
     
    352352        do
    353353        {
    354             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     354            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    355355            if (RT_LIKELY(rc == VINF_SUCCESS))
    356356                rc = pVM->vmm.s.iLastGZRc;
     
    405405
    406406            uint64_t TickThisStart = ASMReadTSC();
    407             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN);
     407            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_RAW_RUN, 0);
    408408            if (RT_LIKELY(rc == VINF_SUCCESS))
    409409                rc = pVM->vmm.s.iLastGZRc;
     
    542542
    543543            uint64_t TickThisStart = ASMReadTSC();
    544             rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_HWACC_RUN);
     544            rc = SUPCallVMMR0Fast(pVM->pVMR0, VMMR0_DO_HWACC_RUN, 0);
    545545            uint64_t TickThisElapsed = ASMReadTSC() - TickThisStart;
    546546            if (RT_FAILURE(rc))
  • trunk/src/VBox/VMM/VMReq.cpp

    r13818 r13858  
    629629        {
    630630            if (   !pUVMCPU
    631                 ||  pUVMCPU->idCPU != i)
     631                ||  pUVMCPU->idCpu != i)
    632632            {
    633633                /*
     
    671671    else
    672672    if (    pReq->enmDest  != VMREQDEST_ANY  /* for a specific VMCPU? */
    673         &&  pUVMCPU->idCPU != (unsigned)pReq->enmDest)
     673        &&  pUVMCPU->idCpu != (unsigned)pReq->enmDest)
    674674    {
    675675        RTCPUID  idTarget = (RTCPUID)pReq->enmDest;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette