VirtualBox

Changeset 19765 in vbox


Ignore:
Timestamp:
May 18, 2009 9:07:07 AM (15 years ago)
Author:
vboxsync
Message:

Atomically update page table/directory entries.

File:
1 edited

Legend:

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

    r19691 r19765  
    15581558                pShwPage->fSeenNonGlobal = true;
    15591559#endif
    1560             *pPteDst = PteDst;
     1560            ASMAtomicWriteSize(pPteDst, PteDst.u);
    15611561        }
    15621562        /* else MMIO or invalid page, we must handle them manually in the #PF handler. */
     
    15771577        }
    15781578#endif /* PGMPOOL_WITH_USER_TRACKING */
    1579         pPteDst->u = 0;
     1579        ASMAtomicWriteSize(pPteDst, 0);
    15801580        /** @todo count these. */
    15811581    }
     
    18751875                        PdeDst.n.u1Write = PdeSrc.n.u1Write;
    18761876                    }
    1877                     *pPdeDst = PdeDst;
     1877                    ASMAtomicWriteSize(pPdeDst, PdeDst.u);
    18781878                    Log2(("SyncPage: BIG %RGv PdeSrc:{P=%d RW=%d U=%d raw=%08llx} GCPhys=%RGp%s\n",
    18791879                          GCPtrPage, PdeSrc.n.u1Present, PdeSrc.n.u1Write, PdeSrc.n.u1User, (uint64_t)PdeSrc.u, GCPhys,
     
    25282528                }
    25292529            }
    2530             *pPdeDst = PdeDst;
     2530            ASMAtomicWriteSize(pPdeDst, PdeDst.u);
    25312531# if defined(IN_RC)
    25322532            PGMDynUnlockHCPage(pVM, (uint8_t *)pPdeDst);
     
    25692569                PdeDst.u = (PdeDst.u & (SHW_PDE_PG_MASK | X86_PDE_AVL_MASK))
    25702570                         | (PdeSrc.u & ~(GST_PDE_PG_MASK | X86_PDE_AVL_MASK | X86_PDE_PCD | X86_PDE_PWT | X86_PDE_PS | X86_PDE4M_G | X86_PDE4M_D));
    2571                 *pPdeDst = PdeDst;
     2571                ASMAtomicWriteSize(pPdeDst, PdeDst.u);
    25722572# if defined(IN_RC)
    25732573                PGMDynUnlockHCPage(pVM, (uint8_t *)pPdeDst);
     
    26752675                PdeDst.b.u1Write = 0;
    26762676            }
    2677             *pPdeDst = PdeDst;
     2677            ASMAtomicWriteSize(pPdeDst, PdeDst.u);
    26782678# if defined(IN_RC)
    26792679            PGMDynUnlockHCPage(pVM, (uint8_t *)pPdeDst);
     
    29022902    PdeDst.n.u1Accessed = 1;
    29032903# endif
    2904     *pPdeDst = PdeDst;
     2904    ASMAtomicWriteSize(pPdeDst, PdeDst.u);
    29052905
    29062906    rc = PGM_BTH_NAME(SyncPage)(pVCpu, PdeSrc, GCPtrPage, PGM_SYNC_NR_PAGES, 0 /* page not present */);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette