Changeset 96958 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Sep 30, 2022 9:15:44 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r96879 r96958 1786 1786 ) 1787 1787 { 1788 # if defined(VBOX_WITH_NESTED_HWVIRT_VMX) && PGM_SHW_TYPE == PGM_TYPE_EPT 1788 # if defined(VBOX_WITH_NESTED_HWVIRT_VMX) && PGM_SHW_TYPE == PGM_TYPE_EPT && defined(PGM_WITH_NESTED_APIC_ACCESS_PAGE) 1789 1789 /* 1790 1790 * If an "ALL" access handler has been registered for the VMX APIC-access page, … … 2577 2577 SHWPTE Pte; 2578 2578 uint64_t const fGstShwPteFlags = pGstWalkAll->u.Ept.Pte.u & pVCpu->pgm.s.fGstEptShadowedPteMask; 2579 if (PGM_PAGE_HAS_ACTIVE_HANDLERS(pPage)) 2580 { 2579 if (!PGM_PAGE_HAS_ACTIVE_HANDLERS(pPage)) 2580 { 2581 Pte.u = PGM_PAGE_GET_HCPHYS(pPage) | fGstShwPteFlags; 2582 Log7Func(("regular page (%R[pgmpage]) at %RGp -> %RX64\n", pPage, GCPhysPage, Pte.u)); 2583 } 2584 else if (!PGM_PAGE_HAS_ACTIVE_ALL_HANDLERS(pPage)) 2585 { 2586 /** @todo access bit. */ 2587 Pte.u = PGM_PAGE_GET_HCPHYS(pPage) | (fGstShwPteFlags & ~EPT_E_WRITE); 2588 Log7Func(("monitored page (%R[pgmpage]) at %RGp -> %RX64\n", pPage, GCPhysPage, Pte.u)); 2589 } 2590 else 2591 { 2592 # if defined(PGM_WITH_NESTED_APIC_ACCESS_PAGE) 2581 2593 if (CPUMIsGuestVmxApicAccessPageAddr(pVCpu, GCPhysPage)) 2582 2594 { … … 2584 2596 Log7Func(("APIC-access page at %RGp -> shadowing nested-hypervisor %RX64 (%RGp)\n", GCPhysPage, fGstShwPteFlags, pShwPage->GCPhys)); 2585 2597 } 2598 # if 0 /** @todo r=bird: What on earth is the rational for this? */ 2586 2599 else if (!PGM_PAGE_HAS_ACTIVE_ALL_HANDLERS(pPage)) 2587 2600 { 2588 Assert(!CPUMIsGuestVmxApicAccessPageAddr(pVCpu, GCPhysPage));2589 2601 if (fGstShwPteFlags & EPT_E_WRITE) 2590 2602 { … … 2595 2607 Log7Func(("monitored page (%R[pgmpage]) at %RGp -> shadowing nested-hypervisor %RX64\n", pPage, GCPhysPage, fGstShwPteFlags)); 2596 2608 } 2609 # endif 2597 2610 else 2598 { 2611 # endif 2612 { 2613 # if defined(PGM_WITH_NESTED_APIC_ACCESS_PAGE) 2599 2614 /** @todo Track using fVirtVmxApicAccess bit in PGMPHYSHANDLER and maybe in PGMPAGE 2600 2615 * too? */ 2616 /** @todo r=bird: this is wrong for device passthru among other scenarios. */ 2601 2617 PGMHandlerPhysicalDeregister(pVCpu->CTX_SUFF(pVM), GCPhysPage); 2602 2618 Pte.u = PGM_PAGE_GET_HCPHYS(pPage) | fGstShwPteFlags; 2603 2619 Log7Func(("MMIO at %RGp potentially former VMX APIC-access page -> unregistered\n", GCPhysPage)); 2604 } 2605 } 2606 else 2607 Pte.u = PGM_PAGE_GET_HCPHYS(pPage) | fGstShwPteFlags; 2620 # else 2621 /** @todo Do MMIO optimizations here too? */ 2622 Log7Func(("mmio page (%R[pgmpage]) at %RGp -> 0\n", pPage, GCPhysPage)); 2623 Pte.u = 0; 2624 # endif 2625 } 2626 } 2608 2627 2609 2628 /* Make sure only allocated pages are mapped writable. */
Note:
See TracChangeset
for help on using the changeset viewer.