Module Name: src Committed By: maxv Date: Thu Dec 28 14:34:39 UTC 2017
Modified Files: src/sys/arch/x86/include: pmap.h src/sys/arch/x86/x86: pmap.c Log Message: Use variables in PMAP_DIRECT_*, so that the location of the direct map can change. To generate a diff of this commit: cvs rdiff -u -r1.71 -r1.72 src/sys/arch/x86/include/pmap.h cvs rdiff -u -r1.269 -r1.270 src/sys/arch/x86/x86/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/include/pmap.h diff -u src/sys/arch/x86/include/pmap.h:1.71 src/sys/arch/x86/include/pmap.h:1.72 --- src/sys/arch/x86/include/pmap.h:1.71 Sat Nov 11 12:51:05 2017 +++ src/sys/arch/x86/include/pmap.h Thu Dec 28 14:34:39 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.71 2017/11/11 12:51:05 maxv Exp $ */ +/* $NetBSD: pmap.h,v 1.72 2017/12/28 14:34:39 maxv Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -528,13 +528,18 @@ void pmap_free_ptps(struct vm_page *); #ifdef __HAVE_DIRECT_MAP +extern vaddr_t pmap_direct_base; +extern vaddr_t pmap_direct_end; + #define L4_SLOT_DIRECT 456 #define PDIR_SLOT_DIRECT L4_SLOT_DIRECT #define NL4_SLOT_DIRECT 32 -#define PMAP_DIRECT_BASE (VA_SIGN_NEG((L4_SLOT_DIRECT * NBPD_L4))) -#define PMAP_DIRECT_END (PMAP_DIRECT_BASE + NL4_SLOT_DIRECT * NBPD_L4) +#define PMAP_DIRECT_DEFAULT_BASE (VA_SIGN_NEG((L4_SLOT_DIRECT * NBPD_L4))) + +#define PMAP_DIRECT_BASE pmap_direct_base +#define PMAP_DIRECT_END pmap_direct_end #define PMAP_DIRECT_MAP(pa) ((vaddr_t)PMAP_DIRECT_BASE + (pa)) #define PMAP_DIRECT_UNMAP(va) ((paddr_t)(va) - PMAP_DIRECT_BASE) Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.269 src/sys/arch/x86/x86/pmap.c:1.270 --- src/sys/arch/x86/x86/pmap.c:1.269 Thu Dec 28 14:03:13 2017 +++ src/sys/arch/x86/x86/pmap.c Thu Dec 28 14:34:39 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.269 2017/12/28 14:03:13 maxv Exp $ */ +/* $NetBSD: pmap.c,v 1.270 2017/12/28 14:34:39 maxv Exp $ */ /* * Copyright (c) 2008, 2010, 2016, 2017 The NetBSD Foundation, Inc. @@ -170,7 +170,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.269 2017/12/28 14:03:13 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.270 2017/12/28 14:34:39 maxv Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -495,6 +495,13 @@ static struct pool_cache pmap_cache; */ static struct pool_cache pmap_pv_cache; +#ifdef __HAVE_DIRECT_MAP +vaddr_t pmap_direct_base __read_mostly; +vaddr_t pmap_direct_end __read_mostly; +size_t pmap_direct_pdpe __read_mostly; +size_t pmap_direct_npdp __read_mostly; +#endif + #ifndef __HAVE_DIRECT_MAP /* * Special VAs and the PTEs that map them @@ -1438,7 +1445,7 @@ pmap_init_directmap(struct pmap *kpm) extern phys_ram_seg_t mem_clusters[]; extern int mem_cluster_cnt; - const vaddr_t startva = PMAP_DIRECT_BASE; + const vaddr_t startva = PMAP_DIRECT_DEFAULT_BASE; size_t nL4e, nL3e, nL2e; size_t L4e_idx, L3e_idx, L2e_idx; size_t spahole, epahole; @@ -1523,6 +1530,11 @@ pmap_init_directmap(struct pmap *kpm) *pte = 0; pmap_update_pg(tmpva); + pmap_direct_base = startva; + pmap_direct_end = endva; + pmap_direct_pdpe = L4e_idx; + pmap_direct_npdp = nL4e; + tlbflush(); } #endif /* __HAVE_DIRECT_MAP */ @@ -2213,8 +2225,8 @@ pmap_pdp_ctor(void *arg, void *v, int fl } #ifdef __HAVE_DIRECT_MAP - memcpy(&pdir[PDIR_SLOT_DIRECT], &PDP_BASE[PDIR_SLOT_DIRECT], - NL4_SLOT_DIRECT * sizeof(pd_entry_t)); + memcpy(&pdir[pmap_direct_pdpe], &PDP_BASE[pmap_direct_pdpe], + pmap_direct_npdp * sizeof(pd_entry_t)); #endif #endif /* XEN && __x86_64__*/