Changeset 73055 in vbox
- Timestamp:
- Jul 11, 2018 6:11:24 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123615
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r73054 r73055 7833 7833 { 7834 7834 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient); 7835 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_HWVIRT);7836 7835 7837 7836 #ifdef VBOX_STRICT … … 7842 7841 #endif 7843 7842 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; 7846 7846 if (fSupportsNextRipSave) 7847 7847 { 7848 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | fImport); 7848 7849 uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu); 7849 7850 rcStrict = IEMExecDecodedClgi(pVCpu, cbInstr); 7850 7851 } 7851 7852 else 7853 { 7854 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | fImport); 7852 7855 rcStrict = IEMExecOne(pVCpu); 7856 } 7853 7857 7854 7858 if (rcStrict == VINF_SUCCESS) … … 7870 7874 { 7871 7875 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient); 7872 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_HWVIRT);7873 7876 7874 7877 /* … … 7880 7883 hmR0SvmClearCtrlIntercept(pVCpu, pVmcb, SVM_CTRL_INTERCEPT_STGI); 7881 7884 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; 7884 7888 if (fSupportsNextRipSave) 7885 7889 { 7890 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | fImport); 7886 7891 uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu); 7887 7892 rcStrict = IEMExecDecodedStgi(pVCpu, cbInstr); 7888 7893 } 7889 7894 else 7895 { 7896 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | fImport); 7890 7897 rcStrict = IEMExecOne(pVCpu); 7898 } 7891 7899 7892 7900 if (rcStrict == VINF_SUCCESS) … … 7908 7916 { 7909 7917 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient); 7910 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK7911 | CPUMCTX_EXTRN_FS | CPUMCTX_EXTRN_GS | CPUMCTX_EXTRN_TR7912 | CPUMCTX_EXTRN_LDTR | CPUMCTX_EXTRN_KERNEL_GS_BASE | CPUMCTX_EXTRN_SYSCALL_MSRS7913 | CPUMCTX_EXTRN_SYSENTER_MSRS);7914 7918 7915 7919 #ifdef VBOX_STRICT … … 7920 7924 #endif 7921 7925 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; 7924 7931 if (fSupportsNextRipSave) 7925 7932 { 7933 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK | fImport); 7926 7934 uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu); 7927 7935 rcStrict = IEMExecDecodedVmload(pVCpu, cbInstr); 7928 7936 } 7929 7937 else 7938 { 7939 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK | fImport); 7930 7940 rcStrict = IEMExecOne(pVCpu); 7941 } 7931 7942 7932 7943 if (rcStrict == VINF_SUCCESS) … … 7953 7964 { 7954 7965 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient); 7955 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);7956 7966 7957 7967 #ifdef VBOX_STRICT … … 7965 7975 if (fSupportsNextRipSave) 7966 7976 { 7977 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK); 7967 7978 uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu); 7968 7979 rcStrict = IEMExecDecodedVmsave(pVCpu, cbInstr); 7969 7980 } 7970 7981 else 7982 { 7983 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK); 7971 7984 rcStrict = IEMExecOne(pVCpu); 7985 } 7972 7986 7973 7987 if (rcStrict == VINF_IEM_RAISED_XCPT) … … 7987 8001 { 7988 8002 HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient); 7989 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);7990 8003 7991 8004 VBOXSTRICTRC rcStrict; … … 7993 8006 if (fSupportsNextRipSave) 7994 8007 { 8008 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK); 7995 8009 uint8_t const cbInstr = hmR0SvmGetInstrLength(pVCpu); 7996 8010 rcStrict = IEMExecDecodedInvlpga(pVCpu, cbInstr); 7997 8011 } 7998 8012 else 8013 { 8014 HMSVM_CPUMCTX_IMPORT_STATE(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK); 7999 8015 rcStrict = IEMExecOne(pVCpu); 8016 } 8000 8017 8001 8018 if (rcStrict == VINF_IEM_RAISED_XCPT) … … 8015 8032 { 8016 8033 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); 8018 8035 8019 8036 VBOXSTRICTRC rcStrict; … … 8025 8042 } 8026 8043 else 8027 rcStrict = IEMExecOne (pVCpu);8044 rcStrict = IEMExecOneBypassEx(pVCpu, CPUMCTX2CORE(&pVCpu->cpum.GstCtx), NULL /* pcbWritten */); 8028 8045 8029 8046 if (rcStrict == VINF_SUCCESS)
Note:
See TracChangeset
for help on using the changeset viewer.