Changeset 66585 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Apr 17, 2017 4:34:11 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114612
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/HMSVMAll.cpp
r66581 r66585 828 828 uint64_t uExitInfo2) 829 829 { 830 #define HMSVM_VMEXIT_RET() do { return HMSvmNstGstVmExit(pVCpu, pCtx, uExitCode, uExitInfo1, uExitInfo2); } while (0) 830 #define HMSVM_VMEXIT() \ 831 831 832 #define HMSVM_CTRL_INTERCEPT_VMEXIT_RET(a_Intercept) \ 832 833 do { \ … … 849 850 case SVM_EXIT_EXCEPTION_24: case SVM_EXIT_EXCEPTION_25: case SVM_EXIT_EXCEPTION_26: case SVM_EXIT_EXCEPTION_27: 850 851 case SVM_EXIT_EXCEPTION_28: case SVM_EXIT_EXCEPTION_29: case SVM_EXIT_EXCEPTION_30: case SVM_EXIT_EXCEPTION_31: 852 { 851 853 if (CPUMIsGuestSvmXcptInterceptSet(pCtx, (X86XCPT)(uExitCode - SVM_EXIT_EXCEPTION_0))) 852 HMSVM_VMEXIT_RET();854 return HMSvmNstGstVmExit(pVCpu, pCtx, uExitCode, uExitInfo1, uExitInfo2); 853 855 break; 856 } 854 857 855 858 case SVM_EXIT_WRITE_CR0: case SVM_EXIT_WRITE_CR1: case SVM_EXIT_WRITE_CR2: case SVM_EXIT_WRITE_CR3: … … 857 860 case SVM_EXIT_WRITE_CR8: case SVM_EXIT_WRITE_CR9: case SVM_EXIT_WRITE_CR10: case SVM_EXIT_WRITE_CR11: 858 861 case SVM_EXIT_WRITE_CR12: case SVM_EXIT_WRITE_CR13: case SVM_EXIT_WRITE_CR14: case SVM_EXIT_WRITE_CR15: 862 { 859 863 if (CPUMIsGuestSvmWriteCRxInterceptSet(pCtx, uExitCode - SVM_EXIT_WRITE_CR0)) 860 HMSVM_VMEXIT_RET();864 return HMSvmNstGstVmExit(pVCpu, pCtx, uExitCode, uExitInfo1, uExitInfo2); 861 865 break; 866 } 862 867 863 868 case SVM_EXIT_READ_CR0: case SVM_EXIT_READ_CR1: case SVM_EXIT_READ_CR2: case SVM_EXIT_READ_CR3: … … 865 870 case SVM_EXIT_READ_CR8: case SVM_EXIT_READ_CR9: case SVM_EXIT_READ_CR10: case SVM_EXIT_READ_CR11: 866 871 case SVM_EXIT_READ_CR12: case SVM_EXIT_READ_CR13: case SVM_EXIT_READ_CR14: case SVM_EXIT_READ_CR15: 872 { 867 873 if (CPUMIsGuestSvmReadCRxInterceptSet(pCtx, uExitCode - SVM_EXIT_READ_CR0)) 868 HMSVM_VMEXIT_RET();874 return HMSvmNstGstVmExit(pVCpu, pCtx, uExitCode, uExitInfo1, uExitInfo2); 869 875 break; 876 } 870 877 871 878 case SVM_EXIT_READ_DR0: case SVM_EXIT_READ_DR1: case SVM_EXIT_READ_DR2: case SVM_EXIT_READ_DR3: … … 873 880 case SVM_EXIT_READ_DR8: case SVM_EXIT_READ_DR9: case SVM_EXIT_READ_DR10: case SVM_EXIT_READ_DR11: 874 881 case SVM_EXIT_READ_DR12: case SVM_EXIT_READ_DR13: case SVM_EXIT_READ_DR14: case SVM_EXIT_READ_DR15: 882 { 875 883 if (CPUMIsGuestSvmReadDRxInterceptSet(pCtx, uExitCode - SVM_EXIT_READ_DR0)) 876 HMSVM_VMEXIT_RET();884 return HMSvmNstGstVmExit(pVCpu, pCtx, uExitCode, uExitInfo1, uExitInfo2); 877 885 break; 886 } 878 887 879 888 case SVM_EXIT_WRITE_DR0: case SVM_EXIT_WRITE_DR1: case SVM_EXIT_WRITE_DR2: case SVM_EXIT_WRITE_DR3: … … 881 890 case SVM_EXIT_WRITE_DR8: case SVM_EXIT_WRITE_DR9: case SVM_EXIT_WRITE_DR10: case SVM_EXIT_WRITE_DR11: 882 891 case SVM_EXIT_WRITE_DR12: case SVM_EXIT_WRITE_DR13: case SVM_EXIT_WRITE_DR14: case SVM_EXIT_WRITE_DR15: 892 { 883 893 if (CPUMIsGuestSvmWriteDRxInterceptSet(pCtx, uExitCode - SVM_EXIT_WRITE_DR0)) 884 HMSVM_VMEXIT_RET();894 return HMSvmNstGstVmExit(pVCpu, pCtx, uExitCode, uExitInfo1, uExitInfo2); 885 895 break; 896 } 886 897 887 898 case SVM_EXIT_INTR: HMSVM_CTRL_INTERCEPT_VMEXIT_RET(SVM_CTRL_INTERCEPT_INTR); … … 930 941 case SVM_EXIT_XSETBV: HMSVM_CTRL_INTERCEPT_VMEXIT_RET(SVM_CTRL_INTERCEPT_XSETBV); 931 942 932 #if 0933 943 case SVM_EXIT_IOIO: 934 { 935 if (CPUMIsGuestSvmCtrlInterceptSet(pCtx, SVM_CTRL_INTERCEPT_IOIO_PROT)) 936 { 937 SVMIOIOEXIT IOExitInfo; 938 IOExitInfo.u = uExitInfo1; 939 const volatile void *pvIOPM = pCtx->hwvirt.svm.CTX_SUFF(pvIoBitmap); 940 uint16_t const offIoBitmap = pVIOPM + (IOExitInfo.n.u16Port / 8); 941 uint16_t const u16Port = IOExitInfo.n.u16Port; 942 uint8_t const cbIoSize = IOExitInfo.n.u1OP32 ? 4 : IOExitInfo.n.u1OP16; 943 } 944 break; 945 } 946 #endif 944 AssertMsgFailed(("Use HMSvmNstGstHandleMsrIntercept!\n")); 945 return VERR_SVM_IPE_1; 947 946 948 947 case SVM_EXIT_MSR: … … 957 956 958 957 default: 959 AssertMsgFailed(("Unsupported .\n"));958 AssertMsgFailed(("Unsupported SVM exit code %#RX64\n", uExitCode)); 960 959 return VERR_SVM_IPE_1; 961 960 }
Note:
See TracChangeset
for help on using the changeset viewer.