VirtualBox

Changeset 73055 in vbox


Ignore:
Timestamp:
Jul 11, 2018 6:11:24 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123615
Message:

VMM/HMSVMR0: bugref:9193 Attempt to fix regression with nested SVM smoketests.

File:
1 edited

Legend:

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

    r73054 r73055  
    78337833{
    78347834    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    7835     HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_HWVIRT);
    78367835
    78377836#ifdef VBOX_STRICT
     
    78427841#endif
    78437842
    7844     VBOXSTRICTRC rcStrict;
    7845     bool const fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     7843    VBOXSTRICTRC   rcStrict;
     7844    bool const     fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     7845    uint64_t const fImport = CPUMCTX_EXTRN_HWVIRT;
    78467846    if (fSupportsNextRipSave)
    78477847    {
     7848        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | fImport);
    78487849        uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu);
    78497850        rcStrict = IEMExecDecodedClgi(pVCpu, cbInstr);
    78507851    }
    78517852    else
     7853    {
     7854        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | fImport);
    78527855        rcStrict = IEMExecOne(pVCpu);
     7856    }
    78537857
    78547858    if (rcStrict == VINF_SUCCESS)
     
    78707874{
    78717875    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    7872     HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_HWVIRT);
    78737876
    78747877    /*
     
    78807883        hmR0SvmClearCtrlIntercept(pVCpu, pVmcb, SVM_CTRL_INTERCEPT_STGI);
    78817884
    7882     VBOXSTRICTRC rcStrict;
    7883     bool const fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     7885    VBOXSTRICTRC   rcStrict;
     7886    bool const     fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     7887    uint64_t const fImport = CPUMCTX_EXTRN_HWVIRT;
    78847888    if (fSupportsNextRipSave)
    78857889    {
     7890        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | fImport);
    78867891        uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu);
    78877892        rcStrict = IEMExecDecodedStgi(pVCpu, cbInstr);
    78887893    }
    78897894    else
     7895    {
     7896        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | fImport);
    78907897        rcStrict = IEMExecOne(pVCpu);
     7898    }
    78917899
    78927900    if (rcStrict == VINF_SUCCESS)
     
    79087916{
    79097917    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    7910     HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK
    7911                                     | CPUMCTX_EXTRN_FS   | CPUMCTX_EXTRN_GS             | CPUMCTX_EXTRN_TR
    7912                                     | CPUMCTX_EXTRN_LDTR | CPUMCTX_EXTRN_KERNEL_GS_BASE | CPUMCTX_EXTRN_SYSCALL_MSRS
    7913                                     | CPUMCTX_EXTRN_SYSENTER_MSRS);
    79147918
    79157919#ifdef VBOX_STRICT
     
    79207924#endif
    79217925
    7922     VBOXSTRICTRC rcStrict;
    7923     bool const fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     7926    VBOXSTRICTRC   rcStrict;
     7927    bool const     fSupportsNextRipSave = hmR0SvmSupportsNextRipSave(pVCpu);
     7928    uint64_t const fImport = CPUMCTX_EXTRN_FS   | CPUMCTX_EXTRN_GS   | CPUMCTX_EXTRN_KERNEL_GS_BASE
     7929                           | CPUMCTX_EXTRN_TR   | CPUMCTX_EXTRN_LDTR | CPUMCTX_EXTRN_SYSCALL_MSRS
     7930                           | CPUMCTX_EXTRN_SYSENTER_MSRS;
    79247931    if (fSupportsNextRipSave)
    79257932    {
     7933        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | fImport);
    79267934        uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu);
    79277935        rcStrict = IEMExecDecodedVmload(pVCpu, cbInstr);
    79287936    }
    79297937    else
     7938    {
     7939        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | fImport);
    79307940        rcStrict = IEMExecOne(pVCpu);
     7941    }
    79317942
    79327943    if (rcStrict == VINF_SUCCESS)
     
    79537964{
    79547965    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    7955     HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);
    79567966
    79577967#ifdef VBOX_STRICT
     
    79657975    if (fSupportsNextRipSave)
    79667976    {
     7977        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK);
    79677978        uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu);
    79687979        rcStrict = IEMExecDecodedVmsave(pVCpu, cbInstr);
    79697980    }
    79707981    else
     7982    {
     7983        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);
    79717984        rcStrict = IEMExecOne(pVCpu);
     7985    }
    79727986
    79737987    if (rcStrict == VINF_IEM_RAISED_XCPT)
     
    79878001{
    79888002    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    7989     HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);
    79908003
    79918004    VBOXSTRICTRC rcStrict;
     
    79938006    if (fSupportsNextRipSave)
    79948007    {
     8008        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK);
    79958009        uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu);
    79968010        rcStrict = IEMExecDecodedInvlpga(pVCpu, cbInstr);
    79978011    }
    79988012    else
     8013    {
     8014        HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);
    79998015        rcStrict = IEMExecOne(pVCpu);
     8016    }
    80008017
    80018018    if (rcStrict == VINF_IEM_RAISED_XCPT)
     
    80158032{
    80168033    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    8017     HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | IEM_CPUMCTX_EXTRN_SVM_VMRUN_MASK);
     8034    HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_SVM_VMRUN_MASK);
    80188035
    80198036    VBOXSTRICTRC rcStrict;
     
    80258042    }
    80268043    else
    8027         rcStrict = IEMExecOne(pVCpu);
     8044        rcStrict = IEMExecOneBypassEx(pVCpu, CPUMCTX2CORE(&pVCpu->cpum.GstCtx), NULL /* pcbWritten */);
    80288045
    80298046    if (rcStrict == VINF_SUCCESS)
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