VirtualBox

Changeset 92189 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Nov 3, 2021 10:41:34 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
148018
Message:

VMM/VMXTemplate.cpp.h: Replace the VMX{Read|Write}Vmcs{16,32,64,Nw} function calls with macros which need to be implemented by the code including the template. For the darwin NEM backend we require the pointer to vCPU to be passed along which can be omitted when using our own hypervisor, bugref:10136

File:
1 edited

Legend:

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

    r92188 r92189  
    2020*   Defined Constants And Macros                                                                                                 *
    2121*********************************************************************************************************************************/
     22#if !defined(VMX_VMCS_WRITE_16) || !defined(VMX_VMCS_WRITE_32) || !defined(VMX_VMCS_WRITE_64) || !defined(VMX_VMCS_WRITE_64)
     23# error "At least one of the VMX_VMCS_WRITE_16, VMX_VMCS_WRITE_32, VMX_VMCS_WRITE_64 or VMX_VMCS_WRITE_64 is missing"
     24#endif
     25
     26
     27#if !defined(VMX_VMCS_READ_16) || !defined(VMX_VMCS_READ_32) || !defined(VMX_VMCS_READ_64) || !defined(VMX_VMCS_READ_64)
     28# error "At least one of the VMX_VMCS_READ_16, VMX_VMCS_READ_32, VMX_VMCS_READ_64 or VMX_VMCS_READ_64 is missing"
     29#endif
     30
     31
    2232/** Use the function table. */
    2333#define HMVMX_USE_FUNCTION_TABLE
     
    10131023 * Sets the given Processor-based VM-execution controls.
    10141024 *
     1025 * @param   pVCpu           The cross context virtual CPU structure.
    10151026 * @param   pVmxTransient   The VMX-transient structure.
    10161027 * @param   uProcCtls       The Processor-based VM-execution controls to set.
    10171028 */
    1018 static void vmxHCSetProcCtlsVmcs(PVMXTRANSIENT pVmxTransient, uint32_t uProcCtls)
     1029static void vmxHCSetProcCtlsVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient, uint32_t uProcCtls)
    10191030{
    10201031    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
     
    10221033    {
    10231034        pVmcsInfo->u32ProcCtls |= uProcCtls;
    1024         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     1035        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    10251036        AssertRC(rc);
    10261037    }
     
    10521063        {
    10531064            pVmcsInfo->u32ProcCtls &= ~uProcCtls;
    1054             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     1065            int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    10551066            AssertRC(rc);
    10561067        }
     
    10621073 * Sets the TSC offset for the current VMCS.
    10631074 *
    1064  * @param   uTscOffset  The TSC offset to set.
    1065  * @param   pVmcsInfo   The VMCS info. object.
    1066  */
    1067 static void vmxHCSetTscOffsetVmcs(PVMXVMCSINFO pVmcsInfo, uint64_t uTscOffset)
     1075 * @param   pVCpu           The cross context virtual CPU structure.
     1076 * @param   uTscOffset      The TSC offset to set.
     1077 * @param   pVmcsInfo       The VMCS info. object.
     1078 */
     1079static void vmxHCSetTscOffsetVmcs(PVMCPUCC pVCpu, PVMXVMCSINFO pVmcsInfo, uint64_t uTscOffset)
    10681080{
    10691081    if (pVmcsInfo->u64TscOffset != uTscOffset)
    10701082    {
    1071         int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_TSC_OFFSET_FULL, uTscOffset);
     1083        int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_TSC_OFFSET_FULL, uTscOffset);
    10721084        AssertRC(rc);
    10731085        pVmcsInfo->u64TscOffset = uTscOffset;
     
    10801092 * VMCS.
    10811093 *
     1094 * @param   pVCpu           The cross context virtual CPU structure.
    10821095 * @param   pVmxTransient   The VMX-transient structure.
    10831096 * @param   uXcptMask       The exception(s) to add.
    10841097 */
    1085 static void vmxHCAddXcptInterceptMask(PCVMXTRANSIENT pVmxTransient, uint32_t uXcptMask)
     1098static void vmxHCAddXcptInterceptMask(PVMCPUCC pVCpu, PCVMXTRANSIENT pVmxTransient, uint32_t uXcptMask)
    10861099{
    10871100    PVMXVMCSINFO pVmcsInfo   = pVmxTransient->pVmcsInfo;
     
    10901103    {
    10911104        uXcptBitmap |= uXcptMask;
    1092         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
     1105        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
    10931106        AssertRC(rc);
    10941107        pVmcsInfo->u32XcptBitmap = uXcptBitmap;
     
    11001113 * Adds an exception to the exception bitmap and commits it to the current VMCS.
    11011114 *
     1115 * @param   pVCpu           The cross context virtual CPU structure.
    11021116 * @param   pVmxTransient   The VMX-transient structure.
    11031117 * @param   uXcpt           The exception to add.
    11041118 */
    1105 static void vmxHCAddXcptIntercept(PCVMXTRANSIENT pVmxTransient, uint8_t uXcpt)
     1119static void vmxHCAddXcptIntercept(PVMCPUCC pVCpu, PCVMXTRANSIENT pVmxTransient, uint8_t uXcpt)
    11061120{
    11071121    Assert(uXcpt <= X86_XCPT_LAST);
    1108     vmxHCAddXcptInterceptMask(pVmxTransient, RT_BIT_32(uXcpt));
     1122    vmxHCAddXcptInterceptMask(pVCpu, pVmxTransient, RT_BIT_32(uXcpt));
    11091123}
    11101124
     
    11621176            if (pVmcsInfo->u32XcptBitmap != u32XcptBitmap)
    11631177            {
    1164                 int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, u32XcptBitmap);
     1178                int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, u32XcptBitmap);
    11651179                AssertRC(rc);
    11661180                pVmcsInfo->u32XcptBitmap = u32XcptBitmap;
     
    14111425    {
    14121426        AssertPtrReturnVoid(pVCpu);
    1413         VMXReadVmcs32(VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError);
     1427        VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError);
    14141428    }
    14151429    pVCpu->CTX_SUFF(pVM)->hm.s.ForR3.rcInit = rc;
     
    14221436 * transient structure.
    14231437 *
     1438 * @param   pVCpu           The cross context virtual CPU structure.
    14241439 * @param   pVmxTransient   The VMX-transient structure.
    14251440 */
    1426 DECLINLINE(void) vmxHCReadEntryIntInfoVmcs(PVMXTRANSIENT pVmxTransient)
    1427 {
    1428     int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, &pVmxTransient->uEntryIntInfo);
     1441DECLINLINE(void) vmxHCReadEntryIntInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
     1442{
     1443    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, &pVmxTransient->uEntryIntInfo);
    14291444    AssertRC(rc);
    14301445}
     
    14351450 * the VMX transient structure.
    14361451 *
     1452 * @param   pVCpu           The cross context virtual CPU structure.
    14371453 * @param   pVmxTransient   The VMX-transient structure.
    14381454 */
    1439 DECLINLINE(void) vmxHCReadEntryXcptErrorCodeVmcs(PVMXTRANSIENT pVmxTransient)
    1440 {
    1441     int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY_EXCEPTION_ERRCODE, &pVmxTransient->uEntryXcptErrorCode);
     1455DECLINLINE(void) vmxHCReadEntryXcptErrorCodeVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
     1456{
     1457    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_EXCEPTION_ERRCODE, &pVmxTransient->uEntryXcptErrorCode);
    14421458    AssertRC(rc);
    14431459}
     
    14481464 * the VMX transient structure.
    14491465 *
     1466 * @param   pVCpu           The cross context virtual CPU structure.
    14501467 * @param   pVmxTransient   The VMX-transient structure.
    14511468 */
    1452 DECLINLINE(void) vmxHCReadEntryInstrLenVmcs(PVMXTRANSIENT pVmxTransient)
    1453 {
    1454     int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY_INSTR_LENGTH, &pVmxTransient->cbEntryInstr);
     1469DECLINLINE(void) vmxHCReadEntryInstrLenVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
     1470{
     1471    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INSTR_LENGTH, &pVmxTransient->cbEntryInstr);
    14551472    AssertRC(rc);
    14561473}
     
    14621479 * transient structure.
    14631480 *
     1481 * @param   pVCpu           The cross context virtual CPU structure.
    14641482 * @param   pVmxTransient   The VMX-transient structure.
    14651483 */
    1466 DECLINLINE(void) vmxHCReadExitIntInfoVmcs(PVMXTRANSIENT pVmxTransient)
     1484DECLINLINE(void) vmxHCReadExitIntInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    14671485{
    14681486    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INTERRUPTION_INFO))
    14691487    {
    1470         int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INTERRUPTION_INFO, &pVmxTransient->uExitIntInfo);
     1488        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INTERRUPTION_INFO, &pVmxTransient->uExitIntInfo);
    14711489        AssertRC(rc);
    14721490        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INTERRUPTION_INFO;
     
    14791497 * transient structure.
    14801498 *
     1499 * @param   pVCpu           The cross context virtual CPU structure.
    14811500 * @param   pVmxTransient   The VMX-transient structure.
    14821501 */
    1483 DECLINLINE(void) vmxHCReadExitIntErrorCodeVmcs(PVMXTRANSIENT pVmxTransient)
     1502DECLINLINE(void) vmxHCReadExitIntErrorCodeVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    14841503{
    14851504    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE))
    14861505    {
    1487         int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INTERRUPTION_ERROR_CODE, &pVmxTransient->uExitIntErrorCode);
     1506        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INTERRUPTION_ERROR_CODE, &pVmxTransient->uExitIntErrorCode);
    14881507        AssertRC(rc);
    14891508        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE;
     
    14961515 * transient structure.
    14971516 *
     1517 * @param   pVCpu           The cross context virtual CPU structure.
    14981518 * @param   pVmxTransient   The VMX-transient structure.
    14991519 */
    1500 DECLINLINE(void) vmxHCReadExitInstrLenVmcs(PVMXTRANSIENT pVmxTransient)
     1520DECLINLINE(void) vmxHCReadExitInstrLenVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    15011521{
    15021522    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INSTR_LEN))
    15031523    {
    1504         int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INSTR_LENGTH, &pVmxTransient->cbExitInstr);
     1524        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INSTR_LENGTH, &pVmxTransient->cbExitInstr);
    15051525        AssertRC(rc);
    15061526        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INSTR_LEN;
     
    15131533 * the VMX transient structure.
    15141534 *
     1535 * @param   pVCpu           The cross context virtual CPU structure.
    15151536 * @param   pVmxTransient   The VMX-transient structure.
    15161537 */
    1517 DECLINLINE(void) vmxHCReadExitInstrInfoVmcs(PVMXTRANSIENT pVmxTransient)
     1538DECLINLINE(void) vmxHCReadExitInstrInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    15181539{
    15191540    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_INSTR_INFO))
    15201541    {
    1521         int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INSTR_INFO, &pVmxTransient->ExitInstrInfo.u);
     1542        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INSTR_INFO, &pVmxTransient->ExitInstrInfo.u);
    15221543        AssertRC(rc);
    15231544        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_INSTR_INFO;
     
    15291550 * Reads the Exit Qualification from the VMCS into the VMX transient structure.
    15301551 *
     1552 * @param   pVCpu           The cross context virtual CPU structure.
    15311553 * @param   pVmxTransient   The VMX-transient structure.
    15321554 */
    1533 DECLINLINE(void) vmxHCReadExitQualVmcs(PVMXTRANSIENT pVmxTransient)
     1555DECLINLINE(void) vmxHCReadExitQualVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    15341556{
    15351557    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_QUALIFICATION))
    15361558    {
    1537         int rc = VMXReadVmcsNw(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual);
     1559        int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual);
    15381560        AssertRC(rc);
    15391561        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_QUALIFICATION;
     
    15451567 * Reads the Guest-linear address from the VMCS into the VMX transient structure.
    15461568 *
     1569 * @param   pVCpu           The cross context virtual CPU structure.
    15471570 * @param   pVmxTransient   The VMX-transient structure.
    15481571 */
    1549 DECLINLINE(void) vmxHCReadGuestLinearAddrVmcs(PVMXTRANSIENT pVmxTransient)
     1572DECLINLINE(void) vmxHCReadGuestLinearAddrVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    15501573{
    15511574    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_LINEAR_ADDR))
    15521575    {
    1553         int rc = VMXReadVmcsNw(VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr);
     1576        int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr);
    15541577        AssertRC(rc);
    15551578        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_LINEAR_ADDR;
     
    15611584 * Reads the Guest-physical address from the VMCS into the VMX transient structure.
    15621585 *
     1586 * @param   pVCpu           The cross context virtual CPU structure.
    15631587 * @param   pVmxTransient   The VMX-transient structure.
    15641588 */
    1565 DECLINLINE(void) vmxHCReadGuestPhysicalAddrVmcs(PVMXTRANSIENT pVmxTransient)
     1589DECLINLINE(void) vmxHCReadGuestPhysicalAddrVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    15661590{
    15671591    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_PHYSICAL_ADDR))
    15681592    {
    1569         int rc = VMXReadVmcs64(VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL, &pVmxTransient->uGuestPhysicalAddr);
     1593        int rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL, &pVmxTransient->uGuestPhysicalAddr);
    15701594        AssertRC(rc);
    15711595        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_PHYSICAL_ADDR;
     
    15781602 * structure.
    15791603 *
     1604 * @param   pVCpu           The cross context virtual CPU structure.
    15801605 * @param   pVmxTransient   The VMX-transient structure.
    15811606 */
    1582 DECLINLINE(void) vmxHCReadGuestPendingDbgXctps(PVMXTRANSIENT pVmxTransient)
     1607DECLINLINE(void) vmxHCReadGuestPendingDbgXctps(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    15831608{
    15841609    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_PENDING_DBG_XCPTS))
    15851610    {
    1586         int rc = VMXReadVmcsNw(VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, &pVmxTransient->uGuestPendingDbgXcpts);
     1611        int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, &pVmxTransient->uGuestPendingDbgXcpts);
    15871612        AssertRC(rc);
    15881613        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_PENDING_DBG_XCPTS;
     
    15951620 * transient structure.
    15961621 *
     1622 * @param   pVCpu           The cross context virtual CPU structure.
    15971623 * @param   pVmxTransient   The VMX-transient structure.
    15981624 *
    15991625 * @remarks No-long-jump zone!!!
    16001626 */
    1601 DECLINLINE(void) vmxHCReadIdtVectoringInfoVmcs(PVMXTRANSIENT pVmxTransient)
     1627DECLINLINE(void) vmxHCReadIdtVectoringInfoVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    16021628{
    16031629    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_IDT_VECTORING_INFO))
    16041630    {
    1605         int rc = VMXReadVmcs32(VMX_VMCS32_RO_IDT_VECTORING_INFO, &pVmxTransient->uIdtVectoringInfo);
     1631        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_IDT_VECTORING_INFO, &pVmxTransient->uIdtVectoringInfo);
    16061632        AssertRC(rc);
    16071633        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_IDT_VECTORING_INFO;
     
    16141640 * transient structure.
    16151641 *
     1642 * @param   pVCpu           The cross context virtual CPU structure.
    16161643 * @param   pVmxTransient   The VMX-transient structure.
    16171644 */
    1618 DECLINLINE(void) vmxHCReadIdtVectoringErrorCodeVmcs(PVMXTRANSIENT pVmxTransient)
     1645DECLINLINE(void) vmxHCReadIdtVectoringErrorCodeVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    16191646{
    16201647    if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_IDT_VECTORING_ERROR_CODE))
    16211648    {
    1622         int rc = VMXReadVmcs32(VMX_VMCS32_RO_IDT_VECTORING_ERROR_CODE, &pVmxTransient->uIdtVectoringErrorCode);
     1649        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_IDT_VECTORING_ERROR_CODE, &pVmxTransient->uIdtVectoringErrorCode);
    16231650        AssertRC(rc);
    16241651        pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_IDT_VECTORING_ERROR_CODE;
     
    16301657 * Reads all relevant read-only VMCS fields into the VMX transient structure.
    16311658 *
     1659 * @param   pVCpu           The cross context virtual CPU structure.
    16321660 * @param   pVmxTransient   The VMX-transient structure.
    16331661 */
    1634 static void vmxHCReadAllRoFieldsVmcs(PVMXTRANSIENT pVmxTransient)
    1635 {
    1636     int rc = VMXReadVmcsNw(VMX_VMCS_RO_EXIT_QUALIFICATION,             &pVmxTransient->uExitQual);
    1637     rc    |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INSTR_LENGTH,            &pVmxTransient->cbExitInstr);
    1638     rc    |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INSTR_INFO,              &pVmxTransient->ExitInstrInfo.u);
    1639     rc    |= VMXReadVmcs32(VMX_VMCS32_RO_IDT_VECTORING_INFO,           &pVmxTransient->uIdtVectoringInfo);
    1640     rc    |= VMXReadVmcs32(VMX_VMCS32_RO_IDT_VECTORING_ERROR_CODE,     &pVmxTransient->uIdtVectoringErrorCode);
    1641     rc    |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INTERRUPTION_INFO,       &pVmxTransient->uExitIntInfo);
    1642     rc    |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INTERRUPTION_ERROR_CODE, &pVmxTransient->uExitIntErrorCode);
    1643     rc    |= VMXReadVmcsNw(VMX_VMCS_RO_GUEST_LINEAR_ADDR,              &pVmxTransient->uGuestLinearAddr);
    1644     rc    |= VMXReadVmcs64(VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL,         &pVmxTransient->uGuestPhysicalAddr);
     1662static void vmxHCReadAllRoFieldsVmcs(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
     1663{
     1664    int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_RO_EXIT_QUALIFICATION,             &pVmxTransient->uExitQual);
     1665    rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INSTR_LENGTH,            &pVmxTransient->cbExitInstr);
     1666    rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INSTR_INFO,              &pVmxTransient->ExitInstrInfo.u);
     1667    rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_IDT_VECTORING_INFO,           &pVmxTransient->uIdtVectoringInfo);
     1668    rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_IDT_VECTORING_ERROR_CODE,     &pVmxTransient->uIdtVectoringErrorCode);
     1669    rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INTERRUPTION_INFO,       &pVmxTransient->uExitIntInfo);
     1670    rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_INTERRUPTION_ERROR_CODE, &pVmxTransient->uExitIntErrorCode);
     1671    rc    |= VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_RO_GUEST_LINEAR_ADDR,              &pVmxTransient->uGuestLinearAddr);
     1672    rc    |= VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL,         &pVmxTransient->uGuestPhysicalAddr);
    16451673    AssertRC(rc);
    16461674    pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_QUALIFICATION
     
    17871815        if (pVmcsInfo->cEntryMsrLoad != cMsrs)
    17881816        {
    1789             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY_MSR_LOAD_COUNT, cMsrs);   AssertRC(rc);
    1790             rc     = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXIT_MSR_STORE_COUNT, cMsrs);   AssertRC(rc);
    1791             rc     = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXIT_MSR_LOAD_COUNT,  cMsrs);   AssertRC(rc);
     1817            int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_MSR_LOAD_COUNT, cMsrs);   AssertRC(rc);
     1818            rc     = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXIT_MSR_STORE_COUNT, cMsrs);   AssertRC(rc);
     1819            rc     = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXIT_MSR_LOAD_COUNT,  cMsrs);   AssertRC(rc);
    17921820            pVmcsInfo->cEntryMsrLoad = cMsrs;
    17931821            pVmcsInfo->cExitMsrStore = cMsrs;
     
    21922220
    21932221    uint32_t u32Val;
    2194     int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY, &u32Val);
     2222    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY, &u32Val);
    21952223    AssertRC(rc);
    21962224    AssertMsgReturnStmt(pVmcsInfo->u32EntryCtls == u32Val,
     
    21992227                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
    22002228
    2201     rc = VMXReadVmcs32(VMX_VMCS32_CTRL_EXIT, &u32Val);
     2229    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_EXIT, &u32Val);
    22022230    AssertRC(rc);
    22032231    AssertMsgReturnStmt(pVmcsInfo->u32ExitCtls == u32Val,
     
    22062234                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
    22072235
    2208     rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PIN_EXEC, &u32Val);
     2236    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_PIN_EXEC, &u32Val);
    22092237    AssertRC(rc);
    22102238    AssertMsgReturnStmt(pVmcsInfo->u32PinCtls == u32Val,
     
    22132241                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
    22142242
    2215     rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, &u32Val);
     2243    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, &u32Val);
    22162244    AssertRC(rc);
    22172245    AssertMsgReturnStmt(pVmcsInfo->u32ProcCtls == u32Val,
     
    22222250    if (pVmcsInfo->u32ProcCtls & VMX_PROC_CTLS_USE_SECONDARY_CTLS)
    22232251    {
    2224         rc = VMXReadVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, &u32Val);
     2252        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, &u32Val);
    22252253        AssertRC(rc);
    22262254        AssertMsgReturnStmt(pVmcsInfo->u32ProcCtls2 == u32Val,
     
    22332261    if (pVmcsInfo->u32ProcCtls & VMX_PROC_CTLS_USE_TERTIARY_CTLS)
    22342262    {
    2235         rc = VMXReadVmcs64(VMX_VMCS64_CTRL_PROC_EXEC3_FULL, &u64Val);
     2263        rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_CTRL_PROC_EXEC3_FULL, &u64Val);
    22362264        AssertRC(rc);
    22372265        AssertMsgReturnStmt(pVmcsInfo->u64ProcCtls3 == u64Val,
     
    22412269    }
    22422270
    2243     rc = VMXReadVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, &u32Val);
     2271    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, &u32Val);
    22442272    AssertRC(rc);
    22452273    AssertMsgReturnStmt(pVmcsInfo->u32XcptBitmap == u32Val,
     
    22482276                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
    22492277
    2250     rc = VMXReadVmcs64(VMX_VMCS64_CTRL_TSC_OFFSET_FULL, &u64Val);
     2278    rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_CTRL_TSC_OFFSET_FULL, &u64Val);
    22512279    AssertRC(rc);
    22522280    AssertMsgReturnStmt(pVmcsInfo->u64TscOffset == u64Val,
     
    22752303        uint64_t const uHostEferMsrCache = g_uHmVmxHostMsrEfer;
    22762304        uint64_t       uVmcsEferMsrVmcs;
    2277         int rc = VMXReadVmcs64(VMX_VMCS64_HOST_EFER_FULL, &uVmcsEferMsrVmcs);
     2305        int rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_HOST_EFER_FULL, &uVmcsEferMsrVmcs);
    22782306        AssertRC(rc);
    22792307
     
    23022330    uint32_t cExitStoreMsrs;
    23032331    uint32_t cExitLoadMsrs;
    2304     int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY_MSR_LOAD_COUNT, &cEntryLoadMsrs);  AssertRC(rc);
    2305     rc     = VMXReadVmcs32(VMX_VMCS32_CTRL_EXIT_MSR_STORE_COUNT, &cExitStoreMsrs);  AssertRC(rc);
    2306     rc     = VMXReadVmcs32(VMX_VMCS32_CTRL_EXIT_MSR_LOAD_COUNT,  &cExitLoadMsrs);   AssertRC(rc);
     2332    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_MSR_LOAD_COUNT, &cEntryLoadMsrs);  AssertRC(rc);
     2333    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_EXIT_MSR_STORE_COUNT, &cExitStoreMsrs);  AssertRC(rc);
     2334    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_EXIT_MSR_LOAD_COUNT,  &cExitLoadMsrs);   AssertRC(rc);
    23072335
    23082336    /* Verify all the MSR counts are the same. */
     
    26142642
    26152643    /* Update VMCS with the VPID. */
    2616     int rc  = VMXWriteVmcs16(VMX_VMCS16_VPID, pVCpu->hmr0.s.uCurrentAsid);
     2644    int rc  = VMX_VMCS_WRITE_16(pVCpu, VMX_VMCS16_VPID, pVCpu->hmr0.s.uCurrentAsid);
    26172645    AssertRC(rc);
    26182646
     
    27652793              ("Cpu[%u] pVCpu->uCurrentAsid=%u\n", pHostCpu->idCpu, pVCpu->hmr0.s.uCurrentAsid));
    27662794
    2767     int rc  = VMXWriteVmcs16(VMX_VMCS16_VPID, pVCpu->hmr0.s.uCurrentAsid);
     2795    int rc  = VMX_VMCS_WRITE_16(pVCpu, VMX_VMCS16_VPID, pVCpu->hmr0.s.uCurrentAsid);
    27682796    AssertRC(rc);
    27692797}
     
    31473175    Assert(HCPhysVirtApic != NIL_RTHCPHYS);
    31483176    Assert(!(HCPhysVirtApic & 0xfff));                       /* Bits 11:0 MBZ. */
    3149     int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_VIRT_APIC_PAGEADDR_FULL, HCPhysVirtApic);
     3177    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_VIRT_APIC_PAGEADDR_FULL, HCPhysVirtApic);
    31503178    AssertRC(rc);
    31513179}
     
    31623190    Assert(HCPhysMsrBitmap != NIL_RTHCPHYS);
    31633191    Assert(!(HCPhysMsrBitmap & 0xfff));                      /* Bits 11:0 MBZ. */
    3164     int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_MSR_BITMAP_FULL, HCPhysMsrBitmap);
     3192    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_MSR_BITMAP_FULL, HCPhysMsrBitmap);
    31653193    AssertRC(rc);
    31663194}
     
    31773205    Assert(HCPhysApicAccess != NIL_RTHCPHYS);
    31783206    Assert(!(HCPhysApicAccess & 0xfff));                     /* Bits 11:0 MBZ. */
    3179     int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_APIC_ACCESSADDR_FULL, HCPhysApicAccess);
     3207    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_APIC_ACCESSADDR_FULL, HCPhysApicAccess);
    31803208    AssertRC(rc);
    31813209}
     
    31933221    Assert(HCPhysVmreadBitmap != NIL_RTHCPHYS);
    31943222    Assert(!(HCPhysVmreadBitmap & 0xfff));                     /* Bits 11:0 MBZ. */
    3195     int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_VMREAD_BITMAP_FULL, HCPhysVmreadBitmap);
     3223    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_VMREAD_BITMAP_FULL, HCPhysVmreadBitmap);
    31963224    AssertRC(rc);
    31973225}
     
    32083236    Assert(HCPhysVmwriteBitmap != NIL_RTHCPHYS);
    32093237    Assert(!(HCPhysVmwriteBitmap & 0xfff));                     /* Bits 11:0 MBZ. */
    3210     int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_VMWRITE_BITMAP_FULL, HCPhysVmwriteBitmap);
     3238    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_VMWRITE_BITMAP_FULL, HCPhysVmwriteBitmap);
    32113239    AssertRC(rc);
    32123240}
     
    32353263    Assert(!(HCPhysHostMsrLoad & 0xf));                      /* Bits 3:0 MBZ. */
    32363264
    3237     int rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_ENTRY_MSR_LOAD_FULL, HCPhysGuestMsrLoad);   AssertRC(rc);
    3238     rc     = VMXWriteVmcs64(VMX_VMCS64_CTRL_EXIT_MSR_STORE_FULL, HCPhysGuestMsrStore);  AssertRC(rc);
    3239     rc     = VMXWriteVmcs64(VMX_VMCS64_CTRL_EXIT_MSR_LOAD_FULL,  HCPhysHostMsrLoad);    AssertRC(rc);
     3265    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_ENTRY_MSR_LOAD_FULL, HCPhysGuestMsrLoad);   AssertRC(rc);
     3266    rc     = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_EXIT_MSR_STORE_FULL, HCPhysGuestMsrStore);  AssertRC(rc);
     3267    rc     = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_EXIT_MSR_LOAD_FULL,  HCPhysHostMsrLoad);    AssertRC(rc);
    32403268    return VINF_SUCCESS;
    32413269}
     
    33583386
    33593387    /* Commit it to the VMCS and update our cache. */
    3360     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PIN_EXEC, fVal);
     3388    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PIN_EXEC, fVal);
    33613389    AssertRC(rc);
    33623390    pVmcsInfo->u32PinCtls = fVal;
     
    34373465        fVal |= VMX_PROC_CTLS2_PAUSE_LOOP_EXIT;
    34383466
    3439         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PLE_GAP, pVM->hm.s.vmx.cPleGapTicks);          AssertRC(rc);
    3440         rc     = VMXWriteVmcs32(VMX_VMCS32_CTRL_PLE_WINDOW, pVM->hm.s.vmx.cPleWindowTicks);    AssertRC(rc);
     3467        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PLE_GAP, pVM->hm.s.vmx.cPleGapTicks);          AssertRC(rc);
     3468        rc     = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PLE_WINDOW, pVM->hm.s.vmx.cPleWindowTicks);    AssertRC(rc);
    34413469    }
    34423470
     
    34503478
    34513479    /* Commit it to the VMCS and update our cache. */
    3452     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, fVal);
     3480    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, fVal);
    34533481    AssertRC(rc);
    34543482    pVmcsInfo->u32ProcCtls2 = fVal;
     
    35353563
    35363564    /* Commit it to the VMCS and update our cache. */
    3537     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, fVal);
     3565    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, fVal);
    35383566    AssertRC(rc);
    35393567    pVmcsInfo->u32ProcCtls = fVal;
     
    35803608
    35813609    Assert(pVmcsInfo->u64VmcsLinkPtr == NIL_RTHCPHYS);
    3582     int rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, NIL_RTHCPHYS);
     3610    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, NIL_RTHCPHYS);
    35833611    AssertRC(rc);
    35843612
     
    35893617        uint64_t const u64Cr4Mask = vmxHCGetFixedCr4Mask(pVCpu);
    35903618
    3591         rc = VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask);    AssertRC(rc);
    3592         rc = VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask);    AssertRC(rc);
     3619        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask);    AssertRC(rc);
     3620        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask);    AssertRC(rc);
    35933621
    35943622        pVmcsInfo->u64Cr0Mask = u64Cr0Mask;
     
    35973625        if (pVCpu->CTX_SUFF(pVM)->hmr0.s.vmx.fLbr)
    35983626        {
    3599             rc = VMXWriteVmcsNw(VMX_VMCS64_GUEST_DEBUGCTL_FULL, MSR_IA32_DEBUGCTL_LBR);
     3627            rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS64_GUEST_DEBUGCTL_FULL, MSR_IA32_DEBUGCTL_LBR);
    36003628            AssertRC(rc);
    36013629        }
     
    36353663
    36363664    /* Commit it to the VMCS. */
    3637     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
     3665    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
    36383666    AssertRC(rc);
    36393667
     
    36533681{
    36543682    Assert(pVmcsInfo->u64VmcsLinkPtr == NIL_RTHCPHYS);
    3655     int rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, NIL_RTHCPHYS);
     3683    int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, NIL_RTHCPHYS);
    36563684    AssertRC(rc);
    36573685
     
    39493977            if (pVmcsInfo->u32EntryCtls != fVal)
    39503978            {
    3951                 int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY, fVal);
     3979                int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_ENTRY, fVal);
    39523980                AssertRC(rc);
    39533981                pVmcsInfo->u32EntryCtls = fVal;
     
    40274055            if (pVmcsInfo->u32ExitCtls != fVal)
    40284056            {
    4029                 int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXIT, fVal);
     4057                int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXIT, fVal);
    40304058                AssertRC(rc);
    40314059                pVmcsInfo->u32ExitCtls = fVal;
     
    40504078    Assert(pVmcsInfo->u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW);
    40514079    RT_NOREF(pVmcsInfo);
    4052     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_TPR_THRESHOLD, u32TprThreshold);
     4080    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_TPR_THRESHOLD, u32TprThreshold);
    40534081    AssertRC(rc);
    40544082}
     
    41924220        if (   !pVmxTransient->fIsNestedGuest
    41934221            &&  pVCpu->hm.s.fGIMTrapXcptUD)
    4194             vmxHCAddXcptIntercept(pVmxTransient, X86_XCPT_UD);
     4222            vmxHCAddXcptIntercept(pVCpu, pVmxTransient, X86_XCPT_UD);
    41954223        else
    41964224            vmxHCRemoveXcptIntercept(pVCpu, pVmxTransient, X86_XCPT_UD);
     
    42154243        HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_RIP);
    42164244
    4217         int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_RIP, pVCpu->cpum.GstCtx.rip);
     4245        int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_RIP, pVCpu->cpum.GstCtx.rip);
    42184246        AssertRC(rc);
    42194247
     
    42374265        HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_RSP);
    42384266
    4239         int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_RSP, pVCpu->cpum.GstCtx.rsp);
     4267        int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_RSP, pVCpu->cpum.GstCtx.rsp);
    42404268        AssertRC(rc);
    42414269
     
    42834311        }
    42844312
    4285         int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_RFLAGS, fEFlags.u32);
     4313        int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_RFLAGS, fEFlags.u32);
    42864314        AssertRC(rc);
    42874315
     
    43344362            uint32_t const uVmcsField = pVM->hmr0.s.vmx.paShadowVmcsFields[i];
    43354363            IEMReadVmxVmcsField(pVmcsNstGst, uVmcsField, &u64Val);
    4336             VMXWriteVmcs64(uVmcsField, u64Val);
     4364            VMX_VMCS_WRITE_64(pVCpu, uVmcsField, u64Val);
    43374365        }
    43384366
     
    43494377                uint32_t const uVmcsField = pVM->hmr0.s.vmx.paShadowVmcsRoFields[i];
    43504378                IEMReadVmxVmcsField(pVmcsNstGst, uVmcsField, &u64Val);
    4351                 VMXWriteVmcs64(uVmcsField, u64Val);
     4379                VMX_VMCS_WRITE_64(pVCpu, uVmcsField, u64Val);
    43524380            }
    43534381        }
     
    43934421            uint64_t       u64Val;
    43944422            uint32_t const uVmcsField = pVM->hmr0.s.vmx.paShadowVmcsFields[i];
    4395             VMXReadVmcs64(uVmcsField, &u64Val);
     4423            VMX_VMCS_READ_64(pVCpu, uVmcsField, &u64Val);
    43964424            IEMWriteVmxVmcsField(pVmcsNstGst, uVmcsField, u64Val);
    43974425        }
     
    44184446        Assert(pVmcsInfo->HCPhysShadowVmcs != 0 && pVmcsInfo->HCPhysShadowVmcs != NIL_RTHCPHYS);
    44194447        uProcCtls2 |= VMX_PROC_CTLS2_VMCS_SHADOWING;
    4420         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, uProcCtls2);                            AssertRC(rc);
    4421         rc     = VMXWriteVmcs64(VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, pVmcsInfo->HCPhysShadowVmcs);  AssertRC(rc);
     4448        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, uProcCtls2);                            AssertRC(rc);
     4449        rc     = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, pVmcsInfo->HCPhysShadowVmcs);  AssertRC(rc);
    44224450        pVmcsInfo->u32ProcCtls2   = uProcCtls2;
    44234451        pVmcsInfo->u64VmcsLinkPtr = pVmcsInfo->HCPhysShadowVmcs;
     
    44494477    {
    44504478        uProcCtls2 &= ~VMX_PROC_CTLS2_VMCS_SHADOWING;
    4451         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, uProcCtls2);                AssertRC(rc);
    4452         rc     = VMXWriteVmcs64(VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, NIL_RTHCPHYS);     AssertRC(rc);
     4479        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, uProcCtls2);                AssertRC(rc);
     4480        rc     = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, NIL_RTHCPHYS);     AssertRC(rc);
    44534481        pVmcsInfo->u32ProcCtls2   = uProcCtls2;
    44544482        pVmcsInfo->u64VmcsLinkPtr = NIL_RTHCPHYS;
     
    46414669
    46424670            /* Commit the CR0 and related fields to the guest VMCS. */
    4643             int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR0, u64GuestCr0);               AssertRC(rc);
    4644             rc     = VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0);   AssertRC(rc);
     4671            int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_CR0, u64GuestCr0);               AssertRC(rc);
     4672            rc     = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0);   AssertRC(rc);
    46454673            if (uProcCtls != pVmcsInfo->u32ProcCtls)
    46464674            {
    4647                 rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
     4675                rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
    46484676                AssertRC(rc);
    46494677            }
    46504678            if (uXcptBitmap != pVmcsInfo->u32XcptBitmap)
    46514679            {
    4652                 rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
     4680                rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, uXcptBitmap);
    46534681                AssertRC(rc);
    46544682            }
     
    46814709
    46824710            /* Commit the CR0 and CR0 read-shadow to the nested-guest VMCS. */
    4683             int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR0, u64GuestCr0);               AssertRC(rc);
    4684             rc     = VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0);   AssertRC(rc);
     4711            int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_CR0, u64GuestCr0);               AssertRC(rc);
     4712            rc     = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0);   AssertRC(rc);
    46854713
    46864714            Log4Func(("cr0=%#RX64 shadow=%#RX64 (set=%#RX64 zap=%#RX64)\n", u64GuestCr0, u64ShadowCr0, fSetCr0, fZapCr0));
     
    47474775                         ("EPTP accessed/dirty bit not supported by CPU but set %#RX64\n", pVmcsInfo->HCPhysEPTP));
    47484776
    4749             rc = VMXWriteVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, pVmcsInfo->HCPhysEPTP);
     4777            rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_EPTP_FULL, pVmcsInfo->HCPhysEPTP);
    47504778            AssertRC(rc);
    47514779
     
    47584786                if (CPUMIsGuestInPAEModeEx(pCtx))
    47594787                {
    4760                     rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_PDPTE0_FULL, pCtx->aPaePdpes[0].u);     AssertRC(rc);
    4761                     rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_PDPTE1_FULL, pCtx->aPaePdpes[1].u);     AssertRC(rc);
    4762                     rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_PDPTE2_FULL, pCtx->aPaePdpes[2].u);     AssertRC(rc);
    4763                     rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_PDPTE3_FULL, pCtx->aPaePdpes[3].u);     AssertRC(rc);
     4788                    rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_PDPTE0_FULL, pCtx->aPaePdpes[0].u);     AssertRC(rc);
     4789                    rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_PDPTE1_FULL, pCtx->aPaePdpes[1].u);     AssertRC(rc);
     4790                    rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_PDPTE2_FULL, pCtx->aPaePdpes[2].u);     AssertRC(rc);
     4791                    rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_PDPTE3_FULL, pCtx->aPaePdpes[3].u);     AssertRC(rc);
    47644792                }
    47654793
     
    47984826
    47994827            Log4Func(("guest_cr3=%#RX64 (GstN)\n", u64GuestCr3));
    4800             rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR3, u64GuestCr3);
     4828            rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_CR3, u64GuestCr3);
    48014829            AssertRC(rc);
    48024830        }
     
    48084836
    48094837            Log4Func(("guest_cr3=%#RX64 (HstN)\n", HCPhysGuestCr3));
    4810             rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR3, HCPhysGuestCr3);
     4838            rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_CR3, HCPhysGuestCr3);
    48114839            AssertRC(rc);
    48124840        }
     
    49144942
    49154943        /* Commit the CR4 and CR4 read-shadow to the guest VMCS. */
    4916         rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR4, u64GuestCr4);               AssertRC(rc);
    4917         rc = VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, u64ShadowCr4);   AssertRC(rc);
     4944        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_CR4, u64GuestCr4);               AssertRC(rc);
     4945        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR4_READ_SHADOW, u64ShadowCr4);   AssertRC(rc);
    49184946
    49194947        /* Whether to save/load/restore XCR0 during world switch depends on CR4.OSXSAVE and host+guest XCR0. */
     
    49544982    if (pVmxTransient->fIsNestedGuest)
    49554983    {
    4956         int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_DR7, CPUMGetGuestDR7(pVCpu));
     4984        int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_DR7, CPUMGetGuestDR7(pVCpu));
    49574985        AssertRC(rc);
    49584986
     
    50715099    if (uProcCtls != pVmcsInfo->u32ProcCtls)
    50725100    {
    5073         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
     5101        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls);
    50745102        AssertRC(rc);
    50755103        pVmcsInfo->u32ProcCtls = uProcCtls;
     
    50795107     * Update guest DR7.
    50805108     */
    5081     int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_DR7, u64GuestDr7);
     5109    int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_DR7, u64GuestDr7);
    50825110    AssertRC(rc);
    50835111
     
    50945122
    50955123        uint32_t fIntrState = 0;
    5096         rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &fIntrState);
     5124        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, &fIntrState);
    50975125        AssertRC(rc);
    50985126
     
    51005128        {
    51015129            fIntrState &= ~(VMX_VMCS_GUEST_INT_STATE_BLOCK_STI | VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS);
    5102             rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_INT_STATE, fIntrState);
     5130            rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, fIntrState);
    51035131            AssertRC(rc);
    51045132        }
     
    53375365    Assert((uint32_t)VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg) == g_aVmcsSegAttr[iSegReg]);
    53385366    Assert((uint32_t)VMX_VMCS_GUEST_SEG_BASE(iSegReg)            == g_aVmcsSegBase[iSegReg]);
    5339     int rc = VMXWriteVmcs32(VMX_VMCS16_GUEST_SEG_SEL(iSegReg),           pSelReg->Sel);      AssertRC(rc);
    5340     rc     = VMXWriteVmcs32(VMX_VMCS32_GUEST_SEG_LIMIT(iSegReg),         pSelReg->u32Limit); AssertRC(rc);
    5341     rc     = VMXWriteVmcsNw(VMX_VMCS_GUEST_SEG_BASE(iSegReg),            pSelReg->u64Base);  AssertRC(rc);
    5342     rc     = VMXWriteVmcs32(VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg), u32Access);         AssertRC(rc);
     5367    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS16_GUEST_SEG_SEL(iSegReg),           pSelReg->Sel);      AssertRC(rc);
     5368    rc     = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_SEG_LIMIT(iSegReg),         pSelReg->u32Limit); AssertRC(rc);
     5369    rc     = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_SEG_BASE(iSegReg),            pSelReg->u64Base);  AssertRC(rc);
     5370    rc     = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg), u32Access);         AssertRC(rc);
    53435371    return VINF_SUCCESS;
    53445372}
     
    54965524               || (u32AccessRights & RT_BIT(15)));              /* Granularity MB1. */
    54975525
    5498         rc = VMXWriteVmcs16(VMX_VMCS16_GUEST_TR_SEL,           u16Sel);             AssertRC(rc);
    5499         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_TR_LIMIT,         u32Limit);           AssertRC(rc);
    5500         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, u32AccessRights);    AssertRC(rc);
    5501         rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_TR_BASE,            u64Base);            AssertRC(rc);
     5526        rc = VMX_VMCS_WRITE_16(pVCpu, VMX_VMCS16_GUEST_TR_SEL,           u16Sel);             AssertRC(rc);
     5527        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_TR_LIMIT,         u32Limit);           AssertRC(rc);
     5528        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, u32AccessRights);    AssertRC(rc);
     5529        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_TR_BASE,            u64Base);            AssertRC(rc);
    55025530
    55035531        ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_TR);
     
    55125540        HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_GDTR);
    55135541
    5514         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_GDTR_LIMIT, pCtx->gdtr.cbGdt);     AssertRC(rc);
    5515         rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_GDTR_BASE,  pCtx->gdtr.pGdt);        AssertRC(rc);
     5542        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_GDTR_LIMIT, pCtx->gdtr.cbGdt);     AssertRC(rc);
     5543        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_GDTR_BASE,  pCtx->gdtr.pGdt);        AssertRC(rc);
    55165544
    55175545        /* Validate. */
     
    55375565            u32Access = pCtx->ldtr.Attr.u;
    55385566
    5539         rc = VMXWriteVmcs16(VMX_VMCS16_GUEST_LDTR_SEL,           pCtx->ldtr.Sel);       AssertRC(rc);
    5540         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_LDTR_LIMIT,         pCtx->ldtr.u32Limit);  AssertRC(rc);
    5541         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, u32Access);            AssertRC(rc);
    5542         rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_LDTR_BASE,            pCtx->ldtr.u64Base);   AssertRC(rc);
     5567        rc = VMX_VMCS_WRITE_16(pVCpu, VMX_VMCS16_GUEST_LDTR_SEL,           pCtx->ldtr.Sel);       AssertRC(rc);
     5568        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_LDTR_LIMIT,         pCtx->ldtr.u32Limit);  AssertRC(rc);
     5569        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, u32Access);            AssertRC(rc);
     5570        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_LDTR_BASE,            pCtx->ldtr.u64Base);   AssertRC(rc);
    55435571
    55445572        /* Validate. */
     
    55685596        HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_IDTR);
    55695597
    5570         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_IDTR_LIMIT, pCtx->idtr.cbIdt);     AssertRC(rc);
    5571         rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_IDTR_BASE,  pCtx->idtr.pIdt);        AssertRC(rc);
     5598        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_IDTR_LIMIT, pCtx->idtr.cbIdt);     AssertRC(rc);
     5599        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_IDTR_BASE,  pCtx->idtr.pIdt);        AssertRC(rc);
    55725600
    55735601        /* Validate. */
     
    56365664        if (ASMAtomicUoReadU64(&pVCpu->hm.s.fCtxChanged) & HM_CHANGED_GUEST_SYSENTER_CS_MSR)
    56375665        {
    5638             int rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_SYSENTER_CS, pCtx->SysEnter.cs);
     5666            int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_SYSENTER_CS, pCtx->SysEnter.cs);
    56395667            AssertRC(rc);
    56405668            ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_SYSENTER_CS_MSR);
     
    56435671        if (ASMAtomicUoReadU64(&pVCpu->hm.s.fCtxChanged) & HM_CHANGED_GUEST_SYSENTER_EIP_MSR)
    56445672        {
    5645             int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_SYSENTER_EIP, pCtx->SysEnter.eip);
     5673            int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_SYSENTER_EIP, pCtx->SysEnter.eip);
    56465674            AssertRC(rc);
    56475675            ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_SYSENTER_EIP_MSR);
     
    56505678        if (ASMAtomicUoReadU64(&pVCpu->hm.s.fCtxChanged) & HM_CHANGED_GUEST_SYSENTER_ESP_MSR)
    56515679        {
    5652             int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_SYSENTER_ESP, pCtx->SysEnter.esp);
     5680            int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_SYSENTER_ESP, pCtx->SysEnter.esp);
    56535681            AssertRC(rc);
    56545682            ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_SYSENTER_ESP_MSR);
     
    56925720            if (g_fHmVmxSupportsVmcsEfer)
    56935721            {
    5694                 int rc = VMXWriteVmcs64(VMX_VMCS64_GUEST_EFER_FULL, uGuestEferMsr);
     5722                int rc = VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_GUEST_EFER_FULL, uGuestEferMsr);
    56955723                AssertRC(rc);
    56965724            }
     
    58185846        case VERR_VMX_UNABLE_TO_START_VM:   /* VMLAUNCH/VMRESUME itself failed. */
    58195847        {
    5820             int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_REASON, &pVCpu->hm.s.vmx.LastError.u32ExitReason);
    5821             rc    |= VMXReadVmcs32(VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError);
     5848            int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_REASON, &pVCpu->hm.s.vmx.LastError.u32ExitReason);
     5849            rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError);
    58225850            AssertRC(rc);
    5823             vmxHCReadExitQualVmcs(pVmxTransient);
     5851            vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    58245852
    58255853            pVCpu->hm.s.vmx.LastError.idEnteredCpu = pVCpu->hmr0.s.idEnteredCpu;
     
    59315959                            {
    59325960                                uint16_t u16Val;
    5933                                 rc = VMXReadVmcs16(uVmcsField, &u16Val);
     5961                                rc = VMX_VMCS_READ_16(pVCpu, uVmcsField, &u16Val);
    59345962                                AssertRC(rc);
    59355963                                Log4(("%-40s = %#RX16\n", s_aVmcsFields[i].pszName, u16Val));
     
    59575985                            {
    59585986                                uint32_t u32Val;
    5959                                 rc = VMXReadVmcs32(uVmcsField, &u32Val);
     5987                                rc = VMX_VMCS_READ_32(pVCpu, uVmcsField, &u32Val);
    59605988                                AssertRC(rc);
    59615989                                Log4(("%-40s = %#RX32\n", s_aVmcsFields[i].pszName, u32Val));
     
    59675995                            {
    59685996                                uint64_t u64Val;
    5969                                 rc = VMXReadVmcs64(uVmcsField, &u64Val);
     5997                                rc = VMX_VMCS_READ_64(pVCpu, uVmcsField, &u64Val);
    59705998                                AssertRC(rc);
    59715999                                Log4(("%-40s = %#RX64\n", s_aVmcsFields[i].pszName, u64Val));
     
    60576085         *        after converting the timer value to the host. */
    60586086        uint32_t const cPreemptionTickCount = (uint32_t)RT_MIN(cTicksToDeadline, UINT32_MAX - 16);
    6059         int rc = VMXWriteVmcs32(VMX_VMCS32_PREEMPT_TIMER_VALUE, cPreemptionTickCount);
     6087        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_PREEMPT_TIMER_VALUE, cPreemptionTickCount);
    60606088        AssertRC(rc);
    60616089    }
     
    60796107        if (pVmxTransient->fIsNestedGuest)
    60806108            uTscOffset = CPUMApplyNestedGuestTscOffset(pVCpu, uTscOffset);
    6081         vmxHCSetTscOffsetVmcs(pVmcsInfo, uTscOffset);
     6109        vmxHCSetTscOffsetVmcs(pVCpu, pVmcsInfo, uTscOffset);
    60826110        vmxHCRemoveProcCtlsVmcs(pVCpu, pVmxTransient, VMX_PROC_CTLS_RDTSC_EXIT);
    60836111    }
     
    63546382
    63556383    uint16_t u16Sel;
    6356     int rc = VMXReadVmcs16(VMX_VMCS16_GUEST_SEG_SEL(iSegReg), &u16Sel);   AssertRC(rc);
     6384    int rc = VMX_VMCS_READ_16(pVCpu, VMX_VMCS16_GUEST_SEG_SEL(iSegReg), &u16Sel);   AssertRC(rc);
    63576385    pSelReg->Sel      = u16Sel;
    63586386    pSelReg->ValidSel = u16Sel;
    63596387
    6360     rc     = VMXReadVmcs32(VMX_VMCS32_GUEST_SEG_LIMIT(iSegReg), &pSelReg->u32Limit); AssertRC(rc);
    6361     rc     = VMXReadVmcsNw(VMX_VMCS_GUEST_SEG_BASE(iSegReg), &pSelReg->u64Base);     AssertRC(rc);
     6388    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SEG_LIMIT(iSegReg), &pSelReg->u32Limit); AssertRC(rc);
     6389    rc     = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_SEG_BASE(iSegReg), &pSelReg->u64Base);     AssertRC(rc);
    63626390
    63636391    uint32_t u32Attr;
    6364     rc     = VMXReadVmcs32(VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg), &u32Attr);   AssertRC(rc);
     6392    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg), &u32Attr);   AssertRC(rc);
    63656393    pSelReg->Attr.u   = u32Attr;
    63666394    if (u32Attr & X86DESCATTR_UNUSABLE)
     
    63836411    uint64_t u64Base;
    63846412    uint32_t u32Limit, u32Attr;
    6385     int rc = VMXReadVmcs16(VMX_VMCS16_GUEST_LDTR_SEL,           &u16Sel);       AssertRC(rc);
    6386     rc     = VMXReadVmcs32(VMX_VMCS32_GUEST_LDTR_LIMIT,         &u32Limit);     AssertRC(rc);
    6387     rc     = VMXReadVmcs32(VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, &u32Attr);      AssertRC(rc);
    6388     rc     = VMXReadVmcsNw(VMX_VMCS_GUEST_LDTR_BASE,            &u64Base);      AssertRC(rc);
     6413    int rc = VMX_VMCS_READ_16(pVCpu, VMX_VMCS16_GUEST_LDTR_SEL,           &u16Sel);       AssertRC(rc);
     6414    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_LDTR_LIMIT,         &u32Limit);     AssertRC(rc);
     6415    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, &u32Attr);      AssertRC(rc);
     6416    rc     = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_LDTR_BASE,            &u64Base);      AssertRC(rc);
    63896417
    63906418    pVCpu->cpum.GstCtx.ldtr.Sel      = u16Sel;
     
    64116439    uint64_t u64Base;
    64126440    uint32_t u32Limit, u32Attr;
    6413     int rc = VMXReadVmcs16(VMX_VMCS16_GUEST_TR_SEL,           &u16Sel);     AssertRC(rc);
    6414     rc     = VMXReadVmcs32(VMX_VMCS32_GUEST_TR_LIMIT,         &u32Limit);   AssertRC(rc);
    6415     rc     = VMXReadVmcs32(VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, &u32Attr);    AssertRC(rc);
    6416     rc     = VMXReadVmcsNw(VMX_VMCS_GUEST_TR_BASE,            &u64Base);    AssertRC(rc);
     6441    int rc = VMX_VMCS_READ_16(pVCpu, VMX_VMCS16_GUEST_TR_SEL,           &u16Sel);     AssertRC(rc);
     6442    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_TR_LIMIT,         &u32Limit);   AssertRC(rc);
     6443    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, &u32Attr);    AssertRC(rc);
     6444    rc     = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_TR_BASE,            &u64Base);    AssertRC(rc);
    64176445
    64186446    pVCpu->cpum.GstCtx.tr.Sel      = u16Sel;
     
    64426470    if (pCtx->fExtrn & CPUMCTX_EXTRN_RIP)
    64436471    {
    6444         int rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RIP, &u64Val);
     6472        int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_RIP, &u64Val);
    64456473        AssertRC(rc);
    64466474
     
    64686496    {
    64696497        uint64_t u64Val;
    6470         int rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RFLAGS, &u64Val);
     6498        int rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_RFLAGS, &u64Val);
    64716499        AssertRC(rc);
    64726500
     
    64986526{
    64996527    uint32_t u32Val;
    6500     int rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &u32Val);    AssertRC(rc);
     6528    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, &u32Val);    AssertRC(rc);
    65016529    if (!u32Val)
    65026530    {
     
    65796607            if (fWhat & CPUMCTX_EXTRN_RSP)
    65806608            {
    6581                 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RSP, &pCtx->rsp);
     6609                rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_RSP, &pCtx->rsp);
    65826610                AssertRC(rc);
    65836611            }
     
    66346662                if (fWhat & CPUMCTX_EXTRN_GDTR)
    66356663                {
    6636                     rc = VMXReadVmcsNw(VMX_VMCS_GUEST_GDTR_BASE,    &pCtx->gdtr.pGdt);  AssertRC(rc);
    6637                     rc = VMXReadVmcs32(VMX_VMCS32_GUEST_GDTR_LIMIT, &u32Val);           AssertRC(rc);
     6664                    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_GDTR_BASE,    &pCtx->gdtr.pGdt);  AssertRC(rc);
     6665                    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_GDTR_LIMIT, &u32Val);           AssertRC(rc);
    66386666                    pCtx->gdtr.cbGdt = u32Val;
    66396667                }
     
    66426670                if (fWhat & CPUMCTX_EXTRN_IDTR)
    66436671                {
    6644                     rc = VMXReadVmcsNw(VMX_VMCS_GUEST_IDTR_BASE,    &pCtx->idtr.pIdt);  AssertRC(rc);
    6645                     rc = VMXReadVmcs32(VMX_VMCS32_GUEST_IDTR_LIMIT, &u32Val);           AssertRC(rc);
     6672                    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_IDTR_BASE,    &pCtx->idtr.pIdt);  AssertRC(rc);
     6673                    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_IDTR_LIMIT, &u32Val);           AssertRC(rc);
    66466674                    pCtx->idtr.cbIdt = u32Val;
    66476675                }
     
    66616689                if (!pVCpu->hmr0.s.fUsingHyperDR7)
    66626690                {
    6663                     rc = VMXReadVmcsNw(VMX_VMCS_GUEST_DR7, &pCtx->dr[7]);
     6691                    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_DR7, &pCtx->dr[7]);
    66646692                    AssertRC(rc);
    66656693                }
     
    66686696            if (fWhat & CPUMCTX_EXTRN_SYSENTER_MSRS)
    66696697            {
    6670                 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_SYSENTER_EIP,  &pCtx->SysEnter.eip);  AssertRC(rc);
    6671                 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_SYSENTER_ESP,  &pCtx->SysEnter.esp);  AssertRC(rc);
    6672                 rc = VMXReadVmcs32(VMX_VMCS32_GUEST_SYSENTER_CS, &u32Val);              AssertRC(rc);
     6698                rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_SYSENTER_EIP,  &pCtx->SysEnter.eip);  AssertRC(rc);
     6699                rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_SYSENTER_ESP,  &pCtx->SysEnter.esp);  AssertRC(rc);
     6700                rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SYSENTER_CS, &u32Val);              AssertRC(rc);
    66736701                pCtx->SysEnter.cs = u32Val;
    66746702            }
     
    67486776                    uint64_t u64Cr0;
    67496777                    uint64_t u64Shadow;
    6750                     rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR0,            &u64Cr0);       AssertRC(rc);
    6751                     rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, &u64Shadow);    AssertRC(rc);
     6778                    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_CR0,            &u64Cr0);       AssertRC(rc);
     6779                    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_CTRL_CR0_READ_SHADOW, &u64Shadow);    AssertRC(rc);
    67526780#ifndef VBOX_WITH_NESTED_HWVIRT_VMX
    67536781                    u64Cr0 = (u64Cr0    & ~pVmcsInfo->u64Cr0Mask)
     
    67826810                    uint64_t u64Cr4;
    67836811                    uint64_t u64Shadow;
    6784                     rc  = VMXReadVmcsNw(VMX_VMCS_GUEST_CR4,            &u64Cr4);      AssertRC(rc);
    6785                     rc |= VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Shadow);   AssertRC(rc);
     6812                    rc  = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_CR4,            &u64Cr4);      AssertRC(rc);
     6813                    rc |= VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Shadow);   AssertRC(rc);
    67866814#ifndef VBOX_WITH_NESTED_HWVIRT_VMX
    67876815                    u64Cr4 = (u64Cr4    & ~pVmcsInfo->u64Cr4Mask)
     
    68186846                    {
    68196847                        uint64_t u64Cr3;
    6820                         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR3, &u64Cr3);  AssertRC(rc);
     6848                        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_CR3, &u64Cr3);  AssertRC(rc);
    68216849                        if (pCtx->cr3 != u64Cr3)
    68226850                        {
     
    68326860                        {
    68336861                            X86PDPE aPaePdpes[4];
    6834                             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE0_FULL, &aPaePdpes[0].u);     AssertRC(rc);
    6835                             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE1_FULL, &aPaePdpes[1].u);     AssertRC(rc);
    6836                             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE2_FULL, &aPaePdpes[2].u);     AssertRC(rc);
    6837                             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE3_FULL, &aPaePdpes[3].u);     AssertRC(rc);
     6862                            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE0_FULL, &aPaePdpes[0].u);     AssertRC(rc);
     6863                            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE1_FULL, &aPaePdpes[1].u);     AssertRC(rc);
     6864                            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE2_FULL, &aPaePdpes[2].u);     AssertRC(rc);
     6865                            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE3_FULL, &aPaePdpes[3].u);     AssertRC(rc);
    68386866                            if (memcmp(&aPaePdpes[0], &pCtx->aPaePdpes[0], sizeof(aPaePdpes)))
    68396867                            {
     
    71607188        {
    71617189            pVmcsInfo->u32ProcCtls |= VMX_PROC_CTLS_INT_WINDOW_EXIT;
    7162             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     7190            int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    71637191            AssertRC(rc);
    71647192        }
     
    71777205    {
    71787206        pVmcsInfo->u32ProcCtls &= ~VMX_PROC_CTLS_INT_WINDOW_EXIT;
    7179         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     7207        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    71807208        AssertRC(rc);
    71817209    }
     
    71967224        {
    71977225            pVmcsInfo->u32ProcCtls |= VMX_PROC_CTLS_NMI_WINDOW_EXIT;
    7198             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     7226            int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    71997227            AssertRC(rc);
    72007228            Log4Func(("Setup NMI-window exiting\n"));
     
    72147242    {
    72157243        pVmcsInfo->u32ProcCtls &= ~VMX_PROC_CTLS_NMI_WINDOW_EXIT;
    7216         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     7244        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    72177245        AssertRC(rc);
    72187246    }
     
    74417469
    74427470        /* Clear the events from the VMCS. */
    7443         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, 0);    AssertRC(rc);
    7444         rc     = VMXWriteVmcs32(VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, 0);         AssertRC(rc);
     7471        int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, 0);    AssertRC(rc);
     7472        rc     = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, 0);         AssertRC(rc);
    74457473    }
    74467474#ifdef VBOX_STRICT
     
    74647492        uint32_t uExitReason;
    74657493        uint32_t uEntryIntInfo;
    7466         int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_REASON, &uExitReason);
    7467         rc    |= VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, &uEntryIntInfo);
     7494        int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_REASON, &uExitReason);
     7495        rc    |= VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, &uEntryIntInfo);
    74687496        AssertRC(rc);
    74697497        AssertMsg(VMX_EXIT_REASON_HAS_ENTRY_FAILED(uExitReason) || !VMX_ENTRY_INT_INFO_IS_VALID(uEntryIntInfo),
     
    77937821     * Inject the event into the VMCS.
    77947822     */
    7795     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, u32IntInfo);
     7823    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, u32IntInfo);
    77967824    if (VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(u32IntInfo))
    7797         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY_EXCEPTION_ERRCODE, u32ErrCode);
    7798     rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_ENTRY_INSTR_LENGTH, cbInstr);
     7825        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_EXCEPTION_ERRCODE, u32ErrCode);
     7826    rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INSTR_LENGTH, cbInstr);
    77997827    AssertRC(rc);
    78007828
     
    80668094            Assert(!DBGFIsStepping(pVCpu));
    80678095            uint8_t const fTrapFlag = !!(pVCpu->cpum.GstCtx.eflags.u32 & X86_EFL_TF);
    8068             int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, fTrapFlag << VMX_BF_VMCS_PENDING_DBG_XCPT_BS_SHIFT);
     8096            int rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, fTrapFlag << VMX_BF_VMCS_PENDING_DBG_XCPT_BS_SHIFT);
    80698097            AssertRC(rc);
    80708098        }
     
    80888116     * pending debug exceptions as well as updates to the guest state from ring-3 (IEM).
    80898117     */
    8090     int rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_INT_STATE, fIntrState);
     8118    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, fIntrState);
    80918119    AssertRC(rc);
    80928120
     
    83408368         * VMCS value and avoids causing further confusion.
    83418369         */
    8342         rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &u32IntrState);
     8370        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, &u32IntrState);
    83438371        AssertRC(rc);
    83448372
     
    83588386
    83598387        uint64_t u64GuestCr0;
    8360         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR0, &u64GuestCr0);
     8388        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_CR0, &u64GuestCr0);
    83618389        AssertRC(rc);
    83628390        HMVMX_CHECK_BREAK((u64GuestCr0 & fSetCr0) == fSetCr0, VMX_IGS_CR0_FIXED1);
     
    83758403
    83768404        uint64_t u64GuestCr4;
    8377         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR4, &u64GuestCr4);
     8405        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_CR4, &u64GuestCr4);
    83788406        AssertRC(rc);
    83798407        HMVMX_CHECK_BREAK((u64GuestCr4 & fSetCr4) == fSetCr4, VMX_IGS_CR4_FIXED1);
     
    83838411         * IA32_DEBUGCTL MSR.
    83848412         */
    8385         rc = VMXReadVmcs64(VMX_VMCS64_GUEST_DEBUGCTL_FULL, &u64Val);
     8413        rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_DEBUGCTL_FULL, &u64Val);
    83868414        AssertRC(rc);
    83878415        if (   (pVmcsInfo->u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG)
     
    83938421
    83948422#ifdef VBOX_STRICT
    8395         rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY, &u32Val);
     8423        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY, &u32Val);
    83968424        AssertRC(rc);
    83978425        Assert(u32Val == pVmcsInfo->u32EntryCtls);
     
    84028430         * RIP and RFLAGS.
    84038431         */
    8404         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RIP, &u64Val);
     8432        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_RIP, &u64Val);
    84058433        AssertRC(rc);
    84068434        /* pCtx->rip can be different than the one in the VMCS (e.g. run guest code and VM-exits that don't update it). */
     
    84148442
    84158443        /* Flags in pCtx can be different (real-on-v86 for instance). We are only concerned about the VMCS contents here. */
    8416         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RFLAGS, &u64Val);
     8444        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_RFLAGS, &u64Val);
    84178445        AssertRC(rc);
    84188446        HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0xffffffffffc08028)),                     /* Bit 63:22, Bit 15, 5, 3 MBZ. */
     
    84298457
    84308458        uint32_t u32EntryInfo;
    8431         rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, &u32EntryInfo);
     8459        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_CTRL_ENTRY_INTERRUPTION_INFO, &u32EntryInfo);
    84328460        AssertRC(rc);
    84338461        if (VMX_ENTRY_INT_INFO_IS_EXT_INT(u32EntryInfo))
     
    84548482            HMVMX_ERROR_BREAK(VMX_IGS_DR7_RESERVED);
    84558483
    8456         rc = VMXReadVmcsNw(VMX_VMCS_HOST_SYSENTER_ESP, &u64Val);
     8484        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_HOST_SYSENTER_ESP, &u64Val);
    84578485        AssertRC(rc);
    84588486        HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_SYSENTER_ESP_NOT_CANONICAL);
    84598487
    8460         rc = VMXReadVmcsNw(VMX_VMCS_HOST_SYSENTER_EIP, &u64Val);
     8488        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_HOST_SYSENTER_EIP, &u64Val);
    84618489        AssertRC(rc);
    84628490        HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_SYSENTER_EIP_NOT_CANONICAL);
     
    84678495        if (pVmcsInfo->u32EntryCtls & VMX_ENTRY_CTLS_LOAD_PERF_MSR)
    84688496        {
    8469             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PERF_GLOBAL_CTRL_FULL, &u64Val);
     8497            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PERF_GLOBAL_CTRL_FULL, &u64Val);
    84708498            AssertRC(rc);
    84718499            HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0xfffffff8fffffffc)),
     
    84788506        if (pVmcsInfo->u32EntryCtls & VMX_ENTRY_CTLS_LOAD_PAT_MSR)
    84798507        {
    8480             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PAT_FULL, &u64Val);
     8508            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PAT_FULL, &u64Val);
    84818509            AssertRC(rc);
    84828510            HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0x707070707070707)), VMX_IGS_PAT_MSR_RESERVED);
     
    85018529        {
    85028530            Assert(g_fHmVmxSupportsVmcsEfer);
    8503             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_EFER_FULL, &u64Val);
     8531            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_EFER_FULL, &u64Val);
    85048532            AssertRC(rc);
    85058533            HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0xfffffffffffff2fe)),
     
    87218749         * GDTR and IDTR (64-bit capable checks).
    87228750         */
    8723         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_GDTR_BASE, &u64Val);
     8751        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_GDTR_BASE, &u64Val);
    87248752        AssertRC(rc);
    87258753        HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_GDTR_BASE_NOT_CANONICAL);
    87268754
    8727         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_IDTR_BASE, &u64Val);
     8755        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_IDTR_BASE, &u64Val);
    87288756        AssertRC(rc);
    87298757        HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_IDTR_BASE_NOT_CANONICAL);
    87308758
    8731         rc = VMXReadVmcs32(VMX_VMCS32_GUEST_GDTR_LIMIT, &u32Val);
     8759        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_GDTR_LIMIT, &u32Val);
    87328760        AssertRC(rc);
    87338761        HMVMX_CHECK_BREAK(!(u32Val & 0xffff0000), VMX_IGS_GDTR_LIMIT_INVALID);      /* Bits 31:16 MBZ. */
    87348762
    8735         rc = VMXReadVmcs32(VMX_VMCS32_GUEST_IDTR_LIMIT, &u32Val);
     8763        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_IDTR_LIMIT, &u32Val);
    87368764        AssertRC(rc);
    87378765        HMVMX_CHECK_BREAK(!(u32Val & 0xffff0000), VMX_IGS_IDTR_LIMIT_INVALID);      /* Bits 31:16 MBZ. */
     
    87428770        /* Activity State. */
    87438771        uint32_t u32ActivityState;
    8744         rc = VMXReadVmcs32(VMX_VMCS32_GUEST_ACTIVITY_STATE, &u32ActivityState);
     8772        rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_ACTIVITY_STATE, &u32ActivityState);
    87458773        AssertRC(rc);
    87468774        HMVMX_CHECK_BREAK(   !u32ActivityState
     
    87928820
    87938821        /* Pending debug exceptions. */
    8794         rc = VMXReadVmcsNw(VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, &u64Val);
     8822        rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, &u64Val);
    87958823        AssertRC(rc);
    87968824        /* Bits 63:15, Bit 13, Bits 11:4 MBZ. */
     
    88178845
    88188846        /* VMCS link pointer. */
    8819         rc = VMXReadVmcs64(VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, &u64Val);
     8847        rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_VMCS_LINK_PTR_FULL, &u64Val);
    88208848        AssertRC(rc);
    88218849        if (u64Val != UINT64_C(0xffffffffffffffff))
     
    88408868            && CPUMIsGuestInPAEModeEx(pCtx))
    88418869        {
    8842             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE0_FULL, &u64Val);
     8870            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE0_FULL, &u64Val);
    88438871            AssertRC(rc);
    88448872            HMVMX_CHECK_BREAK(!(u64Val & X86_PDPE_PAE_MBZ_MASK), VMX_IGS_PAE_PDPTE_RESERVED);
    88458873
    8846             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE1_FULL, &u64Val);
     8874            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE1_FULL, &u64Val);
    88478875            AssertRC(rc);
    88488876            HMVMX_CHECK_BREAK(!(u64Val & X86_PDPE_PAE_MBZ_MASK), VMX_IGS_PAE_PDPTE_RESERVED);
    88498877
    8850             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE2_FULL, &u64Val);
     8878            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE2_FULL, &u64Val);
    88518879            AssertRC(rc);
    88528880            HMVMX_CHECK_BREAK(!(u64Val & X86_PDPE_PAE_MBZ_MASK), VMX_IGS_PAE_PDPTE_RESERVED);
    88538881
    8854             rc = VMXReadVmcs64(VMX_VMCS64_GUEST_PDPTE3_FULL, &u64Val);
     8882            rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_GUEST_PDPTE3_FULL, &u64Val);
    88558883            AssertRC(rc);
    88568884            HMVMX_CHECK_BREAK(!(u64Val & X86_PDPE_PAE_MBZ_MASK), VMX_IGS_PAE_PDPTE_RESERVED);
     
    92639291    int rc = VINF_SUCCESS;
    92649292    if (pVmcsInfoNstGst->u32PinCtls != u32PinCtls)
    9265         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PIN_EXEC, u32PinCtls);
     9293        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PIN_EXEC, u32PinCtls);
    92669294    if (pVmcsInfoNstGst->u32ProcCtls != u32ProcCtls)
    9267         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, u32ProcCtls);
     9295        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, u32ProcCtls);
    92689296    if (pVmcsInfoNstGst->u32ProcCtls2 != u32ProcCtls2)
    9269         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, u32ProcCtls2);
     9297        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, u32ProcCtls2);
    92709298    if (pVmcsInfoNstGst->u32XcptBitmap != u32XcptBitmap)
    9271         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, u32XcptBitmap);
     9299        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, u32XcptBitmap);
    92729300    if (pVmcsInfoNstGst->u64Cr0Mask != u64Cr0Mask)
    9273         rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask);
     9301        rc |= VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask);
    92749302    if (pVmcsInfoNstGst->u64Cr4Mask != u64Cr4Mask)
    9275         rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask);
     9303        rc |= VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask);
    92769304    if (pVmcsInfoNstGst->u32XcptPFMask != u32XcptPFMask)
    9277         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PAGEFAULT_ERROR_MASK, u32XcptPFMask);
     9305        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PAGEFAULT_ERROR_MASK, u32XcptPFMask);
    92789306    if (pVmcsInfoNstGst->u32XcptPFMatch != u32XcptPFMatch)
    9279         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PAGEFAULT_ERROR_MATCH, u32XcptPFMatch);
     9307        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PAGEFAULT_ERROR_MATCH, u32XcptPFMatch);
    92809308    if (   !(u32ProcCtls  & VMX_PROC_CTLS_PAUSE_EXIT)
    92819309        &&  (u32ProcCtls2 & VMX_PROC_CTLS2_PAUSE_LOOP_EXIT))
    92829310    {
    92839311        Assert(g_HmMsrs.u.vmx.ProcCtls2.n.allowed1 & VMX_PROC_CTLS2_PAUSE_LOOP_EXIT);
    9284         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PLE_GAP, cPleGapTicks);
    9285         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PLE_WINDOW, cPleWindowTicks);
     9312        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PLE_GAP, cPleGapTicks);
     9313        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PLE_WINDOW, cPleWindowTicks);
    92869314    }
    92879315    if (u32ProcCtls & VMX_PROC_CTLS_USE_TPR_SHADOW)
    92889316    {
    9289         rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_TPR_THRESHOLD, u32TprThreshold);
    9290         rc |= VMXWriteVmcs64(VMX_VMCS64_CTRL_VIRT_APIC_PAGEADDR_FULL, HCPhysVirtApic);
     9317        rc |= VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_TPR_THRESHOLD, u32TprThreshold);
     9318        rc |= VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_VIRT_APIC_PAGEADDR_FULL, HCPhysVirtApic);
    92919319    }
    92929320    if (u32ProcCtls2 & VMX_PROC_CTLS2_VIRT_APIC_ACCESS)
    9293         rc |= VMXWriteVmcs64(VMX_VMCS64_CTRL_APIC_ACCESSADDR_FULL, HCPhysApicAccess);
    9294     rc |= VMXWriteVmcsNw(VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, uPendingDbgXcpts);
     9321        rc |= VMX_VMCS_WRITE_64(pVCpu, VMX_VMCS64_CTRL_APIC_ACCESSADDR_FULL, HCPhysApicAccess);
     9322    rc |= VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_PENDING_DEBUG_XCPTS, uPendingDbgXcpts);
    92959323    AssertRC(rc);
    92969324
     
    98079835     */
    98089836    uint32_t uExitReason;
    9809     int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_REASON, &uExitReason);
     9837    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_RO_EXIT_REASON, &uExitReason);
    98109838    AssertRC(rc);
    98119839    pVmxTransient->uExitReason    = VMX_EXIT_REASON_BASIC(uExitReason);
     
    98609888
    98619889#ifdef HMVMX_ALWAYS_SAVE_RO_GUEST_STATE
    9862             vmxHCReadAllRoFieldsVmcs(pVmxTransient);
     9890            vmxHCReadAllRoFieldsVmcs(pVCpu, pVmxTransient);
    98639891#endif
    98649892
     
    1026110289        pVmcsInfo->u32ProcCtls |= pDbgState->fCpe1Extra;
    1026210290        pVmcsInfo->u32ProcCtls &= ~pDbgState->fCpe1Unwanted;
    10263         VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     10291        VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    1026410292        Log6Func(("VMX_VMCS32_CTRL_PROC_EXEC: %#RX32\n", pVmcsInfo->u32ProcCtls));
    1026510293        pDbgState->fModifiedProcCtls   = true;
     
    1026910297    {
    1027010298        pVmcsInfo->u32ProcCtls2  |= pDbgState->fCpe2Extra;
    10271         VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, pVmcsInfo->u32ProcCtls2);
     10299        VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, pVmcsInfo->u32ProcCtls2);
    1027210300        Log6Func(("VMX_VMCS32_CTRL_PROC_EXEC2: %#RX32\n", pVmcsInfo->u32ProcCtls2));
    1027310301        pDbgState->fModifiedProcCtls2  = true;
     
    1027710305    {
    1027810306        pVmcsInfo->u32XcptBitmap |= pDbgState->bmXcptExtra;
    10279         VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, pVmcsInfo->u32XcptBitmap);
     10307        VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_EXCEPTION_BITMAP, pVmcsInfo->u32XcptBitmap);
    1028010308        Log6Func(("VMX_VMCS32_CTRL_EXCEPTION_BITMAP: %#RX32\n", pVmcsInfo->u32XcptBitmap));
    1028110309        pDbgState->fModifiedXcptBitmap = true;
     
    1028510313    {
    1028610314        pVmcsInfo->u64Cr0Mask = 0;
    10287         VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_MASK, 0);
     10315        VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR0_MASK, 0);
    1028810316        Log6Func(("VMX_VMCS_CTRL_CR0_MASK: 0\n"));
    1028910317    }
     
    1029210320    {
    1029310321        pVmcsInfo->u64Cr4Mask = 0;
    10294         VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_MASK, 0);
     10322        VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_CTRL_CR4_MASK, 0);
    1029510323        Log6Func(("VMX_VMCS_CTRL_CR4_MASK: 0\n"));
    1029610324    }
     
    1032610354        if (!(pDbgState->fProcCtlsInitial & VMX_PROC_CTLS_MOV_DR_EXIT) && CPUMIsHyperDebugStateActive(pVCpu))
    1032710355            pDbgState->fProcCtlsInitial |= VMX_PROC_CTLS_MOV_DR_EXIT; /* Avoid assertion in vmxHCLeave */
    10328         int rc2 = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pDbgState->fProcCtlsInitial);
     10356        int rc2 = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pDbgState->fProcCtlsInitial);
    1032910357        AssertRC(rc2);
    1033010358        pVmcsInfo->u32ProcCtls = pDbgState->fProcCtlsInitial;
     
    1033610364        && pVmcsInfo->u32ProcCtls2 != pDbgState->fProcCtls2Initial)
    1033710365    {
    10338         int rc2 = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC2, pDbgState->fProcCtls2Initial);
     10366        int rc2 = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC2, pDbgState->fProcCtls2Initial);
    1033910367        AssertRC(rc2);
    1034010368        pVmcsInfo->u32ProcCtls2 = pDbgState->fProcCtls2Initial;
     
    1070310731                        if (VMX_EXIT_INT_INFO_IS_ERROR_CODE_VALID(pVmxTransient->uExitIntInfo))
    1070410732                        {
    10705                             vmxHCReadExitIntErrorCodeVmcs(pVmxTransient);
     10733                            vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
    1070610734                            uEventArg = pVmxTransient->uExitIntErrorCode;
    1070710735                        }
     
    1077310801        case VMX_EXIT_VMXON:            SET_BOTH(VMX_VMXON); break;
    1077410802        case VMX_EXIT_MOV_CRX:
    10775             vmxHCReadExitQualVmcs(pVmxTransient);
     10803            vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1077610804            if (VMX_EXIT_QUAL_CRX_ACCESS(pVmxTransient->uExitQual) == VMX_EXIT_QUAL_CRX_ACCESS_READ)
    1077710805                SET_BOTH(CRX_READ);
     
    1078110809            break;
    1078210810        case VMX_EXIT_MOV_DRX:
    10783             vmxHCReadExitQualVmcs(pVmxTransient);
     10811            vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1078410812            if (   VMX_EXIT_QUAL_DRX_DIRECTION(pVmxTransient->uExitQual)
    1078510813                == VMX_EXIT_QUAL_DRX_DIRECTION_READ)
     
    1079510823        case VMX_EXIT_PAUSE:            SET_BOTH(PAUSE); break;
    1079610824        case VMX_EXIT_GDTR_IDTR_ACCESS:
    10797             vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     10825            vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1079810826            switch (RT_BF_GET(pVmxTransient->ExitInstrInfo.u, VMX_BF_XDTR_INSINFO_INSTR_ID))
    1079910827            {
     
    1080610834
    1080710835        case VMX_EXIT_LDTR_TR_ACCESS:
    10808             vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     10836            vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1080910837            switch (RT_BF_GET(pVmxTransient->ExitInstrInfo.u, VMX_BF_YYTR_INSINFO_INSTR_ID))
    1081010838            {
     
    1086410892    if (fDtrace1 || fDtrace2)
    1086510893    {
    10866         vmxHCReadExitQualVmcs(pVmxTransient);
     10894        vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1086710895        vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL);
    1086810896        PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
     
    1105111079    else
    1105211080    {
    11053         vmxHCReadExitQualVmcs(pVmxTransient);
     11081        vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1105411082        int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL);
    1105511083        AssertRC(rc);
     
    1106411092    else
    1106511093    {
    11066         vmxHCReadExitIntInfoVmcs(pVmxTransient);
     11094        vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
    1106711095        uint32_t const uIntType = VMX_EXIT_INT_INFO_TYPE(pVmxTransient->uExitIntInfo);
    1106811096        if (uIntType == VMX_EXIT_INT_INFO_TYPE_NMI)
     
    1172511753static int vmxHCAdvanceGuestRip(PVMCPUCC pVCpu, PVMXTRANSIENT pVmxTransient)
    1172611754{
    11727     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     11755    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1172811756    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_RFLAGS);
    1172911757    AssertRCReturn(rc, rc);
     
    1236812396    HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1236912397    PVMCC pVM = pVCpu->CTX_SUFF(pVM);
    12370     vmxHCReadExitQualVmcs(pVmxTransient);
     12398    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1237112399
    1237212400    if (!pVM->hmr0.s.fNestedPaging)
     
    1263612664     * Get the DR6-like values from the Exit qualification and pass it to DBGF for processing.
    1263712665     */
    12638     vmxHCReadExitQualVmcs(pVmxTransient);
     12666    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1263912667
    1264012668    /* Refer Intel spec. Table 27-1. "Exit Qualifications for debug exceptions" for the format. */
     
    1269212720        pCtx->dr[7] |= X86_DR7_RA1_MASK;
    1269312721
    12694         rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_DR7, pCtx->dr[7]);
     12722        rc = VMX_VMCS_WRITE_NW(pVCpu, VMX_VMCS_GUEST_DR7, pCtx->dr[7]);
    1269512723        AssertRC(rc);
    1269612724
     
    1302313051    STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitXcptNmi, y3);
    1302413052
    13025     vmxHCReadExitIntInfoVmcs(pVmxTransient);
     13053    vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
    1302613054
    1302713055    uint32_t const uExitIntType = VMX_EXIT_INT_INFO_TYPE(pVmxTransient->uExitIntInfo);
     
    1306713095        {
    1306813096            NOREF(uVector);
    13069             vmxHCReadExitIntErrorCodeVmcs(pVmxTransient);
    13070             vmxHCReadExitInstrLenVmcs(pVmxTransient);
    13071             vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    13072             vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     13097            vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
     13098            vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     13099            vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     13100            vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1307313101
    1307413102            rcStrict = vmxHCExitXcpt(pVCpu, pVmxTransient);
     
    1312813156     */
    1312913157    uint32_t fIntrState;
    13130     int rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &fIntrState);
     13158    int rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, &fIntrState);
    1313113159    AssertRC(rc);
    1313213160    Assert(!(fIntrState & VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS));
     
    1313713165
    1313813166        fIntrState &= ~VMX_VMCS_GUEST_INT_STATE_BLOCK_STI;
    13139         rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_INT_STATE, fIntrState);
     13167        rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, fIntrState);
    1314013168        AssertRC(rc);
    1314113169    }
     
    1318013208     */
    1318113209    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13182     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13210    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1318313211
    1318413212    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK);
     
    1325213280
    1325313281    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13254     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13282    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1325513283    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK);
    1325613284    AssertRCReturn(rc, rc);
     
    1328213310
    1328313311    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13284     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13312    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1328513313    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_TSC_AUX);
    1328613314    AssertRCReturn(rc, rc);
     
    1338513413
    1338613414    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13387     vmxHCReadExitQualVmcs(pVmxTransient);
    13388     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13415    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     13416    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1338913417    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK);
    1339013418    AssertRCReturn(rc, rc);
     
    1341413442
    1341513443    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13416     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13444    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1341713445    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK | CPUMCTX_EXTRN_DS);
    1341813446    AssertRCReturn(rc, rc);
     
    1343913467
    1344013468    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13441     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13469    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1344213470    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_EXEC_DECODED_NO_MEM_MASK);
    1344313471    AssertRCReturn(rc, rc);
     
    1352713555
    1352813556    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13529     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13557    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1353013558    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_CR4);
    1353113559    AssertRCReturn(rc, rc);
     
    1355813586    return VERR_EM_INTERPRETER;
    1355913587#else
    13560     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    13561     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    13562     vmxHCReadExitQualVmcs(pVmxTransient);
     13588    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     13589    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     13590    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1356313591    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1356413592                                                                    | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK);
     
    1361013638    uint32_t fIntrState;
    1361113639    uint64_t u64Val;
    13612     vmxHCReadEntryIntInfoVmcs(pVmxTransient);
    13613     vmxHCReadEntryXcptErrorCodeVmcs(pVmxTransient);
    13614     vmxHCReadEntryInstrLenVmcs(pVmxTransient);
     13640    vmxHCReadEntryIntInfoVmcs(pVCpu, pVmxTransient);
     13641    vmxHCReadEntryXcptErrorCodeVmcs(pVCpu, pVmxTransient);
     13642    vmxHCReadEntryInstrLenVmcs(pVCpu, pVmxTransient);
    1361513643
    1361613644    Log4(("uInvalidReason                             %u\n",     uInvalidReason));
     
    1361913647    Log4(("VMX_VMCS32_CTRL_ENTRY_INSTR_LENGTH         %#RX32\n", pVmxTransient->cbEntryInstr));
    1362013648
    13621     rc = VMXReadVmcs32(VMX_VMCS32_GUEST_INT_STATE, &fIntrState);            AssertRC(rc);
     13649    rc = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_INT_STATE, &fIntrState);            AssertRC(rc);
    1362213650    Log4(("VMX_VMCS32_GUEST_INT_STATE                 %#RX32\n", fIntrState));
    13623     rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR0, &u64Val);                        AssertRC(rc);
     13651    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_CR0, &u64Val);                        AssertRC(rc);
    1362413652    Log4(("VMX_VMCS_GUEST_CR0                         %#RX64\n", u64Val));
    13625     rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR0_MASK, &u64Val);                    AssertRC(rc);
     13653    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_CTRL_CR0_MASK, &u64Val);                    AssertRC(rc);
    1362613654    Log4(("VMX_VMCS_CTRL_CR0_MASK                     %#RX64\n", u64Val));
    13627     rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, &u64Val);             AssertRC(rc);
     13655    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_CTRL_CR0_READ_SHADOW, &u64Val);             AssertRC(rc);
    1362813656    Log4(("VMX_VMCS_CTRL_CR4_READ_SHADOW              %#RX64\n", u64Val));
    13629     rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_MASK, &u64Val);                    AssertRC(rc);
     13657    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_CTRL_CR4_MASK, &u64Val);                    AssertRC(rc);
    1363013658    Log4(("VMX_VMCS_CTRL_CR4_MASK                     %#RX64\n", u64Val));
    13631     rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Val);             AssertRC(rc);
     13659    rc = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Val);             AssertRC(rc);
    1363213660    Log4(("VMX_VMCS_CTRL_CR4_READ_SHADOW              %#RX64\n", u64Val));
    1363313661    if (pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging)
    1363413662    {
    13635         rc = VMXReadVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, &u64Val);             AssertRC(rc);
     13663        rc = VMX_VMCS_READ_64(pVCpu, VMX_VMCS64_CTRL_EPTP_FULL, &u64Val);             AssertRC(rc);
    1363613664        Log4(("VMX_VMCS64_CTRL_EPTP_FULL                  %#RX64\n", u64Val));
    1363713665    }
     
    1375013778    }
    1375113779
    13752     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13780    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1375313781    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, fImport);
    1375413782    AssertRCReturn(rc, rc);
     
    1382313851
    1382413852    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13825     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     13853    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1382613854    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, fImport);
    1382713855    AssertRCReturn(rc, rc);
     
    1399214020
    1399314021    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13994     vmxHCReadExitQualVmcs(pVmxTransient);
    13995     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     14022    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     14023    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1399614024
    1399714025    VBOXSTRICTRC rcStrict;
     
    1411214140            if (fMemOperand)
    1411314141            {
    14114                 vmxHCReadGuestLinearAddrVmcs(pVmxTransient);
     14142                vmxHCReadGuestLinearAddrVmcs(pVCpu, pVmxTransient);
    1411514143                GCPtrEffDst = pVmxTransient->uGuestLinearAddr;
    1411614144            }
     
    1414914177    PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
    1415014178    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    14151     vmxHCReadExitQualVmcs(pVmxTransient);
    14152     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     14179    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     14180    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1415314181    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_SREG_MASK
    1415414182                                                     | CPUMCTX_EXTRN_EFER);
     
    1420314231            if (fInsOutsInfo)
    1420414232            {
    14205                 vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     14233                vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1420614234                AssertReturn(pVmxTransient->ExitInstrInfo.StrIo.u3AddrSize <= 2, VERR_VMX_IPE_3);
    1420714235                AssertCompile(IEMMODE_16BIT == 0 && IEMMODE_32BIT == 1 && IEMMODE_64BIT == 2);
     
    1438214410
    1438314411    /* Check if this task-switch occurred while delivery an event through the guest IDT. */
    14384     vmxHCReadExitQualVmcs(pVmxTransient);
     14412    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1438514413    if (VMX_EXIT_QUAL_TASK_SWITCH_TYPE(pVmxTransient->uExitQual) == VMX_EXIT_QUAL_TASK_SWITCH_TYPE_IDT)
    1438614414    {
    14387         vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
     14415        vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
    1438814416        if (VMX_IDT_VECTORING_INFO_IS_VALID(pVmxTransient->uIdtVectoringInfo))
    1438914417        {
     
    1439114419            if (VMX_IDT_VECTORING_INFO_IS_ERROR_CODE_VALID(pVmxTransient->uIdtVectoringInfo))
    1439214420            {
    14393                 vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     14421                vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1439414422                uErrCode = pVmxTransient->uIdtVectoringErrorCode;
    1439514423            }
     
    1440314431                GCPtrFaultAddress = 0;
    1440414432
    14405             vmxHCReadExitInstrLenVmcs(pVmxTransient);
     14433            vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1440614434
    1440714435            vmxHCSetPendingEvent(pVCpu, VMX_ENTRY_INT_INFO_FROM_EXIT_IDT_INFO(pVmxTransient->uIdtVectoringInfo),
     
    1443014458    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    1443114459    pVmcsInfo->u32ProcCtls &= ~VMX_PROC_CTLS_MONITOR_TRAP_FLAG;
    14432     int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     14460    int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    1443314461    AssertRC(rc);
    1443414462    return VINF_EM_DBG_STEPPED;
     
    1444414472    STAM_COUNTER_INC(&pVCpu->hm.s.StatExitApicAccess);
    1444514473
    14446     vmxHCReadExitIntInfoVmcs(pVmxTransient);
    14447     vmxHCReadExitIntErrorCodeVmcs(pVmxTransient);
    14448     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14449     vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    14450     vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     14474    vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
     14475    vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
     14476    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14477    vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     14478    vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1445114479
    1445214480    /*
     
    1447114499    /* IOMMIOPhysHandler() below may call into IEM, save the necessary state. */
    1447214500    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    14473     vmxHCReadExitQualVmcs(pVmxTransient);
     14501    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1447414502    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK);
    1447514503    AssertRCReturn(rc, rc);
     
    1455114579            /* Don't intercept MOV DRx any more. */
    1455214580            pVmcsInfo->u32ProcCtls &= ~VMX_PROC_CTLS_MOV_DR_EXIT;
    14553             int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
     14581            int rc = VMX_VMCS_WRITE_32(pVCpu, VMX_VMCS32_CTRL_PROC_EXEC, pVmcsInfo->u32ProcCtls);
    1455414582            AssertRC(rc);
    1455514583
     
    1456614594
    1456714595#ifdef VBOX_WITH_STATISTICS
    14568             vmxHCReadExitQualVmcs(pVmxTransient);
     14596            vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1456914597            if (VMX_EXIT_QUAL_DRX_DIRECTION(pVmxTransient->uExitQual) == VMX_EXIT_QUAL_DRX_DIRECTION_WRITE)
    1457014598                STAM_COUNTER_INC(&pVCpu->hm.s.StatExitDRxWrite);
     
    1458314611     */
    1458414612    PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
    14585     vmxHCReadExitQualVmcs(pVmxTransient);
     14613    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1458614614    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, CPUMCTX_EXTRN_SREG_MASK | CPUMCTX_EXTRN_DR7);
    1458714615    AssertRCReturn(rc, rc);
     
    1462614654    Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    1462714655
    14628     vmxHCReadExitIntInfoVmcs(pVmxTransient);
    14629     vmxHCReadExitIntErrorCodeVmcs(pVmxTransient);
    14630     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14631     vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    14632     vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     14656    vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
     14657    vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
     14658    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14659    vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     14660    vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1463314661
    1463414662    /*
     
    1466614694     */
    1466714695    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    14668     vmxHCReadGuestPhysicalAddrVmcs(pVmxTransient);
     14696    vmxHCReadGuestPhysicalAddrVmcs(pVCpu, pVmxTransient);
    1466914697    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK);
    1467014698    AssertRCReturn(rc, rc);
     
    1473414762    Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    1473514763
    14736     vmxHCReadExitQualVmcs(pVmxTransient);
    14737     vmxHCReadExitIntInfoVmcs(pVmxTransient);
    14738     vmxHCReadExitIntErrorCodeVmcs(pVmxTransient);
    14739     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14740     vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    14741     vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     14764    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     14765    vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
     14766    vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
     14767    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14768    vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     14769    vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1474214770
    1474314771    /*
     
    1476114789
    1476214790    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    14763     vmxHCReadGuestPhysicalAddrVmcs(pVmxTransient);
     14791    vmxHCReadGuestPhysicalAddrVmcs(pVCpu, pVmxTransient);
    1476414792    int rc = vmxHCImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK);
    1476514793    AssertRCReturn(rc, rc);
     
    1481214840    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1481314841
    14814     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14815     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    14816     vmxHCReadExitQualVmcs(pVmxTransient);
     14842    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14843    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     14844    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1481714845    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1481814846                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1485114879    /* Import the entire VMCS state for now as we would be switching VMCS on successful VMLAUNCH,
    1485214880       otherwise we could import just IEM_CPUMCTX_EXTRN_VMX_VMENTRY_MASK. */
    14853     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     14881    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1485414882    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL);
    1485514883    AssertRCReturn(rc, rc);
     
    1487814906    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1487914907
    14880     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14881     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    14882     vmxHCReadExitQualVmcs(pVmxTransient);
     14908    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14909    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     14910    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1488314911    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1488414912                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1491514943    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1491614944
    14917     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14918     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    14919     vmxHCReadExitQualVmcs(pVmxTransient);
     14945    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14946    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     14947    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1492014948    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1492114949                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1495714985     * code elsewhere dares look at unsynced VMCS fields.
    1495814986     */
    14959     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    14960     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    14961     vmxHCReadExitQualVmcs(pVmxTransient);
     14987    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     14988    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     14989    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1496214990    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1496314991                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1499715025    /* Import the entire VMCS state for now as we would be switching VMCS on successful VMRESUME,
    1499815026       otherwise we could import just IEM_CPUMCTX_EXTRN_VMX_VMENTRY_MASK. */
    14999     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15027    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1500015028    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL);
    1500115029    AssertRCReturn(rc, rc);
     
    1502915057     * flags re-loading the entire shadow VMCS, we should save the entire shadow VMCS here.
    1503015058     */
    15031     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15032     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    15033     vmxHCReadExitQualVmcs(pVmxTransient);
     15059    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15060    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     15061    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1503415062    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1503515063                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1506715095    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1506815096
    15069     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15097    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1507015098    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_CR4
    1507115099                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1509415122    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1509515123
    15096     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15097     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    15098     vmxHCReadExitQualVmcs(pVmxTransient);
     15124    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15125    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     15126    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1509915127    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1510015128                                                                    | CPUMCTX_EXTRN_HWVIRT
     
    1513115159    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1513215160
    15133     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15134     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
    15135     vmxHCReadExitQualVmcs(pVmxTransient);
     15161    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15162    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     15163    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1513615164    int rc = vmxHCImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SREG_MASK
    1513715165                                                                    | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK);
     
    1517815206    HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1517915207
    15180     vmxHCReadExitIntInfoVmcs(pVmxTransient);
     15208    vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
    1518115209
    1518215210    uint64_t const uExitIntInfo = pVmxTransient->uExitIntInfo;
     
    1520315231        case VMX_EXIT_INT_INFO_TYPE_HW_XCPT:
    1520415232        {
    15205             vmxHCReadExitIntErrorCodeVmcs(pVmxTransient);
    15206             vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15207             vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    15208             vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     15233            vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
     15234            vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15235            vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     15236            vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1520915237
    1521015238            PCCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
     
    1521415242            {
    1521515243                /* Exit qualification is required for debug and page-fault exceptions. */
    15216                 vmxHCReadExitQualVmcs(pVmxTransient);
     15244                vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1521715245
    1521815246                /*
     
    1531915347    HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1532015348
    15321     vmxHCReadExitQualVmcs(pVmxTransient);
    15322     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15323     vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    15324     vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     15349    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     15350    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15351    vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     15352    vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
    1532515353
    1532615354    VMXVEXITINFO ExitInfo;
     
    1534715375    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_HLT_EXIT))
    1534815376    {
    15349         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15377        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1535015378        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1535115379    }
     
    1536315391    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_INVLPG_EXIT))
    1536415392    {
    15365         vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15366         vmxHCReadExitQualVmcs(pVmxTransient);
     15393        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15394        vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1536715395
    1536815396        VMXVEXITINFO ExitInfo;
     
    1538615414    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_RDPMC_EXIT))
    1538715415    {
    15388         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15416        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1538915417        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1539015418    }
     
    1540415432           || pVmxTransient->uExitReason == VMX_EXIT_VMWRITE);
    1540515433
    15406     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     15434    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1540715435
    1540815436    uint8_t const iGReg = pVmxTransient->ExitInstrInfo.VmreadVmwrite.iReg2;
     
    1541615444    if (CPUMIsGuestVmxVmreadVmwriteInterceptSet(pVCpu, pVmxTransient->uExitReason, u64VmcsField))
    1541715445    {
    15418         vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15419         vmxHCReadExitQualVmcs(pVmxTransient);
     15446        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15447        vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1542015448
    1542115449        VMXVEXITINFO ExitInfo;
     
    1544315471    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_RDTSC_EXIT))
    1544415472    {
    15445         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15473        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1544615474        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1544715475    }
     
    1545915487    HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1546015488
    15461     vmxHCReadExitQualVmcs(pVmxTransient);
    15462     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15489    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     15490    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1546315491
    1546415492    VBOXSTRICTRC rcStrict;
     
    1557615604            if (fMemOperand)
    1557715605            {
    15578                 vmxHCReadGuestLinearAddrVmcs(pVmxTransient);
     15606                vmxHCReadGuestLinearAddrVmcs(pVCpu, pVmxTransient);
    1557915607                GCPtrEffDst = pVmxTransient->uGuestLinearAddr;
    1558015608            }
     
    1562315651    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_MOV_DR_EXIT))
    1562415652    {
    15625         vmxHCReadExitQualVmcs(pVmxTransient);
    15626         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15653        vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     15654        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1562715655
    1562815656        VMXVEXITINFO ExitInfo;
     
    1564515673    HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1564615674
    15647     vmxHCReadExitQualVmcs(pVmxTransient);
     15675    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1564815676
    1564915677    uint32_t const uIOPort = VMX_EXIT_QUAL_IO_PORT(pVmxTransient->uExitQual);
     
    1566515693         */
    1566615694        PVMCC pVM = pVCpu->CTX_SUFF(pVM);
    15667         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15695        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1566815696
    1566915697        /* Make sure we don't use stale/uninitialized VMX-transient info. below. */
     
    1567515703        if (fIOString)
    1567615704        {
    15677             vmxHCReadGuestLinearAddrVmcs(pVmxTransient);
     15705            vmxHCReadGuestLinearAddrVmcs(pVCpu, pVmxTransient);
    1567815706            if (fVmxInsOutsInfo)
    1567915707            {
    1568015708                Assert(RT_BF_GET(g_HmMsrs.u.vmx.u64Basic, VMX_BF_BASIC_VMCS_INS_OUTS)); /* Paranoia. */
    15681                 vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     15709                vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1568215710            }
    1568315711        }
     
    1571115739    if (fMsrpm & VMXMSRPM_EXIT_RD)
    1571215740    {
    15713         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15741        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1571415742        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1571515743    }
     
    1573315761    if (fMsrpm & VMXMSRPM_EXIT_WR)
    1573415762    {
    15735         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15763        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1573615764        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1573715765    }
     
    1574915777    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_MWAIT_EXIT))
    1575015778    {
    15751         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15779        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1575215780        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1575315781    }
     
    1576515793
    1576615794    /** @todo NSTVMX: Should consider debugging nested-guests using VM debugger. */
    15767     vmxHCReadGuestPendingDbgXctps(pVmxTransient);
     15795    vmxHCReadGuestPendingDbgXctps(pVCpu, pVmxTransient);
    1576815796    VMXVEXITINFO ExitInfo;
    1576915797    RT_ZERO(ExitInfo);
     
    1578315811    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_MONITOR_EXIT))
    1578415812    {
    15785         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15813        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1578615814        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1578715815    }
     
    1580515833        || CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_PAUSE_LOOP_EXIT))
    1580615834    {
    15807         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15835        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1580815836        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1580915837    }
     
    1582215850    if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS_USE_TPR_SHADOW))
    1582315851    {
    15824         vmxHCReadGuestPendingDbgXctps(pVmxTransient);
     15852        vmxHCReadGuestPendingDbgXctps(pVCpu, pVmxTransient);
    1582515853        VMXVEXITINFO ExitInfo;
    1582615854        RT_ZERO(ExitInfo);
     
    1584115869    HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1584215870
    15843     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15844     vmxHCReadIdtVectoringInfoVmcs(pVmxTransient);
    15845     vmxHCReadIdtVectoringErrorCodeVmcs(pVmxTransient);
    15846     vmxHCReadExitQualVmcs(pVmxTransient);
     15871    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     15872    vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     15873    vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
     15874    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1584715875
    1584815876    Assert(CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_VIRT_APIC_ACCESS));
     
    1587415902
    1587515903    Assert(CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_APIC_REG_VIRT));
    15876     vmxHCReadExitQualVmcs(pVmxTransient);
     15904    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1587715905    return IEMExecVmxVmexit(pVCpu, pVmxTransient->uExitReason, pVmxTransient->uExitQual);
    1587815906}
     
    1588815916
    1588915917    Assert(CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_VIRT_INT_DELIVERY));
    15890     vmxHCReadExitQualVmcs(pVmxTransient);
     15918    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
    1589115919    return IEMExecVmxVmexit(pVCpu, pVmxTransient->uExitReason, pVmxTransient->uExitQual);
    1589215920}
     
    1590315931    {
    1590415932        Assert(CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_RDTSCP));
    15905         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15933        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1590615934        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1590715935    }
     
    1591915947    if (CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_WBINVD_EXIT))
    1592015948    {
    15921         vmxHCReadExitInstrLenVmcs(pVmxTransient);
     15949        vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1592215950        return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1592315951    }
     
    1593615964    {
    1593715965        Assert(CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_INVPCID));
    15938         vmxHCReadExitInstrLenVmcs(pVmxTransient);
    15939         vmxHCReadExitQualVmcs(pVmxTransient);
    15940         vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     15966        vmxHCReadExitInstrLenVmcs(ppVCpu, VmxTransient);
     15967        vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     15968        vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1594115969
    1594215970        VMXVEXITINFO ExitInfo;
     
    1599616024#endif
    1599716025
    15998     vmxHCReadExitInstrLenVmcs(pVmxTransient);
     16026    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
    1599916027    return IEMExecVmxVmexitInstr(pVCpu, pVmxTransient->uExitReason, pVmxTransient->cbExitInstr);
    1600016028}
     
    1604616074#endif
    1604716075
    16048     vmxHCReadExitInstrLenVmcs(pVmxTransient);
    16049     vmxHCReadExitQualVmcs(pVmxTransient);
    16050     vmxHCReadExitInstrInfoVmcs(pVmxTransient);
     16076    vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     16077    vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     16078    vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
    1605116079
    1605216080    VMXVEXITINFO ExitInfo;
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