VirtualBox

Ignore:
Timestamp:
Jul 17, 2018 1:57:30 PM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: bugref:9193 Try use EMRZSetPendingIo[Read|Write] interface for pending IO ops.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r73097 r73179  
    1215112151                rcStrict = IOMIOPortWrite(pVM, pVCpu, uIOPort, pCtx->eax & uAndVal, cbValue);
    1215212152                STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIOWrite);
     12153                if (    rcStrict == VINF_IOM_R3_IOPORT_WRITE
     12154                    && !pCtx->eflags.Bits.u1TF)
     12155                    rcStrict = EMRZSetPendingIoPortWrite(pVCpu, uIOPort, cbInstr, cbValue, pCtx->eax & uAndVal);
    1215312156            }
    1215412157            else
     
    1216112164                    pCtx->eax = (pCtx->eax & ~uAndVal) | (u32Result & uAndVal);
    1216212165                }
    12163                 else if (rcStrict == VINF_IOM_R3_IOPORT_READ)
    12164                     HMR0SavePendingIOPortRead(pVCpu, pCtx->rip, pCtx->rip + cbInstr, uIOPort, uAndVal, cbValue);
     12166                if (    rcStrict == VINF_IOM_R3_IOPORT_READ
     12167                    && !pCtx->eflags.Bits.u1TF)
     12168                    rcStrict = EMRZSetPendingIoPortRead(pVCpu, uIOPort, cbInstr, cbValue);
    1216512169                STAM_COUNTER_INC(&pVCpu->hm.s.StatExitIORead);
    1216612170            }
     
    1224112245
    1224212246#ifdef VBOX_STRICT
    12243         if (rcStrict == VINF_IOM_R3_IOPORT_READ)
     12247        if (   rcStrict == VINF_IOM_R3_IOPORT_READ
     12248            || rcStrict == VINF_EM_PENDING_R3_IOPORT_READ)
    1224412249            Assert(!fIOWrite);
    12245         else if (rcStrict == VINF_IOM_R3_IOPORT_WRITE || rcStrict == VINF_IOM_R3_IOPORT_COMMIT_WRITE)
     12250        else if (   rcStrict == VINF_IOM_R3_IOPORT_WRITE
     12251                 || rcStrict == VINF_IOM_R3_IOPORT_COMMIT_WRITE
     12252                 || rcStrict == VINF_EM_PENDING_R3_IOPORT_WRITE)
    1224612253            Assert(fIOWrite);
    1224712254        else
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette