VirtualBox

Changeset 3197 in vbox for trunk


Ignore:
Timestamp:
Jun 21, 2007 8:19:41 AM (18 years ago)
Author:
vboxsync
Message:

IO handling updates

Location:
trunk/src/VBox/VMM/VMMR0
Files:
2 edited

Legend:

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

    r3184 r3197  
    12901290        /*
    12911291         * Handled the I/O return codes.
    1292          * (The unhandled cases end up with rc == VINF_EM_RESCHEDULE_REM.)
     1292         * (The unhandled cases end up with rc == VINF_EM_RAW_EMULATE_INSTR.)
    12931293         */
    12941294        if (IOM_SUCCESS(rc))
     
    13041304            break;
    13051305        }
     1306        if (rc == VINF_EM_RAW_EMULATE_INSTR)
     1307        {
     1308            /* First attempt to emulate directly before falling back to the recompiler */
     1309            rc = (IoExitInfo.n.u1Type == 0) ? VINF_IOM_HC_IOPORT_WRITE : VINF_IOM_HC_IOPORT_READ;
     1310        }
     1311
    13061312#ifdef VBOX_STRICT
    13071313        if (rc == VINF_IOM_HC_IOPORT_READ)
     
    13101316            Assert(IoExitInfo.n.u1Type == 0);
    13111317        else
    1312             AssertMsg(VBOX_FAILURE(rc) || rc == VINF_EM_RAW_EMULATE_INSTR || rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED || rc == VINF_EM_RESCHEDULE_REM, ("%Vrc\n", rc));
     1318            AssertMsg(VBOX_FAILURE(rc) || rc == VINF_EM_RAW_EMULATE_INSTR || rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED, ("%Vrc\n", rc));
    13131319#endif
    13141320        Log2(("Failed IO at %VGv %x size %d\n", pCtx->eip, IoExitInfo.n.u16Port, uIOSize));
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r3184 r3197  
    17291729        /*
    17301730         * Handled the I/O return codes.
    1731          * (The unhandled cases end up with rc == VINF_EM_RESCHEDULE_REM.)
     1731         * (The unhandled cases end up with rc == VINF_EM_RAW_EMULATE_INSTR.)
    17321732         */
    17331733        if (IOM_SUCCESS(rc))
     
    17421742            break;
    17431743        }
     1744        if (rc == VINF_EM_RAW_EMULATE_INSTR)
     1745        {
     1746            /* First attempt to emulate directly before falling back to the recompiler */
     1747            rc = (fIOWrite) ? VINF_IOM_HC_IOPORT_WRITE : VINF_IOM_HC_IOPORT_READ;
     1748        }
     1749
    17441750#ifdef VBOX_STRICT
    17451751        if (rc == VINF_IOM_HC_IOPORT_READ)
     
    17481754            Assert(fIOWrite);
    17491755        else
    1750             AssertMsg(VBOX_FAILURE(rc) || rc == VINF_EM_RAW_EMULATE_INSTR || rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED || rc == VINF_EM_RESCHEDULE_REM, ("%Vrc\n", rc));
     1756            AssertMsg(VBOX_FAILURE(rc) || rc == VINF_EM_RAW_EMULATE_INSTR || rc == VINF_EM_RAW_GUEST_TRAP || rc == VINF_TRPM_XCPT_DISPATCHED, ("%Vrc\n", rc));
    17511757#endif
    17521758        break;
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