VirtualBox

Changeset 71297 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Mar 10, 2018 6:02:02 AM (7 years ago)
Author:
vboxsync
Message:

NEM: Some more 17115 fixes and noted down an issue (possibly not at all new). bugref:9044

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h

    r71296 r71297  
    12621262           || pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_WRITE
    12631263           || pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_EXECUTE);
     1264    AssertMsg(pMsg->Header.InstructionLength < 0x10, ("%#x\n", pMsg->Header.InstructionLength));
    12641265
    12651266    /*
     
    12681269    if (pMsg->Header.ExecutionState.InterruptionPending)
    12691270        pCtx->fExtrn &= ~CPUMCTX_EXTRN_NEM_WIN_MASK;
     1271
     1272#if 0 /* Experiment: 20K -> 34K exit/s. */
     1273    if (   pMsg->Header.ExecutionState.EferLma
     1274        && pMsg->Header.CsSegment.Long
     1275        && pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_WRITE)
     1276    {
     1277        if (   pMsg->Header.Rip - (uint64_t)0xf65a < (uint64_t)(0xf662 - 0xf65a)
     1278            && pMsg->InstructionBytes[0] == 0x89
     1279            && pMsg->InstructionBytes[1] == 0x03)
     1280        {
     1281            pCtx->rip    = pMsg->Header.Rip + 2;
     1282            pCtx->fExtrn &= ~CPUMCTX_EXTRN_RIP;
     1283            AssertMsg(pMsg->Header.InstructionLength == 2, ("%#x\n", pMsg->Header.InstructionLength));
     1284            //Log(("%RX64 msg:\n%.80Rhxd\n", pCtx->rip, pMsg));
     1285            return VINF_SUCCESS;
     1286        }
     1287    }
     1288#endif
    12701289
    12711290    /*
     
    13181337# endif
    13191338
     1339    if (pMsg->Reserved1)
     1340        Log(("MemExit/Reserved1=%#x\n", pMsg->Reserved1));
     1341    if (pMsg->Header.ExecutionState.Reserved0 || pMsg->Header.ExecutionState.Reserved1)
     1342        Log(("MemExit/Hdr/State: Reserved0=%#x Reserved1=%#x\n", pMsg->Header.ExecutionState.Reserved0, pMsg->Header.ExecutionState.Reserved1));
     1343    //if (pMsg->InstructionByteCount > 0)
     1344    //    Log4(("InstructionByteCount=%#x %.16Rhxs\n", pMsg->InstructionByteCount, pMsg->InstructionBytes));
     1345
    13201346    if (pMsg->InstructionByteCount > 0)
    13211347        rcStrict = IEMExecOneWithPrefetchedByPC(pVCpu, CPUMCTX2CORE(pCtx), pMsg->Header.Rip,
     
    13461372    Assert(   pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_READ
    13471373           || pMsg->Header.InterceptAccessType == HV_INTERCEPT_ACCESS_WRITE);
     1374    AssertMsg(pMsg->Header.InstructionLength < 0x10, ("%#x\n", pMsg->Header.InstructionLength));
    13481375
    13491376    /*
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