Changeset 60850 in vbox for trunk/src/VBox
- Timestamp:
- May 5, 2016 3:43:19 PM (9 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMR0.cpp
r60847 r60850 1626 1626 pVCpu->hm.s.PendingIO.s.Port.uAndVal = uAndVal; 1627 1627 pVCpu->hm.s.PendingIO.s.Port.cbSize = cbSize; 1628 /** @todo IOM will do this stuff, retire the HM feature. */1629 return;1630 }1631 1632 1633 /**1634 * Save a pending IO write.1635 *1636 * @param pVCpu The cross context virtual CPU structure.1637 * @param GCPtrRip Address of IO instruction.1638 * @param GCPtrRipNext Address of the next instruction.1639 * @param uPort Port address.1640 * @param uAndVal AND mask for fetching the result from eax.1641 * @param cbSize Read size.1642 */1643 VMMR0_INT_DECL(void) HMR0SavePendingIOPortWrite(PVMCPU pVCpu, RTGCPTR GCPtrRip, RTGCPTR GCPtrRipNext,1644 unsigned uPort, unsigned uAndVal, unsigned cbSize)1645 {1646 pVCpu->hm.s.PendingIO.enmType = HMPENDINGIO_PORT_WRITE;1647 pVCpu->hm.s.PendingIO.GCPtrRip = GCPtrRip;1648 pVCpu->hm.s.PendingIO.GCPtrRipNext = GCPtrRipNext;1649 pVCpu->hm.s.PendingIO.s.Port.uPort = uPort;1650 pVCpu->hm.s.PendingIO.s.Port.uAndVal = uAndVal;1651 pVCpu->hm.s.PendingIO.s.Port.cbSize = cbSize;1652 /** @todo IOM will do this stuff, retire the HM feature. */1653 1628 return; 1654 1629 } -
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r60847 r60850 4929 4929 { 4930 4930 rcStrict = IOMIOPortWrite(pVM, pVCpu, IoExitInfo.n.u16Port, pCtx->eax & uAndVal, cbValue); 4931 if (rcStrict == VINF_IOM_R3_IOPORT_WRITE)4932 HMR0SavePendingIOPortWrite(pVCpu, pCtx->rip, pVmcb->ctrl.u64ExitInfo2, IoExitInfo.n.u16Port, uAndVal, cbValue);4933 4934 4931 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIOWrite); 4935 4932 } -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r60847 r60850 12287 12287 { 12288 12288 rcStrict = IOMIOPortWrite(pVM, pVCpu, uIOPort, pMixedCtx->eax & uAndVal, cbValue); 12289 if (rcStrict == VINF_IOM_R3_IOPORT_WRITE)12290 HMR0SavePendingIOPortWrite(pVCpu, pMixedCtx->rip, pMixedCtx->rip + cbInstr, uIOPort, uAndVal, cbValue);12291 12289 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIOWrite); 12292 12290 } -
trunk/src/VBox/VMM/VMMR3/HM.cpp
r60732 r60850 3083 3083 VMMR3_INT_DECL(VBOXSTRICTRC) HMR3RestartPendingIOInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx) 3084 3084 { 3085 /* 3086 * Check if we've got relevant data pending. 3087 */ 3085 3088 HMPENDINGIO enmType = pVCpu->hm.s.PendingIO.enmType; 3086 3089 if (enmType == HMPENDINGIO_INVALID) 3090 return VERR_NOT_FOUND; 3087 3091 pVCpu->hm.s.PendingIO.enmType = HMPENDINGIO_INVALID; 3088 3089 if ( pVCpu->hm.s.PendingIO.GCPtrRip != pCtx->rip 3090 || enmType == HMPENDINGIO_INVALID) 3092 if (pVCpu->hm.s.PendingIO.GCPtrRip != pCtx->rip) 3091 3093 return VERR_NOT_FOUND; 3092 3094 3095 /* 3096 * Execute pending I/O. 3097 */ 3093 3098 VBOXSTRICTRC rcStrict; 3094 3099 switch (enmType) … … 3109 3114 break; 3110 3115 } 3111 3112 case HMPENDINGIO_PORT_WRITE:3113 rcStrict = IOMIOPortWrite(pVM, pVCpu, pVCpu->hm.s.PendingIO.s.Port.uPort,3114 pCtx->eax & pVCpu->hm.s.PendingIO.s.Port.uAndVal,3115 pVCpu->hm.s.PendingIO.s.Port.cbSize);3116 if (IOM_SUCCESS(rcStrict))3117 pCtx->rip = pVCpu->hm.s.PendingIO.GCPtrRipNext;3118 break;3119 3116 3120 3117 default: -
trunk/src/VBox/VMM/include/HMInternal.h
r60847 r60850 291 291 HMPENDINGIO_INVALID = 0, 292 292 HMPENDINGIO_PORT_READ, 293 HMPENDINGIO_PORT_WRITE, 294 HMPENDINGIO_STRING_READ, 295 HMPENDINGIO_STRING_WRITE, 293 /* not implemented: HMPENDINGIO_STRING_READ, */ 294 /* not implemented: HMPENDINGIO_STRING_WRITE, */ 296 295 /** The usual 32-bit paranoia. */ 297 296 HMPENDINGIO_32BIT_HACK = 0x7fffffff … … 871 870 } EmulateIoBlock; 872 871 873 /* * @todo IOM does this now, can be retired.*/872 /* */ 874 873 struct 875 874 {
Note:
See TracChangeset
for help on using the changeset viewer.