VirtualBox

Changeset 104877 in vbox


Ignore:
Timestamp:
Jun 10, 2024 3:15:11 PM (10 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163477
Message:

VMM/IEM: Removed double checking of the physical TLB revision in iemOpcodeFetchBytesJmp as it introduces an unnecessary race condition and the fallback for the 2nd check is completely wrong. This was causing the DBGFSTOP in the main IEM loop to hit among other things. Also corrected the incorrect throwing of VINF_IEM_REEXEC_BREAK from iemNativeHlpMemCodeNewPageTlbMiss. bugref:10371

Location:
trunk/src/VBox/VMM/VMMAll
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r104516 r104877  
    10151015        /*
    10161016         * Try do a direct read using the pbMappingR3 pointer.
     1017         * Note! Do not recheck the physical TLB revision number here as we have the
     1018         *       wrong response to changes in the else case.  If someone is updating
     1019         *       pVCpu->iem.s.CodeTlb.uTlbPhysRev in parallel to us, we should be fine
     1020         *       pretending we always won the race.
    10171021         */
    1018         if (    (pTlbe->fFlagsAndPhysRev & (IEMTLBE_F_PHYS_REV | IEMTLBE_F_NO_MAPPINGR3 | IEMTLBE_F_PG_NO_READ))
    1019              == pVCpu->iem.s.CodeTlb.uTlbPhysRev)
     1022        if (    (pTlbe->fFlagsAndPhysRev & (/*IEMTLBE_F_PHYS_REV |*/ IEMTLBE_F_NO_MAPPINGR3 | IEMTLBE_F_PG_NO_READ))
     1023             == /*pVCpu->iem.s.CodeTlb.uTlbPhysRev*/ 0U)
    10201024        {
    10211025            uint32_t const offPg = (GCPtrFirst & X86_PAGE_OFFSET_MASK);
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompBltIn.cpp

    r104856 r104877  
    8181    else
    8282    {
    83         IEM_DO_LONGJMP(pVCpu, VINF_IEM_REEXEC_BREAK);
     83        AssertMsgFailed(("cs:rip=%04x:%08RX64\n", pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip));
     84        IEM_DO_LONGJMP(pVCpu, VINF_SUCCESS);
    8485    }
    8586}
     
    9697    pVCpu->iem.s.offInstrNextByte = GUEST_PAGE_SIZE;
    9798    iemOpcodeFetchBytesJmp(pVCpu, 0, NULL);
     99    AssertMsg(pVCpu->iem.s.pbInstrBuf, ("cs:rip=%04x:%08RX64\n", pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip));
    98100    return pVCpu->iem.s.pbInstrBuf ? pVCpu->iem.s.GCPhysInstrBuf : NIL_RTGCPHYS;
    99101}
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdRecompiler.cpp

    r104469 r104877  
    31593159        IEM_CATCH_LONGJMP_BEGIN(pVCpu, rcStrict);
    31603160        {
     3161            Assert(rcStrict != VINF_IEM_REEXEC_BREAK);
    31613162            pVCpu->iem.s.cLongJumps++;
    31623163#ifdef VBOX_WITH_IEM_NATIVE_RECOMPILER_LONGJMP
Note: See TracChangeset for help on using the changeset viewer.

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