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