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__*/
 

Reply via email to