Changeset 86487 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Oct 8, 2020 8:17:31 AM (4 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r86478 r86487 1576 1576 1577 1577 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 1578 if ( PteSrc.n.u1Present1578 if ( (PteSrc.u & X86_PTE_P) 1579 1579 && GST_IS_PTE_VALID(pVCpu, PteSrc)) 1580 1580 # endif … … 1606 1606 && ( PGM_PAGE_IS_ZERO(pPage) 1607 1607 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 1608 || ( PteSrc.n.u1Write1608 || ( (PteSrc.u & X86_PTE_RW) 1609 1609 # else 1610 1610 || ( 1 … … 1713 1713 */ 1714 1714 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 1715 if (! PteSrc.n.u1Global)1715 if (!(PteSrc.u & X86_PTE_G)) 1716 1716 pShwPage->fSeenNonGlobal = true; 1717 1717 # endif … … 1724 1724 } 1725 1725 # if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) 1726 else if (! PteSrc.n.u1Present)1726 else if (!(PteSrc.u & X86_PTE_P)) 1727 1727 Log2(("SyncPageWorker: page not present in Pte\n")); 1728 1728 else … … 1927 1927 const PGSTPTE pPteSrc = &pPTSrc->a[offPTSrc + iPTDst]; 1928 1928 1929 if ( pPteSrc->n.u1Present1929 if ( (pPteSrc->u & X86_PTE_P) 1930 1930 && !SHW_PTE_IS_P(pPTDst->a[iPTDst])) 1931 1931 { … … 2382 2382 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,DirtyPageTrap)); 2383 2383 2384 Assert(PteSrc. n.u1Write);2384 Assert(PteSrc.u & X86_PTE_RW); 2385 2385 2386 2386 /* Note: No need to invalidate this entry on other VCPUs as a stale TLB … … 2734 2734 const unsigned iPTSrc = iPTDst + offPTSrc; 2735 2735 const GSTPTE PteSrc = pPTSrc->a[iPTSrc]; 2736 2737 if (PteSrc.n.u1Present) 2736 if (PteSrc.u & X86_PTE_P) 2738 2737 { 2739 2738 PGM_BTH_NAME(SyncPageWorker)(pVCpu, &pPTDst->a[iPTDst], PdeSrc, PteSrc, pShwPage, iPTDst); … … 3918 3917 3919 3918 const GSTPTE PteSrc = pPTSrc->a[iPT + offPTSrc]; 3920 if (! PteSrc.n.u1Present)3919 if (!(PteSrc.u & X86_PTE_P)) 3921 3920 { 3922 3921 # ifdef IN_RING3 … … 4023 4022 else 4024 4023 { 4025 if ( !PteSrc.n.u1Dirty && PteSrc.n.u1Write)4024 if ((PteSrc.u & (X86_PTE_RW | X86_PTE_D)) == X86_PTE_RW) 4026 4025 { 4027 4026 if (SHW_PTE_IS_RW(PteDst)) … … 4060 4059 { 4061 4060 /* access bit emulation (not implemented). */ 4062 if ( PteSrc.n.u1Accessed|| SHW_PTE_IS_P(PteDst))4061 if ((PteSrc.u & X86_PTE_A) || SHW_PTE_IS_P(PteDst)) 4063 4062 { 4064 4063 AssertMsgFailed(("PGM_PTFLAGS_TRACK_DIRTY set at %RGv but no accessed bit emulation! PteSrc=%#RX64 PteDst=%#RX64\n", -
trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r86476 r86487 266 266 pWalk->Pte.u = Pte.u = pPte->u; 267 267 268 if (Pte. n.u1Present) { /* probable */ }268 if (Pte.u & X86_PTE_P) { /* probable */ } 269 269 else return PGM_GST_NAME(WalkReturnNotPresent)(pVCpu, pWalk, 1); 270 270 -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r86475 r86487 1532 1532 * it's fairly safe to assume the guest is reusing the PT. 1533 1533 */ 1534 if ( 1535 && pGstPT->a[i].n.u1Present)1534 if ( fAllowRemoval 1535 && (pGstPT->a[i].u & X86_PTE_P)) 1536 1536 { 1537 1537 if (!PGMPhysIsGCPhysValid(pPool->CTX_SUFF(pVM), pGstPT->a[i].u & X86_PTE_PAE_PG_MASK)) … … 3289 3289 if ((PGMSHWPTEPAE_GET_U(pPT->a[iPte]) & (X86_PTE_PAE_PG_MASK | X86_PTE_P | X86_PTE_PAE_MBZ_MASK_NX)) == u64) 3290 3290 { 3291 Log4(("pgmPoolTrackFlushGCPhysPTs: i=%d pte=%RX64\n", iPte, PGMSHWPTEPAE_GET_LOG(pPT->a[iPte]))); 3291 3292 X86PTEPAE Pte; 3292 3293 Log4(("pgmPoolTrackFlushGCPhysPTs: i=%d pte=%RX64\n", iPte, PGMSHWPTEPAE_GET_LOG(pPT->a[iPte])));3294 3293 Pte.u = (PGMSHWPTEPAE_GET_U(pPT->a[iPte]) & u64AndMask) | u64OrMask; 3295 3294 if (Pte.u & PGM_PTFLAGS_TRACK_DIRTY) 3296 Pte. n.u1Write = 0; /* need to disallow writes when dirty bit tracking is still active. */3295 Pte.u &= ~(X86PGPAEUINT)X86_PTE_RW; /* need to disallow writes when dirty bit tracking is still active. */ 3297 3296 3298 3297 PGMSHWPTEPAE_ATOMIC_SET(pPT->a[iPte], Pte.u);
Note:
See TracChangeset
for help on using the changeset viewer.