VirtualBox

Changeset 73050 in vbox for trunk


Ignore:
Timestamp:
Jul 11, 2018 2:48:27 AM (7 years ago)
Author:
vboxsync
Message:

VMM/HMSVMR0: bugref:9204 Fix hlt.

File:
1 edited

Legend:

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

    r73049 r73050  
    63836383    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    63846384
    6385     hmR0SvmAdvanceRipHwAssist(pVCpu, 1);
    6386     int rc = EMShouldContinueAfterHalt(pVCpu, &pVCpu->cpum.GstCtx) ? VINF_SUCCESS : VINF_EM_HALT;
    6387     HMSVM_CHECK_SINGLE_STEP(pVCpu, rc);
    6388 
    6389     STAM_COUNTER_INC(&pVCpu->hm.s.StatExitHlt);
    6390     if (rc != VINF_SUCCESS)
    6391         STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchHltToR3);
    6392     return rc;
     6385    VBOXSTRICTRC rcStrict;
     6386    bool const fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     6387    if (fSupportsNextRipSave)
     6388    {
     6389        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK);
     6390        uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu);
     6391        rcStrict = IEMExecDecodedHlt(pVCpu, cbInstr);
     6392    }
     6393    else
     6394    {
     6395        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);
     6396        rcStrict = IEMExecOne(pVCpu);
     6397    }
     6398
     6399    if (   rcStrict == VINF_EM_HALT
     6400        || rcStrict == VINF_SUCCESS)
     6401    {
     6402        rcStrict = EMShouldContinueAfterHalt(pVCpu, &pVCpu->cpum.GstCtx) ? VINF_SUCCESS : VINF_EM_HALT;
     6403    }
     6404    else if (rcStrict == VINF_IEM_RAISED_XCPT)
     6405    {
     6406        rcStrict = VINF_SUCCESS;
     6407        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK);
     6408    }
     6409    HMSVM_CHECK_SINGLE_STEP(pVCpu, rcStrict);
     6410    if (rcStrict != VINF_SUCCESS)
     6411         STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchHltToR3);
     6412    return VBOXSTRICTRC_VAL(rcStrict);;
    63936413}
    63946414
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