Module Name:    src
Committed By:   maxv
Date:           Thu Nov 17 16:26:08 UTC 2016

Modified Files:
        src/sys/arch/amd64/amd64: machdep.c
        src/sys/arch/x86/x86: pmap.c

Log Message:
Remap the pages with G until kern_end, and not just the preloaded modules.
This way the bootstrap tables, proc0's stack and the I/O mem area don't get
flushed each time userland needs a TLB shootdown.


To generate a diff of this commit:
cvs rdiff -u -r1.232 -r1.233 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.225 -r1.226 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/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.232 src/sys/arch/amd64/amd64/machdep.c:1.233
--- src/sys/arch/amd64/amd64/machdep.c:1.232	Tue Nov 15 15:26:59 2016
+++ src/sys/arch/amd64/amd64/machdep.c	Thu Nov 17 16:26:08 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.232 2016/11/15 15:26:59 maxv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.233 2016/11/17 16:26:08 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -111,7 +111,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.232 2016/11/15 15:26:59 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.233 2016/11/17 16:26:08 maxv Exp $");
 
 /* #define XENDEBUG_LOW  */
 
@@ -1607,15 +1607,15 @@ init_x86_64(paddr_t first_avail)
 	    pmap_pa_start, avail_start, avail_end));
 #endif	/* !XEN */
 
+	/* End of the virtual space we have created so far. */
+	kern_end = KERNBASE + first_avail;
+
 	/*
 	 * Call pmap initialization to make new kernel address space.
 	 * We must do this before loading pages into the VM system.
 	 */
 	pmap_bootstrap(VM_MIN_KERNEL_ADDRESS);
 
-	/* End of the virtual space we have created so far. */
-	kern_end = KERNBASE + first_avail;
-
 #ifndef XEN
 	/* Internalize the physical pages into the VM system. */
 	init_x86_vm(first_avail);

Index: src/sys/arch/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.225 src/sys/arch/x86/x86/pmap.c:1.226
--- src/sys/arch/x86/x86/pmap.c:1.225	Fri Nov 11 11:34:51 2016
+++ src/sys/arch/x86/x86/pmap.c	Thu Nov 17 16:26:07 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.225 2016/11/11 11:34:51 maxv Exp $	*/
+/*	$NetBSD: pmap.c,v 1.226 2016/11/17 16:26:07 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2010, 2016 The NetBSD Foundation, Inc.
@@ -171,7 +171,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.225 2016/11/11 11:34:51 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.226 2016/11/17 16:26:07 maxv Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_lockdebug.h"
@@ -1288,17 +1288,16 @@ pmap_bootstrap(vaddr_t kva_start)
 		pmap_pg_g = PG_G;		/* enable software */
 
 		/* add PG_G attribute to already mapped kernel pages */
+
 		if (KERNBASE == VM_MIN_KERNEL_ADDRESS) {
+			/* i386 only */
 			kva_end = virtual_avail;
 		} else {
-			extern vaddr_t eblob, esym;
-			kva_end = (vaddr_t)&end;
-			if (esym > kva_end)
-				kva_end = esym;
-			if (eblob > kva_end)
-				kva_end = eblob;
-			kva_end = roundup(kva_end, PAGE_SIZE);
+			/* amd64 only */
+			extern vaddr_t kern_end;
+			kva_end = kern_end;
 		}
+
 		for (kva = KERNBASE; kva < kva_end; kva += PAGE_SIZE) {
 			p1i = pl1_i(kva);
 			if (pmap_valid_entry(PTE_BASE[p1i]))

Reply via email to