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]))