Changeset 66581 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllCImplStrInstr.cpp.h
- Timestamp:
- Apr 17, 2017 3:00:00 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImplStrInstr.cpp.h
r62478 r66581 1218 1218 } 1219 1219 1220 /* 1221 * Check SVM nested-guest IO intercept. 1222 */ 1223 if (IEM_IS_SVM_CTRL_INTERCEPT_SET(pVCpu, SVM_CTRL_INTERCEPT_IOIO_PROT)) 1224 { 1225 rcStrict = iemSvmHandleIOIntercept(pVCpu, pCtx->dx, SVMIOIOTYPE_IN, OP_SIZE / 8, ADDR_SIZE, X86_SREG_ES, false /* fRep */, 1226 true /* fStrIo */, cbInstr); 1227 if (rcStrict == VINF_SVM_VMEXIT) 1228 return VINF_SUCCESS; 1229 if (rcStrict != VINF_HM_INTERCEPT_NOT_ACTIVE) 1230 { 1231 Log(("iemCImpl_ins_op: iemSvmHandleIOIntercept failed (u16Port=%#x, cbReg=%u) rc=%Rrc\n", pCtx->dx, OP_SIZE / 8, 1232 VBOXSTRICTRC_VAL(rcStrict))); 1233 return rcStrict; 1234 } 1235 } 1236 1220 1237 OP_TYPE *puMem; 1221 1238 rcStrict = iemMemMap(pVCpu, (void **)&puMem, OP_SIZE / 8, X86_SREG_ES, pCtx->ADDR_rDI, IEM_ACCESS_DATA_W); … … 1269 1286 if (rcStrict != VINF_SUCCESS) 1270 1287 return rcStrict; 1288 } 1289 1290 /* 1291 * Check SVM nested-guest IO intercept. 1292 */ 1293 if (IEM_IS_SVM_CTRL_INTERCEPT_SET(pVCpu, SVM_CTRL_INTERCEPT_IOIO_PROT)) 1294 { 1295 rcStrict = iemSvmHandleIOIntercept(pVCpu, u16Port, SVMIOIOTYPE_IN, OP_SIZE / 8, ADDR_SIZE, X86_SREG_ES, true /* fRep */, 1296 true /* fStrIo */, cbInstr); 1297 if (rcStrict == VINF_SVM_VMEXIT) 1298 return VINF_SUCCESS; 1299 if (rcStrict != VINF_HM_INTERCEPT_NOT_ACTIVE) 1300 { 1301 Log(("iemCImpl_rep_ins_op: iemSvmHandleIOIntercept failed (u16Port=%#x, cbReg=%u) rc=%Rrc\n", u16Port, OP_SIZE / 8, 1302 VBOXSTRICTRC_VAL(rcStrict))); 1303 return rcStrict; 1304 } 1271 1305 } 1272 1306 … … 1455 1489 } 1456 1490 1491 /* 1492 * Check SVM nested-guest IO intercept. 1493 */ 1494 if (IEM_IS_SVM_CTRL_INTERCEPT_SET(pVCpu, SVM_CTRL_INTERCEPT_IOIO_PROT)) 1495 { 1496 rcStrict = iemSvmHandleIOIntercept(pVCpu, pCtx->dx, SVMIOIOTYPE_OUT, OP_SIZE / 8, ADDR_SIZE, iEffSeg, false /* fRep */, 1497 true /* fStrIo */, cbInstr); 1498 if (rcStrict == VINF_SVM_VMEXIT) 1499 return VINF_SUCCESS; 1500 if (rcStrict != VINF_HM_INTERCEPT_NOT_ACTIVE) 1501 { 1502 Log(("iemCImpl_outs_op: iemSvmHandleIOIntercept failed (u16Port=%#x, cbReg=%u) rc=%Rrc\n", pCtx->dx, OP_SIZE / 8, 1503 VBOXSTRICTRC_VAL(rcStrict))); 1504 return rcStrict; 1505 } 1506 } 1507 1457 1508 OP_TYPE uValue; 1458 1509 rcStrict = RT_CONCAT(iemMemFetchDataU,OP_SIZE)(pVCpu, &uValue, iEffSeg, pCtx->ADDR_rSI); … … 1496 1547 if (rcStrict != VINF_SUCCESS) 1497 1548 return rcStrict; 1549 } 1550 1551 /* 1552 * Check SVM nested-guest IO intercept. 1553 */ 1554 if (IEM_IS_SVM_CTRL_INTERCEPT_SET(pVCpu, SVM_CTRL_INTERCEPT_IOIO_PROT)) 1555 { 1556 rcStrict = iemSvmHandleIOIntercept(pVCpu, u16Port, SVMIOIOTYPE_OUT, OP_SIZE / 8, ADDR_SIZE, iEffSeg, true /* fRep */, 1557 true /* fStrIo */, cbInstr); 1558 if (rcStrict == VINF_SVM_VMEXIT) 1559 return VINF_SUCCESS; 1560 if (rcStrict != VINF_HM_INTERCEPT_NOT_ACTIVE) 1561 { 1562 Log(("iemCImpl_rep_outs_op: iemSvmHandleIOIntercept failed (u16Port=%#x, cbReg=%u) rc=%Rrc\n", u16Port, OP_SIZE / 8, 1563 VBOXSTRICTRC_VAL(rcStrict))); 1564 return rcStrict; 1565 } 1498 1566 } 1499 1567
Note:
See TracChangeset
for help on using the changeset viewer.