VirtualBox

Changeset 72895 in vbox


Ignore:
Timestamp:
Jul 4, 2018 5:03:57 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123442
Message:

EM,HM: Replaced EMInterpretInvlpg with IEMExecDecodedInvlpg.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/em.h

    r72892 r72895  
    317317#endif
    318318VMM_INT_DECL(int)               EMInterpretRdpmc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);
    319 VMM_INT_DECL(VBOXSTRICTRC)      EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC);
    320319VMM_INT_DECL(VBOXSTRICTRC)      EMInterpretMWait(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);
    321320VMM_INT_DECL(int)               EMInterpretMonitor(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);
  • trunk/src/VBox/VMM/VMMAll/EMAll.cpp

    r72891 r72895  
    13901390
    13911391/**
    1392  * Interpret INVLPG.
    1393  *
    1394  * @returns VBox status code.
    1395  * @param   pVM         The cross context VM structure.
    1396  * @param   pVCpu       The cross context virtual CPU structure.
    1397  * @param   pRegFrame   The register frame.
    1398  * @param   pAddrGC     Operand address.
    1399  *
    1400  */
    1401 VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC)
    1402 {
    1403     /** @todo is addr always a flat linear address or ds based
    1404      * (in absence of segment override prefixes)????
    1405      */
    1406     Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));
    1407     NOREF(pVM); NOREF(pRegFrame);
    1408 #ifdef IN_RC
    1409     LogFlow(("RC: EMULATE: invlpg %RGv\n", pAddrGC));
    1410 #endif
    1411     VBOXSTRICTRC rc = PGMInvalidatePage(pVCpu, pAddrGC);
    1412     if (    rc == VINF_SUCCESS
    1413         ||  rc == VINF_PGM_SYNC_CR3 /* we can rely on the FF */)
    1414         return VINF_SUCCESS;
    1415     AssertMsgReturn(rc == VINF_EM_RAW_EMULATE_INSTR,
    1416                     ("%Rrc addr=%RGv\n", VBOXSTRICTRC_VAL(rc), pAddrGC),
    1417                     VERR_EM_INTERPRETER);
    1418     return rc;
    1419 }
    1420 
    1421 
    1422 /**
    14231392 * Interpret DRx write.
    14241393 *
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r72891 r72895  
    1491314913 * Interface for HM and EM to emulate the INVLPG instruction.
    1491414914 *
     14915 * @returns Strict VBox status code.
     14916 * @retval  VINF_PGM_SYNC_CR3
     14917 *
    1491514918 * @param   pVCpu       The cross context virtual CPU structure.
    1491614919 * @param   cbInstr     The instruction length in bytes.
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r72891 r72895  
    1144911449
    1145011450    int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient);
    11451     rc    |= hmR0VmxImportGuestState(pVCpu, CPUMCTX_EXTRN_SREG_MASK);
     11451    rc    |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
     11452    rc    |= hmR0VmxImportGuestState(pVCpu, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_DS);
    1145211453    AssertRCReturn(rc, rc);
    1145311454
    11454     VBOXSTRICTRC rcStrict = EMInterpretInvlpg(pVM, pVCpu, CPUMCTX2CORE(pMixedCtx), pVmxTransient->uExitQualification);
    11455     if (RT_LIKELY(rcStrict == VINF_SUCCESS))
    11456         rcStrict = hmR0VmxAdvanceGuestRip(pVCpu, pMixedCtx, pVmxTransient);
     11455    VBOXSTRICTRC rcStrict = IEMExecDecodedInvlpg(pVCpu, pVmxTransient->cbInstr, pVmxTransient->uExitQualification);
     11456
     11457    if (rcStrict == VINF_SUCCESS || rcStrict == VINF_PGM_SYNC_CR3)
     11458        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_GUEST_RIP | HM_CHANGED_GUEST_RFLAGS);
     11459    else if (rcStrict == VINF_IEM_RAISED_XCPT)
     11460    {
     11461        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_XCPT_RAISED_MASK);
     11462        rcStrict = VINF_SUCCESS;
     11463    }
    1145711464    else
    11458         AssertMsg(rcStrict == VERR_EM_INTERPRETER, ("hmR0VmxExitInvlpg: EMInterpretInvlpg %#RX64 failed with %Rrc\n",
    11459                                                     pVmxTransient->uExitQualification, VBOXSTRICTRC_VAL(rcStrict)));
     11465        AssertMsgFailed(("Unexpected IEMExecDecodedInvlpg(%#RX64) sttus: %Rrc\n",
     11466                         pVmxTransient->uExitQualification, VBOXSTRICTRC_VAL(rcStrict)));
    1146011467    return rcStrict;
    1146111468}
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