Changeset 80097 in vbox
- Timestamp:
- Aug 1, 2019 5:35:47 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 132537
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/hmvmxinline.h
r80093 r80097 579 579 580 580 581 /** 582 * Executes VMWRITE for a natural-width VMCS field. 583 */ 581 584 #ifdef RT_ARCH_AMD64 582 # define VMXWriteVmcsHstN VMXWriteVmcs64 583 # define VMXWriteVmcsGstN VMXWriteVmcs64 584 #else 585 # define VMXWriteVmcsHstN VMXWriteVmcs32 586 # define VMXWriteVmcsGstN VMXWriteVmcs32 585 # define VMXWriteVmcsNw VMXWriteVmcs64 586 #else 587 # define VMXWriteVmcsNw VMXWriteVmcs32 587 588 #endif 588 589 … … 762 763 763 764 765 /** 766 * Executes VMREAD for a natural-width VMCS field. 767 */ 764 768 #ifdef RT_ARCH_AMD64 765 # define VMXReadVmcsHstN VMXReadVmcs64 766 # define VMXReadVmcsGstN VMXReadVmcs64 767 #else 768 # define VMXReadVmcsHstN VMXReadVmcs32 769 # define VMXReadVmcsGstN VMXReadVmcs32 769 # define VMXReadVmcsNw VMXReadVmcs64 770 #else 771 # define VMXReadVmcsNw VMXReadVmcs32 770 772 #endif 771 773 -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r80096 r80097 963 963 * Sets the TSC offset for the current VMCS. 964 964 * 965 * @param pVCpu The cross context virtual CPU structure.966 965 * @param uTscOffset The TSC offset to set. 967 966 * @param pVmcsInfo The VMCS info. object. 968 967 */ 969 static void hmR0VmxSetTscOffsetVmcs(PVMCPU pVCpu, PVMXVMCSINFO pVmcsInfo, uint64_t uTscOffset) 970 { 971 NOREF(pVCpu); /* Used implicitly by VMXWriteVmcs64 on 32-bit hosts. */ 968 static void hmR0VmxSetTscOffsetVmcs(PVMXVMCSINFO pVmcsInfo, uint64_t uTscOffset) 969 { 972 970 if (pVmcsInfo->u64TscOffset != uTscOffset) 973 971 { … … 1060 1058 { 1061 1059 /* Validate we are not removing any essential exception intercepts. */ 1062 Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging || !(uXcptMask & RT_BIT(X86_XCPT_PF))); RT_NOREF(pVCpu); 1060 Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging || !(uXcptMask & RT_BIT(X86_XCPT_PF))); 1061 NOREF(pVCpu); 1063 1062 Assert(!(uXcptMask & RT_BIT(X86_XCPT_DB))); 1064 1063 Assert(!(uXcptMask & RT_BIT(X86_XCPT_AC))); … … 1457 1456 * 1458 1457 * @returns VBox status code. 1459 * @param pVCpu The cross context virtual CPU structure of the1460 * calling EMT. (Required for the VMCS cache case.)1461 1458 * @param pVmxTransient The VMX-transient structure. 1462 1459 */ 1463 DECLINLINE(int) hmR0VmxReadExitQualVmcs(PVM CPU pVCpu, PVMXTRANSIENT pVmxTransient)1460 DECLINLINE(int) hmR0VmxReadExitQualVmcs(PVMXTRANSIENT pVmxTransient) 1464 1461 { 1465 1462 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_EXIT_QUALIFICATION)) 1466 1463 { 1467 int rc = VMXReadVmcs GstN(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual); NOREF(pVCpu);1464 int rc = VMXReadVmcsNw(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual); 1468 1465 AssertRCReturn(rc, rc); 1469 1466 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_QUALIFICATION; … … 1477 1474 * 1478 1475 * @returns VBox status code. 1479 * @param pVCpu The cross context virtual CPU structure of the1480 * calling EMT. (Required for the VMCS cache case.)1481 1476 * @param pVmxTransient The VMX-transient structure. 1482 1477 */ 1483 DECLINLINE(int) hmR0VmxReadGuestLinearAddrVmcs(PVM CPU pVCpu, PVMXTRANSIENT pVmxTransient)1478 DECLINLINE(int) hmR0VmxReadGuestLinearAddrVmcs(PVMXTRANSIENT pVmxTransient) 1484 1479 { 1485 1480 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_LINEAR_ADDR)) 1486 1481 { 1487 int rc = VMXReadVmcs GstN(VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr); NOREF(pVCpu);1482 int rc = VMXReadVmcsNw(VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr); 1488 1483 AssertRCReturn(rc, rc); 1489 1484 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_LINEAR_ADDR; … … 1497 1492 * 1498 1493 * @returns VBox status code. 1499 * @param pVCpu The cross context virtual CPU structure of the1500 * calling EMT. (Required for the VMCS cache case.)1501 1494 * @param pVmxTransient The VMX-transient structure. 1502 1495 */ 1503 DECLINLINE(int) hmR0VmxReadGuestPhysicalAddrVmcs(PVM CPU pVCpu, PVMXTRANSIENT pVmxTransient)1496 DECLINLINE(int) hmR0VmxReadGuestPhysicalAddrVmcs(PVMXTRANSIENT pVmxTransient) 1504 1497 { 1505 1498 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_PHYSICAL_ADDR)) 1506 1499 { 1507 int rc = VMXReadVmcs64(VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL, &pVmxTransient->uGuestPhysicalAddr); NOREF(pVCpu);1500 int rc = VMXReadVmcs64(VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL, &pVmxTransient->uGuestPhysicalAddr); 1508 1501 AssertRCReturn(rc, rc); 1509 1502 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_PHYSICAL_ADDR; … … 1557 1550 * 1558 1551 * @returns VBox status code. 1559 * @param pVCpu The cross context virtual CPU structure of the1560 * calling EMT. (Required for the VMCS cache case.)1561 1552 * @param pVmxTransient The VMX-transient structure. 1562 1553 */ 1563 static int hmR0VmxReadAllRoFieldsVmcs(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 1564 { 1565 NOREF(pVCpu); /* Used implicitly by VMXReadVmcsGstN on 32-bit hosts. */ 1566 int rc = VMXReadVmcsGstN(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual); 1554 static int hmR0VmxReadAllRoFieldsVmcs(PVMXTRANSIENT pVmxTransient) 1555 { 1556 int rc = VMXReadVmcsNw(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQual); 1567 1557 rc |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INSTR_LENGTH, &pVmxTransient->cbInstr); 1568 1558 rc |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INSTR_INFO, &pVmxTransient->ExitInstrInfo.u); … … 1571 1561 rc |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INTERRUPTION_INFO, &pVmxTransient->uExitIntInfo); 1572 1562 rc |= VMXReadVmcs32(VMX_VMCS32_RO_EXIT_INTERRUPTION_ERROR_CODE, &pVmxTransient->uExitIntErrorCode); 1573 rc |= VMXReadVmcs GstN(VMX_VMCS_RO_GUEST_LINEAR_ADDR,&pVmxTransient->uGuestLinearAddr);1574 rc |= VMXReadVmcs GstN(VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL,&pVmxTransient->uGuestPhysicalAddr);1563 rc |= VMXReadVmcsNw(VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr); 1564 rc |= VMXReadVmcsNw(VMX_VMCS64_RO_GUEST_PHYS_ADDR_FULL, &pVmxTransient->uGuestPhysicalAddr); 1575 1565 AssertRCReturn(rc, rc); 1576 1566 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_QUALIFICATION … … 3437 3427 * 3438 3428 * @returns VBox status code. 3439 * @param pVCpu The cross context virtual CPU structure.3440 3429 * @param pVmcsInfo The VMCS info. object. 3441 3430 */ 3442 DECLINLINE(int) hmR0VmxSetupVmcsVirtApicAddr(PVMCPU pVCpu, PCVMXVMCSINFO pVmcsInfo) 3443 { 3444 NOREF(pVCpu); /* Used implicitly by VMXWriteVmcs64 on 32-bit hosts. */ 3431 DECLINLINE(int) hmR0VmxSetupVmcsVirtApicAddr(PCVMXVMCSINFO pVmcsInfo) 3432 { 3445 3433 RTHCPHYS const HCPhysVirtApic = pVmcsInfo->HCPhysVirtApic; 3446 3434 Assert(HCPhysVirtApic != NIL_RTHCPHYS); … … 3454 3442 * 3455 3443 * @returns VBox status code. 3456 * @param pVCpu The cross context virtual CPU structure.3457 3444 * @param pVmcsInfo The VMCS info. object. 3458 3445 */ 3459 DECLINLINE(int) hmR0VmxSetupVmcsMsrBitmapAddr(PVMCPU pVCpu, PCVMXVMCSINFO pVmcsInfo) 3460 { 3461 NOREF(pVCpu); /* Used implicitly by VMXWriteVmcs64 on 32-bit hosts. */ 3446 DECLINLINE(int) hmR0VmxSetupVmcsMsrBitmapAddr(PCVMXVMCSINFO pVmcsInfo) 3447 { 3462 3448 RTHCPHYS const HCPhysMsrBitmap = pVmcsInfo->HCPhysMsrBitmap; 3463 3449 Assert(HCPhysMsrBitmap != NIL_RTHCPHYS); … … 3519 3505 * 3520 3506 * @returns VBox status code. 3521 * @param pVCpu The cross context virtual CPU structure.3522 3507 * @param pVmcsInfo The VMCS info. object. 3523 3508 */ 3524 DECLINLINE(int) hmR0VmxSetupVmcsAutoLoadStoreMsrAddrs(PVMCPU pVCpu, PVMXVMCSINFO pVmcsInfo) 3525 { 3526 NOREF(pVCpu); /* Used implicitly by VMXWriteVmcs64 on 32-bit hosts. */ 3527 3509 DECLINLINE(int) hmR0VmxSetupVmcsAutoLoadStoreMsrAddrs(PVMXVMCSINFO pVmcsInfo) 3510 { 3528 3511 RTHCPHYS const HCPhysGuestMsrLoad = pVmcsInfo->HCPhysGuestMsrLoad; 3529 3512 Assert(HCPhysGuestMsrLoad != NIL_RTHCPHYS); … … 3800 3783 Assert(!(fVal & VMX_PROC_CTLS_CR8_STORE_EXIT)); 3801 3784 Assert(!(fVal & VMX_PROC_CTLS_CR8_LOAD_EXIT)); 3802 int rc = hmR0VmxSetupVmcsVirtApicAddr(pV Cpu, pVmcsInfo);3785 int rc = hmR0VmxSetupVmcsVirtApicAddr(pVmcsInfo); 3803 3786 AssertRCReturn(rc, rc); 3804 3787 } … … 3818 3801 { 3819 3802 fVal |= VMX_PROC_CTLS_USE_MSR_BITMAPS; 3820 int rc = hmR0VmxSetupVmcsMsrBitmapAddr(pV Cpu, pVmcsInfo);3803 int rc = hmR0VmxSetupVmcsMsrBitmapAddr(pVmcsInfo); 3821 3804 AssertRCReturn(rc, rc); 3822 3805 } … … 3890 3873 if (RT_SUCCESS(rc)) 3891 3874 { 3892 rc = hmR0VmxSetupVmcsAutoLoadStoreMsrAddrs(pV Cpu, pVmcsInfo);3875 rc = hmR0VmxSetupVmcsAutoLoadStoreMsrAddrs(pVmcsInfo); 3893 3876 if (RT_SUCCESS(rc)) 3894 3877 { 3895 3878 uint64_t const u64Cr0Mask = hmR0VmxGetFixedCr0Mask(pVCpu); 3896 3879 uint64_t const u64Cr4Mask = hmR0VmxGetFixedCr4Mask(pVCpu); 3897 rc = VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask);3898 rc |= VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask);3880 rc = VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask); 3881 rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask); 3899 3882 if (RT_SUCCESS(rc)) 3900 3883 { … … 3965 3948 if (RT_SUCCESS(rc)) 3966 3949 { 3967 rc = hmR0VmxSetupVmcsAutoLoadStoreMsrAddrs(pV Cpu, pVmcsInfo);3950 rc = hmR0VmxSetupVmcsAutoLoadStoreMsrAddrs(pVmcsInfo); 3968 3951 if (RT_SUCCESS(rc)) 3969 3952 { 3970 3953 if (pVM->hm.s.vmx.Msrs.ProcCtls.n.allowed1 & VMX_PROC_CTLS_USE_MSR_BITMAPS) 3971 rc = hmR0VmxSetupVmcsMsrBitmapAddr(pV Cpu, pVmcsInfo);3954 rc = hmR0VmxSetupVmcsMsrBitmapAddr(pVmcsInfo); 3972 3955 if (RT_SUCCESS(rc)) 3973 3956 return VINF_SUCCESS; … … 4348 4331 { 4349 4332 RTCCUINTREG uReg = ASMGetCR0(); 4350 int rc = VMXWriteVmcs HstN(VMX_VMCS_HOST_CR0, uReg);4333 int rc = VMXWriteVmcsNw(VMX_VMCS_HOST_CR0, uReg); 4351 4334 AssertRCReturn(rc, rc); 4352 4335 4353 4336 uReg = ASMGetCR3(); 4354 rc = VMXWriteVmcs HstN(VMX_VMCS_HOST_CR3, uReg);4337 rc = VMXWriteVmcsNw(VMX_VMCS_HOST_CR3, uReg); 4355 4338 AssertRCReturn(rc, rc); 4356 4339 4357 4340 uReg = ASMGetCR4(); 4358 rc = VMXWriteVmcs HstN(VMX_VMCS_HOST_CR4, uReg);4341 rc = VMXWriteVmcsNw(VMX_VMCS_HOST_CR4, uReg); 4359 4342 AssertRCReturn(rc, rc); 4360 4343 return rc; … … 4461 4444 ASMGetGDTR(&Gdtr); 4462 4445 ASMGetIDTR(&Idtr); 4463 rc = VMXWriteVmcs HstN(VMX_VMCS_HOST_GDTR_BASE, Gdtr.pGdt);4464 rc |= VMXWriteVmcs HstN(VMX_VMCS_HOST_IDTR_BASE, Idtr.pIdt);4446 rc = VMXWriteVmcsNw(VMX_VMCS_HOST_GDTR_BASE, Gdtr.pGdt); 4447 rc |= VMXWriteVmcsNw(VMX_VMCS_HOST_IDTR_BASE, Idtr.pIdt); 4465 4448 AssertRCReturn(rc, rc); 4466 4449 … … 4542 4525 } 4543 4526 4544 rc = VMXWriteVmcs HstN(VMX_VMCS_HOST_TR_BASE, uTRBase);4527 rc = VMXWriteVmcsNw(VMX_VMCS_HOST_TR_BASE, uTRBase); 4545 4528 AssertRCReturn(rc, rc); 4546 4529 … … 4550 4533 uint64_t const u64FSBase = ASMRdMsr(MSR_K8_FS_BASE); 4551 4534 uint64_t const u64GSBase = ASMRdMsr(MSR_K8_GS_BASE); 4552 rc = VMXWriteVmcs HstN(VMX_VMCS_HOST_FS_BASE, u64FSBase);4553 rc |= VMXWriteVmcs HstN(VMX_VMCS_HOST_GS_BASE, u64GSBase);4535 rc = VMXWriteVmcsNw(VMX_VMCS_HOST_FS_BASE, u64FSBase); 4536 rc |= VMXWriteVmcsNw(VMX_VMCS_HOST_GS_BASE, u64GSBase); 4554 4537 AssertRCReturn(rc, rc); 4555 4538 … … 4591 4574 */ 4592 4575 int rc = VMXWriteVmcs32(VMX_VMCS32_HOST_SYSENTER_CS, ASMRdMsr_Low(MSR_IA32_SYSENTER_CS)); 4593 rc |= VMXWriteVmcs HstN(VMX_VMCS_HOST_SYSENTER_ESP, ASMRdMsr(MSR_IA32_SYSENTER_ESP));4594 rc |= VMXWriteVmcs HstN(VMX_VMCS_HOST_SYSENTER_EIP, ASMRdMsr(MSR_IA32_SYSENTER_EIP));4576 rc |= VMXWriteVmcsNw(VMX_VMCS_HOST_SYSENTER_ESP, ASMRdMsr(MSR_IA32_SYSENTER_ESP)); 4577 rc |= VMXWriteVmcsNw(VMX_VMCS_HOST_SYSENTER_EIP, ASMRdMsr(MSR_IA32_SYSENTER_EIP)); 4595 4578 AssertRCReturn(rc, rc); 4596 4579 … … 5020 5003 HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_RIP); 5021 5004 5022 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_RIP, pVCpu->cpum.GstCtx.rip);5005 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_RIP, pVCpu->cpum.GstCtx.rip); 5023 5006 AssertRCReturn(rc, rc); 5024 5007 … … 5044 5027 HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_RSP); 5045 5028 5046 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_RSP, pVCpu->cpum.GstCtx.rsp);5029 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_RSP, pVCpu->cpum.GstCtx.rsp); 5047 5030 AssertRCReturn(rc, rc); 5048 5031 … … 5091 5074 } 5092 5075 5093 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_RFLAGS, fEFlags.u32);5076 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_RFLAGS, fEFlags.u32); 5094 5077 AssertRCReturn(rc, rc); 5095 5078 … … 5234 5217 * Enables VMCS shadowing for the given VMCS info. object. 5235 5218 * 5236 * @param pVCpu The cross context virtual CPU structure.5237 5219 * @param pVmcsInfo The VMCS info. object. 5238 5220 * 5239 5221 * @remarks No-long-jump zone!!! 5240 5222 */ 5241 static void hmR0VmxEnableVmcsShadowing(PVMCPU pVCpu, PVMXVMCSINFO pVmcsInfo) 5242 { 5243 NOREF(pVCpu); /* Used implicitly by VMXWriteVmcs64 on 32-bit hosts. */ 5244 5223 static void hmR0VmxEnableVmcsShadowing(PVMXVMCSINFO pVmcsInfo) 5224 { 5245 5225 uint32_t uProcCtls2 = pVmcsInfo->u32ProcCtls2; 5246 5226 if (!(uProcCtls2 & VMX_PROC_CTLS2_VMCS_SHADOWING)) … … 5262 5242 * Disables VMCS shadowing for the given VMCS info. object. 5263 5243 * 5264 * @param pVCpu The cross context virtual CPU structure.5265 5244 * @param pVmcsInfo The VMCS info. object. 5266 5245 * 5267 5246 * @remarks No-long-jump zone!!! 5268 5247 */ 5269 static void hmR0VmxDisableVmcsShadowing(PVMCPU pVCpu, PVMXVMCSINFO pVmcsInfo) 5270 { 5271 NOREF(pVCpu); /* Used implicitly by VMXWriteVmcs64 on 32-bit hosts. */ 5272 5248 static void hmR0VmxDisableVmcsShadowing(PVMXVMCSINFO pVmcsInfo) 5249 { 5273 5250 /* 5274 5251 * We want all VMREAD and VMWRITE instructions to cause VM-exits, so we clear the … … 5343 5320 pVCpu->hm.s.vmx.fCopiedNstGstToShadowVmcs = true; 5344 5321 } 5345 hmR0VmxEnableVmcsShadowing(pV Cpu, pVmcsInfo);5322 hmR0VmxEnableVmcsShadowing(pVmcsInfo); 5346 5323 } 5347 5324 else 5348 hmR0VmxDisableVmcsShadowing(pV Cpu, pVmcsInfo);5325 hmR0VmxDisableVmcsShadowing(pVmcsInfo); 5349 5326 } 5350 5327 #else … … 5482 5459 5483 5460 /* Commit the CR0 and related fields to the guest VMCS. */ 5484 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_CR0, u64GuestCr0);5485 rc |= VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0);5461 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR0, u64GuestCr0); 5462 rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0); 5486 5463 if (uProcCtls != pVmcsInfo->u32ProcCtls) 5487 5464 rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, uProcCtls); … … 5521 5498 5522 5499 /* Commit the CR0 and CR0 read-shadow to the nested-guest VMCS. */ 5523 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_CR0, u64GuestCr0);5524 rc |= VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0);5500 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR0, u64GuestCr0); 5501 rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, u64ShadowCr0); 5525 5502 AssertRCReturn(rc, rc); 5526 5503 … … 5642 5619 5643 5620 Log4Func(("u32GuestCr3=%#RGp (GstN)\n", GCPhysGuestCr3)); 5644 rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_CR3, GCPhysGuestCr3);5621 rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR3, GCPhysGuestCr3); 5645 5622 AssertRCReturn(rc, rc); 5646 5623 } … … 5651 5628 5652 5629 Log4Func(("u32GuestCr3=%#RHv (HstN)\n", HCPhysGuestCr3)); 5653 rc = VMXWriteVmcs HstN(VMX_VMCS_GUEST_CR3, HCPhysGuestCr3);5630 rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR3, HCPhysGuestCr3); 5654 5631 AssertRCReturn(rc, rc); 5655 5632 } … … 5761 5738 5762 5739 /* Commit the CR4 and CR4 read-shadow to the guest VMCS. */ 5763 rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_CR4, u64GuestCr4);5764 rc |= VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR4_READ_SHADOW, u64ShadowCr4);5740 rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_CR4, u64GuestCr4); 5741 rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, u64ShadowCr4); 5765 5742 AssertRCReturn(rc, rc); 5766 5743 … … 5797 5774 if (pVmxTransient->fIsNestedGuest) 5798 5775 { 5799 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_DR7, CPUMGetGuestDR7(pVCpu));5776 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_DR7, CPUMGetGuestDR7(pVCpu)); 5800 5777 AssertRCReturn(rc, rc); 5801 5778 … … 5913 5890 * Update guest DR7. 5914 5891 */ 5915 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_DR7, u64GuestDr7);5892 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_DR7, u64GuestDr7); 5916 5893 AssertRCReturn(rc, rc); 5917 5894 … … 6171 6148 int rc = VMXWriteVmcs32(idxSel, pSelReg->Sel); 6172 6149 rc |= VMXWriteVmcs32(idxLimit, pSelReg->u32Limit); 6173 rc |= VMXWriteVmcs GstN(idxBase, pSelReg->u64Base);6150 rc |= VMXWriteVmcsNw(idxBase, pSelReg->u64Base); 6174 6151 rc |= VMXWriteVmcs32(idxAttr, u32Access); 6175 6152 AssertRCReturn(rc, rc); … … 6350 6327 rc |= VMXWriteVmcs32(VMX_VMCS32_GUEST_TR_LIMIT, u32Limit); 6351 6328 rc |= VMXWriteVmcs32(VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, u32AccessRights); 6352 rc |= VMXWriteVmcs GstN(VMX_VMCS_GUEST_TR_BASE, u64Base);6329 rc |= VMXWriteVmcsNw(VMX_VMCS_GUEST_TR_BASE, u64Base); 6353 6330 AssertRCReturn(rc, rc); 6354 6331 … … 6365 6342 6366 6343 rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_GDTR_LIMIT, pCtx->gdtr.cbGdt); 6367 rc |= VMXWriteVmcs GstN(VMX_VMCS_GUEST_GDTR_BASE, pCtx->gdtr.pGdt);6344 rc |= VMXWriteVmcsNw(VMX_VMCS_GUEST_GDTR_BASE, pCtx->gdtr.pGdt); 6368 6345 AssertRCReturn(rc, rc); 6369 6346 … … 6393 6370 rc |= VMXWriteVmcs32(VMX_VMCS32_GUEST_LDTR_LIMIT, pCtx->ldtr.u32Limit); 6394 6371 rc |= VMXWriteVmcs32(VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, u32Access); 6395 rc |= VMXWriteVmcs GstN(VMX_VMCS_GUEST_LDTR_BASE, pCtx->ldtr.u64Base);6372 rc |= VMXWriteVmcsNw(VMX_VMCS_GUEST_LDTR_BASE, pCtx->ldtr.u64Base); 6396 6373 AssertRCReturn(rc, rc); 6397 6374 … … 6423 6400 6424 6401 rc = VMXWriteVmcs32(VMX_VMCS32_GUEST_IDTR_LIMIT, pCtx->idtr.cbIdt); 6425 rc |= VMXWriteVmcs GstN(VMX_VMCS_GUEST_IDTR_BASE, pCtx->idtr.pIdt);6402 rc |= VMXWriteVmcsNw(VMX_VMCS_GUEST_IDTR_BASE, pCtx->idtr.pIdt); 6426 6403 AssertRCReturn(rc, rc); 6427 6404 … … 6494 6471 if (ASMAtomicUoReadU64(&pVCpu->hm.s.fCtxChanged) & HM_CHANGED_GUEST_SYSENTER_EIP_MSR) 6495 6472 { 6496 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_SYSENTER_EIP, pCtx->SysEnter.eip);6473 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_SYSENTER_EIP, pCtx->SysEnter.eip); 6497 6474 AssertRCReturn(rc, rc); 6498 6475 ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_SYSENTER_EIP_MSR); … … 6501 6478 if (ASMAtomicUoReadU64(&pVCpu->hm.s.fCtxChanged) & HM_CHANGED_GUEST_SYSENTER_ESP_MSR) 6502 6479 { 6503 int rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_SYSENTER_ESP, pCtx->SysEnter.esp);6480 int rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_SYSENTER_ESP, pCtx->SysEnter.esp); 6504 6481 AssertRCReturn(rc, rc); 6505 6482 ASMAtomicUoAndU64(&pVCpu->hm.s.fCtxChanged, ~HM_CHANGED_GUEST_SYSENTER_ESP_MSR); … … 6661 6638 int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_REASON, &pVCpu->hm.s.vmx.LastError.u32ExitReason); 6662 6639 rc |= VMXReadVmcs32(VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError); 6663 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);6640 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 6664 6641 AssertRC(rc); 6665 6642 … … 6892 6869 if (pVmxTransient->fIsNestedGuest) 6893 6870 uTscOffset = CPUMApplyNestedGuestTscOffset(pVCpu, uTscOffset); 6894 hmR0VmxSetTscOffsetVmcs(pV Cpu, pVmcsInfo, uTscOffset);6871 hmR0VmxSetTscOffsetVmcs(pVmcsInfo, uTscOffset); 6895 6872 hmR0VmxRemoveProcCtlsVmcs(pVCpu, pVmxTransient, VMX_PROC_CTLS_RDTSC_EXIT); 6896 6873 } … … 7173 7150 rc |= VMXReadVmcs32(idxLimit, &u32Limit); 7174 7151 rc |= VMXReadVmcs32(idxAttr, &u32Attr); 7175 rc |= VMXReadVmcs GstN(idxBase, &u64Base);7152 rc |= VMXReadVmcsNw(idxBase, &u64Base); 7176 7153 if (RT_SUCCESS(rc)) 7177 7154 { … … 7207 7184 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_LDTR_LIMIT, &u32Limit); 7208 7185 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, &u32Attr); 7209 rc |= VMXReadVmcs GstN(VMX_VMCS_GUEST_LDTR_BASE, &u64Base);7186 rc |= VMXReadVmcsNw(VMX_VMCS_GUEST_LDTR_BASE, &u64Base); 7210 7187 if (RT_SUCCESS(rc)) 7211 7188 { … … 7240 7217 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_TR_LIMIT, &u32Limit); 7241 7218 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, &u32Attr); 7242 rc |= VMXReadVmcs GstN(VMX_VMCS_GUEST_TR_BASE, &u64Base);7219 rc |= VMXReadVmcsNw(VMX_VMCS_GUEST_TR_BASE, &u64Base); 7243 7220 AssertRCReturn(rc, rc); 7244 7221 … … 7271 7248 if (pCtx->fExtrn & CPUMCTX_EXTRN_RIP) 7272 7249 { 7273 int rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_RIP, &u64Val);7250 int rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RIP, &u64Val); 7274 7251 if (RT_SUCCESS(rc)) 7275 7252 { … … 7301 7278 if (pCtx->fExtrn & CPUMCTX_EXTRN_RFLAGS) 7302 7279 { 7303 int rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_RFLAGS, &u64Val);7280 int rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RFLAGS, &u64Val); 7304 7281 if (RT_SUCCESS(rc)) 7305 7282 { … … 7440 7417 if (fWhat & CPUMCTX_EXTRN_RSP) 7441 7418 { 7442 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_RSP, &u64Val);7419 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RSP, &u64Val); 7443 7420 VMXLOCAL_BREAK_RC(rc); 7444 7421 pCtx->rsp = u64Val; … … 7496 7473 if (fWhat & CPUMCTX_EXTRN_GDTR) 7497 7474 { 7498 rc |= VMXReadVmcs GstN(VMX_VMCS_GUEST_GDTR_BASE, &u64Val);7475 rc |= VMXReadVmcsNw(VMX_VMCS_GUEST_GDTR_BASE, &u64Val); 7499 7476 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_GDTR_LIMIT, &u32Val); 7500 7477 pCtx->gdtr.pGdt = u64Val; … … 7505 7482 if (fWhat & CPUMCTX_EXTRN_IDTR) 7506 7483 { 7507 rc |= VMXReadVmcs GstN(VMX_VMCS_GUEST_IDTR_BASE, &u64Val);7484 rc |= VMXReadVmcsNw(VMX_VMCS_GUEST_IDTR_BASE, &u64Val); 7508 7485 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_IDTR_LIMIT, &u32Val); 7509 7486 pCtx->idtr.pIdt = u64Val; … … 7527 7504 { 7528 7505 /* Upper 32-bits are always zero. See Intel spec. 2.7.3 "Loading and Storing Debug Registers". */ 7529 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_DR7, &u64Val);7506 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_DR7, &u64Val); 7530 7507 VMXLOCAL_BREAK_RC(rc); 7531 7508 pCtx->dr[7] = u64Val; … … 7535 7512 if (fWhat & CPUMCTX_EXTRN_SYSENTER_MSRS) 7536 7513 { 7537 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_SYSENTER_EIP, &pCtx->SysEnter.eip);7538 rc |= VMXReadVmcs GstN(VMX_VMCS_GUEST_SYSENTER_ESP, &pCtx->SysEnter.esp);7514 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_SYSENTER_EIP, &pCtx->SysEnter.eip); 7515 rc |= VMXReadVmcsNw(VMX_VMCS_GUEST_SYSENTER_ESP, &pCtx->SysEnter.esp); 7539 7516 rc |= VMXReadVmcs32(VMX_VMCS32_GUEST_SYSENTER_CS, &u32Val); 7540 7517 pCtx->SysEnter.cs = u32Val; … … 7592 7569 { 7593 7570 uint64_t u64Shadow; 7594 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_CR0, &u64Val);7595 rc |= VMXReadVmcs HstN(VMX_VMCS_CTRL_CR0_READ_SHADOW, &u64Shadow);7571 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR0, &u64Val); 7572 rc |= VMXReadVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, &u64Shadow); 7596 7573 VMXLOCAL_BREAK_RC(rc); 7597 7574 u64Val = (u64Val & ~pVmcsInfo->u64Cr0Mask) … … 7618 7595 { 7619 7596 uint64_t u64Shadow; 7620 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_CR4, &u64Val);7621 rc |= VMXReadVmcs HstN(VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Shadow);7597 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR4, &u64Val); 7598 rc |= VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Shadow); 7622 7599 VMXLOCAL_BREAK_RC(rc); 7623 7600 u64Val = (u64Val & ~pVmcsInfo->u64Cr4Mask) … … 7646 7623 && CPUMIsGuestPagingEnabledEx(pCtx))) 7647 7624 { 7648 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_CR3, &u64Val);7625 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_CR3, &u64Val); 7649 7626 VMXLOCAL_BREAK_RC(rc); 7650 7627 if (pCtx->cr3 != u64Val) … … 9393 9370 * RIP and RFLAGS. 9394 9371 */ 9395 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_RIP, &u64Val);9372 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RIP, &u64Val); 9396 9373 AssertRCBreak(rc); 9397 9374 /* pCtx->rip can be different than the one in the VMCS (e.g. run guest code and VM-exits that don't update it). */ … … 9407 9384 9408 9385 /* Flags in pCtx can be different (real-on-v86 for instance). We are only concerned about the VMCS contents here. */ 9409 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_RFLAGS, &u64Val);9386 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_RFLAGS, &u64Val); 9410 9387 AssertRCBreak(rc); 9411 9388 HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0xffffffffffc08028)), /* Bit 63:22, Bit 15, 5, 3 MBZ. */ … … 9451 9428 } 9452 9429 9453 rc = VMXReadVmcs HstN(VMX_VMCS_HOST_SYSENTER_ESP, &u64Val);9430 rc = VMXReadVmcsNw(VMX_VMCS_HOST_SYSENTER_ESP, &u64Val); 9454 9431 AssertRCBreak(rc); 9455 9432 HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_SYSENTER_ESP_NOT_CANONICAL); 9456 9433 9457 rc = VMXReadVmcs HstN(VMX_VMCS_HOST_SYSENTER_EIP, &u64Val);9434 rc = VMXReadVmcsNw(VMX_VMCS_HOST_SYSENTER_EIP, &u64Val); 9458 9435 AssertRCBreak(rc); 9459 9436 HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_SYSENTER_EIP_NOT_CANONICAL); … … 9725 9702 * GDTR and IDTR (64-bit capable checks). 9726 9703 */ 9727 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_GDTR_BASE, &u64Val);9704 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_GDTR_BASE, &u64Val); 9728 9705 AssertRCBreak(rc); 9729 9706 HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_GDTR_BASE_NOT_CANONICAL); 9730 9707 9731 rc = VMXReadVmcs GstN(VMX_VMCS_GUEST_IDTR_BASE, &u64Val);9708 rc = VMXReadVmcsNw(VMX_VMCS_GUEST_IDTR_BASE, &u64Val); 9732 9709 AssertRCBreak(rc); 9733 9710 HMVMX_CHECK_BREAK(X86_IS_CANONICAL(u64Val), VMX_IGS_IDTR_BASE_NOT_CANONICAL); … … 10269 10246 rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, u32XcptBitmap); 10270 10247 if (pVmcsInfoNstGst->u64Cr0Mask != u64Cr0Mask) 10271 rc |= VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask);10248 rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_MASK, u64Cr0Mask); 10272 10249 if (pVmcsInfoNstGst->u64Cr4Mask != u64Cr4Mask) 10273 rc |= VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask);10250 rc |= VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_MASK, u64Cr4Mask); 10274 10251 if (pVmcsInfoNstGst->u32XcptPFMask != u32XcptPFMask) 10275 10252 rc |= VMXWriteVmcs32(VMX_VMCS32_CTRL_PAGEFAULT_ERROR_MASK, u32XcptPFMask); … … 10873 10850 10874 10851 #ifdef HMVMX_ALWAYS_SAVE_RO_GUEST_STATE 10875 rc = hmR0VmxReadAllRoFieldsVmcs(pV Cpu, pVmxTransient);10852 rc = hmR0VmxReadAllRoFieldsVmcs(pVmxTransient); 10876 10853 AssertRC(rc); 10877 10854 #endif … … 11297 11274 { 11298 11275 pVmcsInfo->u64Cr0Mask = 0; 11299 VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR0_MASK, 0);11276 VMXWriteVmcsNw(VMX_VMCS_CTRL_CR0_MASK, 0); 11300 11277 Log6Func(("VMX_VMCS_CTRL_CR0_MASK: 0\n")); 11301 11278 } … … 11304 11281 { 11305 11282 pVmcsInfo->u64Cr4Mask = 0; 11306 VMXWriteVmcs HstN(VMX_VMCS_CTRL_CR4_MASK, 0);11283 VMXWriteVmcsNw(VMX_VMCS_CTRL_CR4_MASK, 0); 11307 11284 Log6Func(("VMX_VMCS_CTRL_CR4_MASK: 0\n")); 11308 11285 } … … 11785 11762 case VMX_EXIT_VMXON: SET_BOTH(VMX_VMXON); break; 11786 11763 case VMX_EXIT_MOV_CRX: 11787 hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);11764 hmR0VmxReadExitQualVmcs(pVmxTransient); 11788 11765 if (VMX_EXIT_QUAL_CRX_ACCESS(pVmxTransient->uExitQual) == VMX_EXIT_QUAL_CRX_ACCESS_READ) 11789 11766 SET_BOTH(CRX_READ); … … 11793 11770 break; 11794 11771 case VMX_EXIT_MOV_DRX: 11795 hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);11772 hmR0VmxReadExitQualVmcs(pVmxTransient); 11796 11773 if ( VMX_EXIT_QUAL_DRX_DIRECTION(pVmxTransient->uExitQual) 11797 11774 == VMX_EXIT_QUAL_DRX_DIRECTION_READ) … … 11876 11853 if (fDtrace1 || fDtrace2) 11877 11854 { 11878 hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);11855 hmR0VmxReadExitQualVmcs(pVmxTransient); 11879 11856 hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL); 11880 11857 PCPUMCTX pCtx = &pVCpu->cpum.GstCtx; … … 12063 12040 else 12064 12041 { 12065 hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);12042 hmR0VmxReadExitQualVmcs(pVmxTransient); 12066 12043 int rc = hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL); 12067 12044 AssertRC(rc); … … 13590 13567 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(pVCpu, pVmxTransient); 13591 13568 PVM pVM = pVCpu->CTX_SUFF(pVM); 13592 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);13569 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 13593 13570 AssertRCReturn(rc, rc); 13594 13571 … … 13770 13747 * Get the DR6-like values from the Exit qualification and pass it to DBGF for processing. 13771 13748 */ 13772 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);13749 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 13773 13750 AssertRCReturn(rc, rc); 13774 13751 … … 13812 13789 pCtx->dr[7] |= X86_DR7_RA1_MASK; 13813 13790 13814 rc = VMXWriteVmcs GstN(VMX_VMCS_GUEST_DR7, pCtx->dr[7]);13791 rc = VMXWriteVmcsNw(VMX_VMCS_GUEST_DR7, pCtx->dr[7]); 13815 13792 AssertRCReturn(rc, rc); 13816 13793 … … 14507 14484 14508 14485 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 14509 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);14486 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 14510 14487 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 14511 14488 rc |= hmR0VmxImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); … … 14710 14687 rc = VMXReadVmcs32(VMX_VMCS_GUEST_CR0, &u32Val); AssertRC(rc); 14711 14688 Log4(("VMX_VMCS_GUEST_CR0 %#RX32\n", u32Val)); 14712 rc = VMXReadVmcs HstN(VMX_VMCS_CTRL_CR0_MASK, &uHCReg); AssertRC(rc);14689 rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR0_MASK, &uHCReg); AssertRC(rc); 14713 14690 Log4(("VMX_VMCS_CTRL_CR0_MASK %#RHr\n", uHCReg)); 14714 rc = VMXReadVmcs HstN(VMX_VMCS_CTRL_CR0_READ_SHADOW, &uHCReg); AssertRC(rc);14691 rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR0_READ_SHADOW, &uHCReg); AssertRC(rc); 14715 14692 Log4(("VMX_VMCS_CTRL_CR4_READ_SHADOW %#RHr\n", uHCReg)); 14716 rc = VMXReadVmcs HstN(VMX_VMCS_CTRL_CR4_MASK, &uHCReg); AssertRC(rc);14693 rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_MASK, &uHCReg); AssertRC(rc); 14717 14694 Log4(("VMX_VMCS_CTRL_CR4_MASK %#RHr\n", uHCReg)); 14718 rc = VMXReadVmcs HstN(VMX_VMCS_CTRL_CR4_READ_SHADOW, &uHCReg); AssertRC(rc);14695 rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, &uHCReg); AssertRC(rc); 14719 14696 Log4(("VMX_VMCS_CTRL_CR4_READ_SHADOW %#RHr\n", uHCReg)); 14720 14697 if (pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging) … … 15078 15055 15079 15056 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 15080 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15057 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 15081 15058 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 15082 15059 AssertRCReturn(rc, rc); … … 15193 15170 if (fMemOperand) 15194 15171 { 15195 rc = hmR0VmxReadGuestLinearAddrVmcs(pV Cpu, pVmxTransient);15172 rc = hmR0VmxReadGuestLinearAddrVmcs(pVmxTransient); 15196 15173 AssertRCReturn(rc, rc); 15197 15174 GCPtrEffDst = pVmxTransient->uGuestLinearAddr; … … 15231 15208 PCPUMCTX pCtx = &pVCpu->cpum.GstCtx; 15232 15209 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 15233 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15210 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 15234 15211 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 15235 15212 rc |= hmR0VmxImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK | CPUMCTX_EXTRN_SREG_MASK … … 15466 15443 15467 15444 /* Check if this task-switch occurred while delivery an event through the guest IDT. */ 15468 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15445 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 15469 15446 AssertRCReturn(rc, rc); 15470 15447 if (VMX_EXIT_QUAL_TASK_SWITCH_TYPE(pVmxTransient->uExitQual) == VMX_EXIT_QUAL_TASK_SWITCH_TYPE_IDT) … … 15561 15538 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 15562 15539 rc = hmR0VmxImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK); 15563 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15540 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 15564 15541 AssertRCReturn(rc, rc); 15565 15542 … … 15654 15631 15655 15632 #ifdef VBOX_WITH_STATISTICS 15656 rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15633 rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 15657 15634 AssertRCReturn(rc, rc); 15658 15635 if (VMX_EXIT_QUAL_DRX_DIRECTION(pVmxTransient->uExitQual) == VMX_EXIT_QUAL_DRX_DIRECTION_WRITE) … … 15672 15649 */ 15673 15650 PCPUMCTX pCtx = &pVCpu->cpum.GstCtx; 15674 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15651 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 15675 15652 rc |= hmR0VmxImportGuestState(pVCpu, pVmcsInfo, CPUMCTX_EXTRN_SREG_MASK | CPUMCTX_EXTRN_DR7); 15676 15653 AssertRCReturn(rc, rc); … … 15756 15733 */ 15757 15734 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 15758 rc = hmR0VmxReadGuestPhysicalAddrVmcs(pV Cpu, pVmxTransient);15735 rc = hmR0VmxReadGuestPhysicalAddrVmcs(pVmxTransient); 15759 15736 rc |= hmR0VmxImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK); 15760 15737 AssertRCReturn(rc, rc); … … 15815 15792 Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging); 15816 15793 15817 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15794 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 15818 15795 rc |= hmR0VmxReadExitIntInfoVmcs(pVmxTransient); 15819 15796 rc |= hmR0VmxReadExitIntErrorCodeVmcs(pVmxTransient); … … 15843 15820 15844 15821 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 15845 rc = hmR0VmxReadGuestPhysicalAddrVmcs(pV Cpu, pVmxTransient);15822 rc = hmR0VmxReadGuestPhysicalAddrVmcs(pVmxTransient); 15846 15823 rc |= hmR0VmxImportGuestState(pVCpu, pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK); 15847 15824 AssertRCReturn(rc, rc); … … 15899 15876 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 15900 15877 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 15901 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15878 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 15902 15879 AssertRCReturn(rc, rc); 15903 15880 … … 15965 15942 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 15966 15943 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 15967 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15944 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 15968 15945 AssertRCReturn(rc, rc); 15969 15946 … … 16002 15979 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 16003 15980 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16004 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);15981 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16005 15982 AssertRCReturn(rc, rc); 16006 15983 … … 16044 16021 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 16045 16022 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16046 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16023 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16047 16024 AssertRCReturn(rc, rc); 16048 16025 … … 16116 16093 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 16117 16094 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16118 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16095 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16119 16096 AssertRCReturn(rc, rc); 16120 16097 … … 16181 16158 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 16182 16159 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16183 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16160 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16184 16161 AssertRCReturn(rc, rc); 16185 16162 … … 16217 16194 | IEM_CPUMCTX_EXTRN_EXEC_DECODED_MEM_MASK); 16218 16195 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 16219 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16196 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16220 16197 AssertRCReturn(rc, rc); 16221 16198 … … 16298 16275 { 16299 16276 /* Exit qualification is required for debug and page-fault exceptions. */ 16300 rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16277 rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16301 16278 AssertRCReturn(rc, rc); 16302 16279 … … 16403 16380 HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 16404 16381 16405 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16382 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16406 16383 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16407 16384 rc |= hmR0VmxReadIdtVectoringInfoVmcs(pVmxTransient); … … 16450 16427 { 16451 16428 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16452 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16429 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16453 16430 AssertRCReturn(rc, rc); 16454 16431 … … 16506 16483 { 16507 16484 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16508 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16485 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 16509 16486 AssertRCReturn(rc, rc); 16510 16487 … … 16550 16527 HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 16551 16528 16552 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16529 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16553 16530 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16554 16531 AssertRCReturn(rc, rc); … … 16665 16642 if (fMemOperand) 16666 16643 { 16667 rc = hmR0VmxReadGuestLinearAddrVmcs(pV Cpu, pVmxTransient);16644 rc = hmR0VmxReadGuestLinearAddrVmcs(pVmxTransient); 16668 16645 AssertRCReturn(rc, rc); 16669 16646 GCPtrEffDst = pVmxTransient->uGuestLinearAddr; … … 16713 16690 if (CPUMIsGuestVmxProcCtlsSet(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS_MOV_DR_EXIT)) 16714 16691 { 16715 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16692 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16716 16693 rc |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 16717 16694 AssertRCReturn(rc, rc); … … 16736 16713 HMVMX_VALIDATE_NESTED_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient); 16737 16714 16738 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16715 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16739 16716 AssertRCReturn(rc, rc); 16740 16717 … … 16768 16745 if (fIOString) 16769 16746 { 16770 rc |= hmR0VmxReadGuestLinearAddrVmcs(pV Cpu, pVmxTransient);16747 rc |= hmR0VmxReadGuestLinearAddrVmcs(pVmxTransient); 16771 16748 if (fVmxInsOutsInfo) 16772 16749 { … … 16934 16911 16935 16912 Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_VIRT_APIC_ACCESS)); 16936 rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16913 rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16937 16914 AssertRCReturn(rc, rc); 16938 16915 … … 16960 16937 16961 16938 Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_APIC_REG_VIRT)); 16962 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16939 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16963 16940 AssertRCReturn(rc, rc); 16964 16941 … … 16976 16953 16977 16954 Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_VIRT_INT_DELIVERY)); 16978 int rc = hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);16955 int rc = hmR0VmxReadExitQualVmcs(pVmxTransient); 16979 16956 AssertRCReturn(rc, rc); 16980 16957 … … 17029 17006 Assert(CPUMIsGuestVmxProcCtls2Set(pVCpu, &pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_INVPCID)); 17030 17007 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 17031 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);17008 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 17032 17009 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 17033 17010 AssertRCReturn(rc, rc); … … 17137 17114 17138 17115 int rc = hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 17139 rc |= hmR0VmxReadExitQualVmcs(pV Cpu, pVmxTransient);17116 rc |= hmR0VmxReadExitQualVmcs(pVmxTransient); 17140 17117 rc |= hmR0VmxReadExitInstrInfoVmcs(pVmxTransient); 17141 17118 AssertRCReturn(rc, rc);
Note:
See TracChangeset
for help on using the changeset viewer.