VirtualBox

Changeset 86463 in vbox


Ignore:
Timestamp:
Oct 6, 2020 10:23:59 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
140768
Message:

VMM/PGMAllShw.h: More bitfield avoidance. bugref:9841 bugref:9746

File:
1 edited

Legend:

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

    r86461 r86463  
    3333#undef SHW_PDE_ATOMIC_SET
    3434#undef SHW_PDE_ATOMIC_SET2
     35#undef SHW_PDE_IS_BIG
    3536#undef SHW_PTE_PG_MASK
    3637#undef SHW_PTE_IS_P
     
    6970# define SHW_PD_MASK                    X86_PD_MASK
    7071# define SHW_TOTAL_PD_ENTRIES           X86_PG_ENTRIES
     72# define SHW_PDE_IS_BIG(Pde)            ( (Pde).b.u1Size )
    7173# define SHW_PDE_ATOMIC_SET(Pde, uNew)  do { ASMAtomicWriteU32(&(Pde).u, (uNew)); } while (0)
    7274# define SHW_PDE_ATOMIC_SET2(Pde, Pde2) do { ASMAtomicWriteU32(&(Pde).u, (Pde2).u); } while (0)
     
    102104# define SHW_PD_SHIFT                   EPT_PD_SHIFT
    103105# define SHW_PD_MASK                    EPT_PD_MASK
     106# define SHW_PDE_IS_BIG(Pde)            ( (Pde).u & EPT_E_LEAF )
    104107# define SHW_PDE_ATOMIC_SET(Pde, uNew)  do { ASMAtomicWriteU64(&(Pde).u, (uNew)); } while (0)
    105108# define SHW_PDE_ATOMIC_SET2(Pde, Pde2) do { ASMAtomicWriteU64(&(Pde).u, (Pde2).u); } while (0)
    106109# define SHW_PTE_PG_MASK                EPT_PTE_PG_MASK
    107 # define SHW_PTE_IS_P(Pte)              ( (Pte).n.u1Present ) /* Approximation, works for us. */
    108 # define SHW_PTE_IS_RW(Pte)             ( (Pte).n.u1Write )
     110# define SHW_PTE_IS_P(Pte)              ( (Pte).u & EPT_E_READ ) /* Approximation, works for us. */
     111# define SHW_PTE_IS_RW(Pte)             ( (Pte).u & EPT_E_WRITE )
    109112# define SHW_PTE_IS_US(Pte)             ( true )
    110113# define SHW_PTE_IS_A(Pte)              ( true )
    111114# define SHW_PTE_IS_D(Pte)              ( true )
    112 # define SHW_PTE_IS_P_RW(Pte)           ( (Pte).n.u1Present && (Pte).n.u1Write )
     115# define SHW_PTE_IS_P_RW(Pte)           ( ((Pte).u & (EPT_E_READ | EPT_E_WRITE)) == (EPT_E_READ | EPT_E_WRITE) )
    113116# define SHW_PTE_IS_TRACK_DIRTY(Pte)    ( false )
    114 # define SHW_PTE_GET_HCPHYS(Pte)        ( (Pte).u & X86_PTE_PG_MASK )
     117# define SHW_PTE_GET_HCPHYS(Pte)        ( (Pte).u & EPT_PTE_PG_MASK )
    115118# define SHW_PTE_LOG64(Pte)             ( (Pte).u )
    116119# define SHW_PTE_GET_U(Pte)             ( (Pte).u )             /**< Use with care. */
     
    118121# define SHW_PTE_ATOMIC_SET(Pte, uNew)  do { ASMAtomicWriteU64(&(Pte).u, (uNew)); } while (0)
    119122# define SHW_PTE_ATOMIC_SET2(Pte, Pte2) do { ASMAtomicWriteU64(&(Pte).u, (Pte2).u); } while (0)
    120 # define SHW_PTE_SET_RO(Pte)            do { (Pte).n.u1Write = 0; } while (0)
    121 # define SHW_PTE_SET_RW(Pte)            do { (Pte).n.u1Write = 1; } while (0)
     123# define SHW_PTE_SET_RO(Pte)            do { (Pte).u &= ~EPT_E_WRITE; } while (0)
     124# define SHW_PTE_SET_RW(Pte)            do { (Pte).u |= EPT_E_WRITE; } while (0)
    122125# define SHW_PT_SHIFT                   EPT_PT_SHIFT
    123126# define SHW_PT_MASK                    EPT_PT_MASK
     
    125128# define SHW_PDPT_MASK                  EPT_PDPT_MASK
    126129# define SHW_PDPE_PG_MASK               EPT_PDPE_PG_MASK
    127 # define SHW_TOTAL_PD_ENTRIES           (EPT_PG_AMD64_ENTRIES*EPT_PG_AMD64_PDPE_ENTRIES)
     130# define SHW_TOTAL_PD_ENTRIES           (EPT_PG_AMD64_ENTRIES * EPT_PG_AMD64_PDPE_ENTRIES)
    128131
    129132#else
     
    139142# define SHW_PD_SHIFT                   X86_PD_PAE_SHIFT
    140143# define SHW_PD_MASK                    X86_PD_PAE_MASK
     144# define SHW_PDE_IS_BIG(Pde)            ( (Pde).u & X86_PDE_PS )
    141145# define SHW_PDE_ATOMIC_SET(Pde, uNew)  do { ASMAtomicWriteU64(&(Pde).u, (uNew)); } while (0)
    142146# define SHW_PDE_ATOMIC_SET2(Pde, Pde2) do { ASMAtomicWriteU64(&(Pde).u, (Pde2).u); } while (0)
     
    368372
    369373    /* Deal with large pages. */
    370     if (Pde.b.u1Size)
     374    if (SHW_PDE_IS_BIG(Pde))
    371375    {
    372376        /*
     
    544548            return VERR_PAGE_TABLE_NOT_PRESENT;
    545549
    546         AssertFatal(!Pde.b.u1Size);
     550        AssertFatal(!SHW_PDE_IS_BIG(Pde));
    547551
    548552        /*
Note: See TracChangeset for help on using the changeset viewer.

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