Changeset 71297 in vbox for trunk/src/VBox
- Timestamp:
- Mar 10, 2018 6:02:02 AM (7 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h
r71296 r71297 1262 1262 || pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_WRITE 1263 1263 || pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_EXECUTE); 1264 AssertMsg(pMsg->Header.InstructionLength < 0x10, ("%#x\n", pMsg->Header.InstructionLength)); 1264 1265 1265 1266 /* … … 1268 1269 if (pMsg->Header.ExecutionState.InterruptionPending) 1269 1270 pCtx->fExtrn &= ~CPUMCTX_EXTRN_NEM_WIN_MASK; 1271 1272 #if 0 /* Experiment: 20K -> 34K exit/s. */ 1273 if ( pMsg->Header.ExecutionState.EferLma 1274 && pMsg->Header.CsSegment.Long 1275 && pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_WRITE) 1276 { 1277 if ( pMsg->Header.Rip - (uint64_t)0xf65a < (uint64_t)(0xf662 - 0xf65a) 1278 && pMsg->InstructionBytes[0] == 0x89 1279 && pMsg->InstructionBytes[1] == 0x03) 1280 { 1281 pCtx->rip = pMsg->Header.Rip + 2; 1282 pCtx->fExtrn &= ~CPUMCTX_EXTRN_RIP; 1283 AssertMsg(pMsg->Header.InstructionLength == 2, ("%#x\n", pMsg->Header.InstructionLength)); 1284 //Log(("%RX64 msg:\n%.80Rhxd\n", pCtx->rip, pMsg)); 1285 return VINF_SUCCESS; 1286 } 1287 } 1288 #endif 1270 1289 1271 1290 /* … … 1318 1337 # endif 1319 1338 1339 if (pMsg->Reserved1) 1340 Log(("MemExit/Reserved1=%#x\n", pMsg->Reserved1)); 1341 if (pMsg->Header.ExecutionState.Reserved0 || pMsg->Header.ExecutionState.Reserved1) 1342 Log(("MemExit/Hdr/State: Reserved0=%#x Reserved1=%#x\n", pMsg->Header.ExecutionState.Reserved0, pMsg->Header.ExecutionState.Reserved1)); 1343 //if (pMsg->InstructionByteCount > 0) 1344 // Log4(("InstructionByteCount=%#x %.16Rhxs\n", pMsg->InstructionByteCount, pMsg->InstructionBytes)); 1345 1320 1346 if (pMsg->InstructionByteCount > 0) 1321 1347 rcStrict = IEMExecOneWithPrefetchedByPC(pVCpu, CPUMCTX2CORE(pCtx), pMsg->Header.Rip, … … 1346 1372 Assert( pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_READ 1347 1373 || pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_WRITE); 1374 AssertMsg(pMsg->Header.InstructionLength < 0x10, ("%#x\n", pMsg->Header.InstructionLength)); 1348 1375 1349 1376 /* -
trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp
r71296 r71297 101 101 static decltype(WHvDeleteVirtualProcessor) * g_pfnWHvDeleteVirtualProcessor; 102 102 static decltype(WHvRunVirtualProcessor) * g_pfnWHvRunVirtualProcessor; 103 static decltype(WHvGetRunExitContextSize) * g_pfnWHvGetRunExitContextSize;104 103 static decltype(WHvCancelRunVirtualProcessor) * g_pfnWHvCancelRunVirtualProcessor; 105 104 static decltype(WHvGetVirtualProcessorRegisters) * g_pfnWHvGetVirtualProcessorRegisters; … … 153 152 NEM_WIN_IMPORT(0, false, WHvRunVirtualProcessor), 154 153 NEM_WIN_IMPORT(0, false, WHvCancelRunVirtualProcessor), 155 NEM_WIN_IMPORT(0, false, WHvGetRunExitContextSize),156 154 NEM_WIN_IMPORT(0, false, WHvGetVirtualProcessorRegisters), 157 155 NEM_WIN_IMPORT(0, false, WHvSetVirtualProcessorRegisters), … … 1535 1533 if (fExitInstr && pExitReason->IoPortAccess.InstructionByteCount > 0) 1536 1534 Log2(("Exit: + Instruction %.*Rhxs\n", 1537 pExitReason->IoPortAccess.InstructionByteCount, pExitReason->IoPortAccess.InstructionBytes)); 1535 pExitReason->IoPortAccess.InstructionByteCount, 1536 &pExitReason->IoPortAccess.InstructionBytes[g_uBuildNo >= 17110 ? 3 : 0])); 1538 1537 } 1539 1538 } … … 1654 1653 if (pMemCtx->InstructionByteCount > 0) 1655 1654 rcStrict = IEMExecOneWithPrefetchedByPC(pVCpu, CPUMCTX2CORE(pCtx), pMemCtx->VpContext.Rip, 1656 pMemCtx->InstructionBytes, pMemCtx->InstructionByteCount); 1655 &pMemCtx->InstructionBytes[g_uBuildNo >= 17110 ? 3 : 0], 1656 pMemCtx->InstructionByteCount); 1657 1657 else 1658 1658 rcStrict = IEMExecOne(pVCpu); … … 1686 1686 * Simple port I/O. 1687 1687 */ 1688 Assert(pCtx->rax == pIoPortCtx->Rax);1688 //Assert(pCtx->rax == pIoPortCtx->Rax); - sledgehammer 1689 1689 1690 1690 static uint32_t const s_fAndMask[8] = … … 2523 2523 * 2524 2524 * 2525 * - Wrong instruction length in the VpContext with unmapped GPA memory exit 2526 * contexts on 17115/AMD. 2527 * 2528 * One byte "PUSH CS" was reported as 2 bytes, while a two byte 2529 * "MOV [EBX],EAX" was reported with a 1 byte instruction length. Problem 2530 * naturally present in untranslated hyper-v messages. 2531 * 2532 * 2525 2533 * - The I/O port exit context information seems to be missing the address size 2526 2534 * information needed for correct string I/O emulation.
Note:
See TracChangeset
for help on using the changeset viewer.