VirtualBox

Ignore:
Timestamp:
May 2, 2016 8:36:54 AM (9 years ago)
Author:
vboxsync
Message:

bs3kit: Must atomically replace large pages in case of very tiny TLB.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-PagingProtect.c

    r60686 r60777  
    3232#include <iprt/asm-amd64-x86.h>
    3333#include <iprt/param.h>
    34 
     34                  bs3kit.h
    3535
    3636/*********************************************************************************************************************************
     
    114114                    if (pPT)
    115115                    {
    116                         pPD->a[iPde].u = Bs3SelPtrToFlat(pPT)
    117                                        | (pPD->a[iPde].u & ~(uint32_t)(X86_PTE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D));
     116                        ASMAtomicUoWriteU32(&pPD->a[iPde].u,
     117                                              Bs3SelPtrToFlat(pPT)
     118                                            | (  pPD->a[iPde].u
     119                                               & ~(uint32_t)(X86_PTE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D)));
    118120                        BS3PAGING_DPRINTF2(("bs3PagingGetLegacyPte: iPde=%#x: %#RX32\n", iPde, pPD->a[iPde].u));
    119121                        if (fUseInvlPg)
     
    181183                    if (pPD)
    182184                    {
    183                         pPdpt->a[iPdpte].u = Bs3SelPtrToFlat(pPD)
    184                                            | (  pPdpt->a[iPdpte].u
    185                                               & ~(uint64_t)(X86_PDPE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D));
     185                        ASMAtomicUoWriteU64(&pPdpt->a[iPdpte].u,
     186                                              Bs3SelPtrToFlat(pPD)
     187                                            | (  pPdpt->a[iPdpte].u
     188                                               & ~(uint64_t)(X86_PDPE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D)));
    186189                        if (fUseInvlPg)
    187190                            ASMInvalidatePage(uFlat);
     
    233236                if (pPT)
    234237                {
    235                     pPD->a[iPde].u = Bs3SelPtrToFlat(pPT)
    236                                    | (pPD->a[iPde].u & ~(uint64_t)(X86_PTE_PAE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D));
     238                    ASMAtomicUoWriteU64(&pPD->a[iPde].u,
     239                                          Bs3SelPtrToFlat(pPT)
     240                                        | (  pPD->a[iPde].u
     241                                           & ~(uint64_t)(X86_PTE_PAE_PG_MASK | X86_PDE4M_PS | X86_PDE4M_G | X86_PDE4M_D)));
    237242                    if (fUseInvlPg)
    238243                        ASMInvalidatePage(uFlat);
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