VirtualBox

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


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

EMSTATE_WAIT_SIPI changes

File:
1 edited

Legend:

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

    r19424 r19426  
    162162        pVCpu->em.s.offVMCPU = RT_OFFSETOF(VMCPU, em.s);
    163163
    164         pVCpu->em.s.enmState     = EMSTATE_NONE;
     164        pVCpu->em.s.enmState     = (i == 0) ? EMSTATE_NONE : EMSTATE_WAIT_SIPI;
    165165        pVCpu->em.s.fForceRAW    = false;
    166166
     
    634634        case EMSTATE_PARAV:             return "EMSTATE_PARAV";
    635635        case EMSTATE_HALTED:            return "EMSTATE_HALTED";
     636        case EMSTATE_WAIT_SIPI:         return "EMSTATE_WAIT_SIPI";
    636637        case EMSTATE_SUSPENDED:         return "EMSTATE_SUSPENDED";
    637638        case EMSTATE_TERMINATING:       return "EMSTATE_TERMINATING";
     
    31033104        return EMSTATE_RAW;
    31043105
     3106    /*
     3107     * We stay in the wait for SIPI state unless explicitly told otherwise.
     3108     */
     3109    if (pVCpu->em.s.enmState == EMSTATE_WAIT_SIPI)
     3110        return EMSTATE_WAIT_SIPI;
     3111
    31053112    /* !!! THIS MUST BE IN SYNC WITH remR3CanExecuteRaw !!! */
    31063113    /* !!! THIS MUST BE IN SYNC WITH remR3CanExecuteRaw !!! */
     
    35883595             pVCpu->em.s.enmState, EMR3GetStateName(pVCpu->em.s.enmState), pVCpu->em.s.fForceRAW));
    35893596    VM_ASSERT_EMT(pVM);
    3590     Assert(pVCpu->em.s.enmState == EMSTATE_NONE || pVCpu->em.s.enmState == EMSTATE_SUSPENDED);
     3597    Assert(pVCpu->em.s.enmState == EMSTATE_NONE || pVCpu->em.s.enmState == EMSTATE_WAIT_SIPI || pVCpu->em.s.enmState == EMSTATE_SUSPENDED);
    35913598
    35923599    int rc = setjmp(pVCpu->em.s.u.FatalLongJump);
     
    37313738                    else
    37323739                    {
    3733                         /* All other VCPUs go into the halted state until woken up again. */
    3734                         pVCpu->em.s.enmState = EMSTATE_HALTED;
     3740                        /* All other VCPUs go into the wait for SIPI state. */
     3741                        pVCpu->em.s.enmState = EMSTATE_WAIT_SIPI;
    37353742                    }
    37363743                    break;
     
    38803887
    38813888                /*
     3889                 * Application processor execution halted until SIPI.
     3890                 */
     3891                case EMSTATE_WAIT_SIPI:
     3892                    Assert(!(CPUMGetGuestEFlags(pVCpu) & X86_EFL_IF));
     3893                    /* no break */
     3894                /*
    38823895                 * hlt - execution halted until interrupt.
    38833896                 */
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