Changeset 95161 in vbox for trunk/src/VBox
- Timestamp:
- Jun 1, 2022 11:38:16 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp
r94842 r95161 2442 2442 pVmcs->u64RoExitQual.u = u64ExitQual; 2443 2443 2444 LogFlow(("vmexit: reason=% #RX32qual=%#RX64 cs:rip=%04x:%#RX64 cr0=%#RX64 cr3=%#RX64 cr4=%#RX64\n", uExitReason,2444 LogFlow(("vmexit: reason=%u qual=%#RX64 cs:rip=%04x:%#RX64 cr0=%#RX64 cr3=%#RX64 cr4=%#RX64\n", uExitReason, 2445 2445 pVmcs->u64RoExitQual.u, pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip, pVCpu->cpum.GstCtx.cr0, 2446 2446 pVCpu->cpum.GstCtx.cr3, pVCpu->cpum.GstCtx.cr4)); … … 4372 4372 static bool iemVmxVirtApicIsMemAccessIntercepted(PVMCPUCC pVCpu, uint16_t offAccess, size_t cbAccess, uint32_t fAccess) RT_NOEXCEPT 4373 4373 { 4374 Assert(cbAccess > 0); 4374 4375 PCVMXVVMCS const pVmcs = &pVCpu->cpum.GstCtx.hwvirt.vmx.Vmcs; 4375 4376 … … 9896 9897 9897 9898 { 9898 RT_NOREF 4(pVM, pRegFrame, pvFault, uUser);9899 RT_NOREF3(pVM, pRegFrame, uUser); 9899 9900 9900 9901 /* … … 9903 9904 * Failing to do so lands us with endless EPT misconfiguration VM-exits. 9904 9905 */ 9905 RTGCPHYS const GCPhys AccessBase = GCPhysFault & ~(RTGCPHYS)GUEST_PAGE_OFFSET_MASK;9906 RTGCPHYS const GCPhysPage = GCPhysFault & ~(RTGCPHYS)GUEST_PAGE_OFFSET_MASK; 9906 9907 if (CPUMIsGuestInVmxNonRootMode(IEM_GET_CTX(pVCpu))) 9907 9908 { 9908 9909 Assert(CPUMIsGuestVmxProcCtls2Set(IEM_GET_CTX(pVCpu), VMX_PROC_CTLS2_VIRT_APIC_ACCESS)); 9909 Assert(CPUMGetGuestVmxApicAccessPageAddrEx(IEM_GET_CTX(pVCpu)) == GCPhys AccessBase);9910 Assert(CPUMGetGuestVmxApicAccessPageAddrEx(IEM_GET_CTX(pVCpu)) == GCPhysPage); 9910 9911 9911 9912 /* … … 9920 9921 fAccess = IEM_ACCESS_DATA_R; 9921 9922 9922 uint16_t const offAccess = GCPhysFault & GUEST_PAGE_OFFSET_MASK; 9923 bool const fIntercept = iemVmxVirtApicIsMemAccessIntercepted(pVCpu, offAccess, 0 /* cbAccess */, fAccess); 9923 RTGCPHYS const GCPhysNestedFault = (RTGCPHYS)pvFault; 9924 uint16_t const offAccess = GCPhysNestedFault & GUEST_PAGE_OFFSET_MASK; 9925 bool const fIntercept = iemVmxVirtApicIsMemAccessIntercepted(pVCpu, offAccess, 1 /* cbAccess */, fAccess); 9924 9926 if (fIntercept) 9925 9927 { … … 9944 9946 */ 9945 9947 AssertLogRelMsgReturn(HmExitAux.Vmx.uReason == VMX_EXIT_EPT_VIOLATION, 9946 ("Unexpected call to the VMX APIC-access page #PF handler for %#RGp ( off=%u) uReason=%#RX32\n",9947 GCPhys AccessBase, offAccess, HmExitAux.Vmx.uReason), VERR_IEM_IPE_9);9948 ("Unexpected call to the VMX APIC-access page #PF handler for %#RGp (Nested=%#RGp, GCPhysAddr%#RGp) off=%u uReason=%u\n", 9949 GCPhysPage, GCPhysNestedFault, HmExitAux.Vmx.u64GuestPhysAddr, offAccess, HmExitAux.Vmx.uReason), VERR_IEM_IPE_9); 9948 9950 9949 9951 /* … … 10003 10005 } 10004 10006 10005 LogFunc(("Accessed outside VMX non-root mode, deregistering page handler for %#RGp\n", GCPhys AccessBase));10006 int rc = PGMHandlerPhysicalDeregister(pVM, GCPhysAccessBase);10007 LogFunc(("Accessed outside VMX non-root mode, deregistering page handler for %#RGp\n", GCPhysPage)); 10008 int const rc = PGMHandlerPhysicalDeregister(pVM, GCPhysPage); 10007 10009 if (RT_FAILURE(rc)) 10008 10010 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.