Changeset 72287 in vbox for trunk/src/VBox/VMM
- Timestamp:
- May 22, 2018 2:28:10 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp
r72286 r72287 1499 1499 if (fExitCtx) 1500 1500 { 1501 const WHV_VP_EXIT_CONTEXT *pVpCtx = &pExitReason-> IoPortAccess.VpContext;1501 const WHV_VP_EXIT_CONTEXT *pVpCtx = &pExitReason->VpContext; 1502 1502 Log2(("Exit: + CS:RIP=%04x:%08RX64 RFLAGS=%06RX64 cbInstr=%u CS={%RX64 L %#RX32, %#x}\n", 1503 1503 pVpCtx->Cs.Selector, … … 1601 1601 * @param pCtx The CPU context to update. 1602 1602 * @param pMemCtx The exit reason information. 1603 */ 1604 static VBOXSTRICTRC nemR3WinWHvHandleMemoryAccess(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, WHV_MEMORY_ACCESS_CONTEXT const *pMemCtx) 1603 * @param pVpContext The processor context info associated with the exit. 1604 */ 1605 static VBOXSTRICTRC nemR3WinWHvHandleMemoryAccess(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, WHV_MEMORY_ACCESS_CONTEXT const *pMemCtx, 1606 WHV_VP_EXIT_CONTEXT const *pVpContext) 1605 1607 { 1606 1608 /* … … 1642 1644 VBOXSTRICTRC rcStrict; 1643 1645 if (pMemCtx->InstructionByteCount > 0) 1644 rcStrict = IEMExecOneWithPrefetchedByPC(pVCpu, CPUMCTX2CORE(pCtx), p MemCtx->VpContext.Rip,1646 rcStrict = IEMExecOneWithPrefetchedByPC(pVCpu, CPUMCTX2CORE(pCtx), pVpContext->Rip, 1645 1647 &pMemCtx->InstructionBytes[0], pMemCtx->InstructionByteCount); 1646 1648 else … … 1662 1664 * @param pIoPortCtx The exit reason information. 1663 1665 */ 1664 static VBOXSTRICTRC nemR3WinWHvHandleIoPortAccess(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, 1665 WHV_X64_IO_PORT_ACCESS_CONTEXT const *pIoPortCtx) 1666 static VBOXSTRICTRC 1667 nemR3WinWHvHandleIoPortAccess(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, WHV_X64_IO_PORT_ACCESS_CONTEXT const *pIoPortCtx, 1668 WHV_VP_EXIT_CONTEXT const *pVpContext) 1666 1669 { 1667 1670 Assert( pIoPortCtx->AccessInfo.AccessSize == 1 … … 1685 1688 pIoPortCtx->AccessInfo.AccessSize); 1686 1689 if (IOM_SUCCESS(rcStrict)) 1687 nemR3WinAdvanceGuestRipAndClearRF(pVCpu, pCtx, &pIoPortCtx->VpContext);1690 nemR3WinAdvanceGuestRipAndClearRF(pVCpu, pCtx, pVpContext); 1688 1691 } 1689 1692 else … … 1695 1698 { 1696 1699 pCtx->eax = (pCtx->eax & ~fAndMask) | (uValue & fAndMask); 1697 nemR3WinAdvanceGuestRipAndClearRF(pVCpu, pCtx, &pIoPortCtx->VpContext);1700 nemR3WinAdvanceGuestRipAndClearRF(pVCpu, pCtx, pVpContext); 1698 1701 } 1699 1702 } … … 1733 1736 * Do debug checks. 1734 1737 */ 1735 if ( p IoPortCtx->VpContext.ExecutionState.DebugActive /** @todo Microsoft: Does DebugActive this only reflext DR7? */1736 || (p IoPortCtx->VpContext.Rflags & X86_EFL_TF)1738 if ( pVpContext->ExecutionState.DebugActive /** @todo Microsoft: Does DebugActive this only reflext DR7? */ 1739 || (pVpContext->Rflags & X86_EFL_TF) 1737 1740 || DBGFBpIsHwIoArmed(pVM) ) 1738 1741 { … … 1898 1901 /* Frequent exits: */ 1899 1902 case WHvRunVpExitReasonCanceled: 1900 case WHvRunVpExitReasonAlerted:1903 //case WHvRunVpExitReasonAlerted: 1901 1904 rcStrict = VINF_SUCCESS; 1902 1905 break; … … 1907 1910 1908 1911 case WHvRunVpExitReasonMemoryAccess: 1909 rcStrict = nemR3WinWHvHandleMemoryAccess(pVM, pVCpu, pCtx, &ExitReason.MemoryAccess );1912 rcStrict = nemR3WinWHvHandleMemoryAccess(pVM, pVCpu, pCtx, &ExitReason.MemoryAccess, &ExitReason.VpContext); 1910 1913 break; 1911 1914 1912 1915 case WHvRunVpExitReasonX64IoPortAccess: 1913 rcStrict = nemR3WinWHvHandleIoPortAccess(pVM, pVCpu, pCtx, &ExitReason.IoPortAccess );1916 rcStrict = nemR3WinWHvHandleIoPortAccess(pVM, pVCpu, pCtx, &ExitReason.IoPortAccess, &ExitReason.VpContext); 1914 1917 break; 1915 1918
Note:
See TracChangeset
for help on using the changeset viewer.