git: fa8285570bdd - stable/13 - amd64 pmap: simplify vtopte() and vtopde()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 15 Jan 2022 00:51:47 UTC
The branch stable/13 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=fa8285570bdd55226b2e8aeed009e6f2c52ff17e commit fa8285570bdd55226b2e8aeed009e6f2c52ff17e Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2022-01-05 00:26:12 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2022-01-14 18:11:02 +0000 amd64 pmap: simplify vtopte() and vtopde() (cherry picked from commit 720a892ac60fc1fa7c784edc40f188c93ac7e0b7) --- sys/amd64/amd64/pmap.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 9f405baaa007..9119775afb0d 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -1504,40 +1504,28 @@ pmap_pt_page_count_adj(pmap_t pmap, int count) } } +pt_entry_t vtoptem __read_mostly = (1ul << (NPTEPGSHIFT + NPDEPGSHIFT + + NPDPEPGSHIFT + NPML4EPGSHIFT)) - 1; +pt_entry_t *PTmap __read_mostly = P4Tmap; + PMAP_INLINE pt_entry_t * vtopte(vm_offset_t va) { - u_int64_t mask; - KASSERT(va >= VM_MAXUSER_ADDRESS, ("vtopte on a uva/gpa 0x%0lx", va)); - if (la57) { - mask = ((1ul << (NPTEPGSHIFT + NPDEPGSHIFT + NPDPEPGSHIFT + - NPML4EPGSHIFT + NPML5EPGSHIFT)) - 1); - return (P5Tmap + ((va >> PAGE_SHIFT) & mask)); - } else { - mask = ((1ul << (NPTEPGSHIFT + NPDEPGSHIFT + NPDPEPGSHIFT + - NPML4EPGSHIFT)) - 1); - return (P4Tmap + ((va >> PAGE_SHIFT) & mask)); - } + return (PTmap + ((va >> PAGE_SHIFT) & vtoptem)); } +pd_entry_t vtopdem __read_mostly = (1ul << (NPDEPGSHIFT + NPDPEPGSHIFT + + NPML4EPGSHIFT)) - 1; +pd_entry_t *PDmap __read_mostly = P4Dmap; + static __inline pd_entry_t * vtopde(vm_offset_t va) { - u_int64_t mask; - KASSERT(va >= VM_MAXUSER_ADDRESS, ("vtopde on a uva/gpa 0x%0lx", va)); - if (la57) { - mask = ((1ul << (NPDEPGSHIFT + NPDPEPGSHIFT + - NPML4EPGSHIFT + NPML5EPGSHIFT)) - 1); - return (P5Dmap + ((va >> PDRSHIFT) & mask)); - } else { - mask = ((1ul << (NPDEPGSHIFT + NPDPEPGSHIFT + - NPML4EPGSHIFT)) - 1); - return (P4Dmap + ((va >> PDRSHIFT) & mask)); - } + return (PDmap + ((va >> PDRSHIFT) & vtopdem)); } static u_int64_t @@ -2207,6 +2195,13 @@ pmap_bootstrap_la57(void *arg __unused) */ v_pml5[PML5PML5I] = KPML5phys | X86_PG_RW | X86_PG_V | pg_nx; + vtoptem = (1ul << (NPTEPGSHIFT + NPDEPGSHIFT + NPDPEPGSHIFT + + NPML4EPGSHIFT + NPML5EPGSHIFT)) - 1; + PTmap = P5Tmap; + vtopdem = (1ul << (NPDEPGSHIFT + NPDPEPGSHIFT + + NPML4EPGSHIFT + NPML5EPGSHIFT)) - 1; + PDmap = P5Dmap; + kernel_pmap->pm_cr3 = KPML5phys; kernel_pmap->pm_pmltop = v_pml5; pmap_pt_page_count_adj(kernel_pmap, 1);