Changeset 72895 in vbox
- Timestamp:
- Jul 4, 2018 5:03:57 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123442
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/em.h
r72892 r72895 317 317 #endif 318 318 VMM_INT_DECL(int) EMInterpretRdpmc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 319 VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC);320 319 VMM_INT_DECL(VBOXSTRICTRC) EMInterpretMWait(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 321 320 VMM_INT_DECL(int) EMInterpretMonitor(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r72891 r72895 1390 1390 1391 1391 /** 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 based1404 * (in absence of segment override prefixes)????1405 */1406 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));1407 NOREF(pVM); NOREF(pRegFrame);1408 #ifdef IN_RC1409 LogFlow(("RC: EMULATE: invlpg %RGv\n", pAddrGC));1410 #endif1411 VBOXSTRICTRC rc = PGMInvalidatePage(pVCpu, pAddrGC);1412 if ( rc == VINF_SUCCESS1413 || 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 /**1423 1392 * Interpret DRx write. 1424 1393 * -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r72891 r72895 14913 14913 * Interface for HM and EM to emulate the INVLPG instruction. 14914 14914 * 14915 * @returns Strict VBox status code. 14916 * @retval VINF_PGM_SYNC_CR3 14917 * 14915 14918 * @param pVCpu The cross context virtual CPU structure. 14916 14919 * @param cbInstr The instruction length in bytes. -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r72891 r72895 11449 11449 11450 11450 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); 11452 11453 AssertRCReturn(rc, rc); 11453 11454 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 } 11457 11464 else 11458 AssertMsg (rcStrict == VERR_EM_INTERPRETER, ("hmR0VmxExitInvlpg: EMInterpretInvlpg %#RX64 failed with%Rrc\n",11459 11465 AssertMsgFailed(("Unexpected IEMExecDecodedInvlpg(%#RX64) sttus: %Rrc\n", 11466 pVmxTransient->uExitQualification, VBOXSTRICTRC_VAL(rcStrict))); 11460 11467 return rcStrict; 11461 11468 }
Note:
See TracChangeset
for help on using the changeset viewer.