Changeset 73166 in vbox
- Timestamp:
- Jul 17, 2018 5:20:32 AM (6 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
r73152 r73166 7026 7026 Assert(!IoExitInfo.n.u1Rep); 7027 7027 7028 uint8_t const cbInstr = pVmcb->ctrl.u64ExitInfo2 - pCtx->rip; 7028 7029 if (IoExitInfo.n.u1Type == SVM_IOIO_WRITE) 7029 7030 { 7030 7031 rcStrict = IOMIOPortWrite(pVM, pVCpu, IoExitInfo.n.u16Port, pCtx->eax & uAndVal, cbValue); 7032 if ( rcStrict == VINF_IOM_R3_IOPORT_WRITE 7033 && !pCtx->eflags.Bits.u1TF) 7034 rcStrict = EMRZSetPendingIoPortWrite(pVCpu, IoExitInfo.n.u16Port, cbInstr, cbValue, pCtx->eax & uAndVal); 7031 7035 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIOWrite); 7032 7036 } … … 7041 7045 pCtx->eax = (pCtx->eax & ~uAndVal) | (u32Val & uAndVal); 7042 7046 } 7043 else if (rcStrict == VINF_IOM_R3_IOPORT_READ) 7044 { 7045 HMR0SavePendingIOPortRead(pVCpu, pVCpu->cpum.GstCtx.rip, pVmcb->ctrl.u64ExitInfo2, IoExitInfo.n.u16Port, 7046 uAndVal, cbValue); 7047 } 7047 else if ( rcStrict == VINF_IOM_R3_IOPORT_READ 7048 && !pCtx->eflags.Bits.u1TF) 7049 rcStrict = EMRZSetPendingIoPortRead(pVCpu, IoExitInfo.n.u16Port, cbInstr, cbValue); 7048 7050 7049 7051 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIORead); … … 7102 7104 7103 7105 #ifdef VBOX_STRICT 7104 if (rcStrict == VINF_IOM_R3_IOPORT_READ) 7106 if ( rcStrict == VINF_IOM_R3_IOPORT_READ 7107 || rcStrict == VINF_EM_PENDING_R3_IOPORT_READ) 7105 7108 Assert(IoExitInfo.n.u1Type == SVM_IOIO_READ); 7106 else if (rcStrict == VINF_IOM_R3_IOPORT_WRITE || rcStrict == VINF_IOM_R3_IOPORT_COMMIT_WRITE) 7109 else if ( rcStrict == VINF_IOM_R3_IOPORT_WRITE 7110 || rcStrict == VINF_IOM_R3_IOPORT_COMMIT_WRITE 7111 || rcStrict == VINF_EM_PENDING_R3_IOPORT_WRITE) 7107 7112 Assert(IoExitInfo.n.u1Type == SVM_IOIO_WRITE); 7108 7113 else
Note:
See TracChangeset
for help on using the changeset viewer.

