VirtualBox

Changeset 80622 in vbox


Ignore:
Timestamp:
Sep 6, 2019 9:42:26 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
133151
Message:

VMM/HMVMXR0: Implemented using IEMExecDecodedInvpcid from the ring-0 VM-exit handler rather than going to ring-3. Disabled until I can test it.

File:
1 edited

Legend:

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

    r80602 r80622  
    1456614566{
    1456714567    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
     14568
     14569#if 1
    1456814570    /** @todo Use VM-exit instruction information. */
    1456914571    return VERR_EM_INTERPRETER;
     14572#else
     14573    hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
     14574    hmR0VmxReadExitInstrInfoVmcs(pVmxTransient);
     14575    hmR0VmxReadExitQualVmcs(pVmxTransient);
     14576    int rc = hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
     14577                                                                    | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK);
     14578    AssertRCReturn(rc, rc);
     14579
     14580    /* Paranoia. Ensure this has a memory operand. */
     14581    Assert(!pVmxTransient->ExitInstrInfo.Inv.u1Cleared0);
     14582
     14583    uint8_t const iGReg = pVmxTransient->ExitInstrInfo.VmreadVmwrite.iReg2;
     14584    Assert(iGReg < RT_ELEMENTS(pVCpu->cpum.GstCtx.aGRegs));
     14585    uint64_t const uType = CPUMIsGuestIn64BitCode(pVCpu) ? pVCpu->cpum.GstCtx.aGRegs[iGReg].u64
     14586                                                         : pVCpu->cpum.GstCtx.aGRegs[iGReg].u32;
     14587
     14588    RTGCPTR GCPtrDesc;
     14589    HMVMX_DECODE_MEM_OPERAND(pVCpu, pVmxTransient->ExitInstrInfo.u, pVmxTransient->uExitQual, VMXMEMACCESS_READ, &GCPtrDesc);
     14590
     14591    VBOXSTRICTRC rcStrict = IEMExecDecodedInvpcid(pVCpu, pVmxTransient->cbExitInstr, pVmxTransient->ExitInstrInfo.Inv.iSegReg,
     14592                                                  GCPtrDesc, uType);
     14593    if (RT_LIKELY(rcStrict == VINF_SUCCESS))
     14594        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_GUEST_RIP | HM_CHANGED_GUEST_RFLAGS);
     14595    else if (rcStrict == VINF_IEM_RAISED_XCPT)
     14596    {
     14597        ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK);
     14598        rcStrict = VINF_SUCCESS;
     14599    }
     14600    return rcStrict;
     14601#endif
    1457014602}
    1457114603
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