Module Name: src Committed By: skrll Date: Fri Mar 19 07:51:33 UTC 2021
Modified Files: src/sys/arch/mips/mips: pmap_machdep.c src/sys/arch/powerpc/booke: booke_pmap.c src/sys/uvm/pmap: pmap.c pmap.h Log Message: Support pmap_growkernel and KASAN shadow mapping of the new KVA. Neither mips nor ppc booke actually use pmap_growkernel (at present). Thanks to rin@ for testing a similar patch on ppc booke. To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/sys/arch/mips/mips/pmap_machdep.c cvs rdiff -u -r1.31 -r1.32 src/sys/arch/powerpc/booke/booke_pmap.c cvs rdiff -u -r1.60 -r1.61 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.19 -r1.20 src/sys/uvm/pmap/pmap.h 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/mips/mips/pmap_machdep.c diff -u src/sys/arch/mips/mips/pmap_machdep.c:1.33 src/sys/arch/mips/mips/pmap_machdep.c:1.34 --- src/sys/arch/mips/mips/pmap_machdep.c:1.33 Sun Dec 20 16:38:25 2020 +++ src/sys/arch/mips/mips/pmap_machdep.c Fri Mar 19 07:51:33 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_machdep.c,v 1.33 2020/12/20 16:38:25 skrll Exp $ */ +/* $NetBSD: pmap_machdep.c,v 1.34 2021/03/19 07:51:33 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap_machdep.c,v 1.33 2020/12/20 16:38:25 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_machdep.c,v 1.34 2021/03/19 07:51:33 skrll Exp $"); /* * Manages physical address maps. @@ -482,6 +482,8 @@ pmap_bootstrap(void) } KASSERT(pmap_pte_lookup(pmap_kernel(), VM_MIN_KERNEL_ADDRESS) == sysmap); + /* update the top of the kernel VM - pmap_growkernel not required */ + pmap_curmaxkvaddr = pmap_limits.virtual_end; /* * Initialize the pools. */ Index: src/sys/arch/powerpc/booke/booke_pmap.c diff -u src/sys/arch/powerpc/booke/booke_pmap.c:1.31 src/sys/arch/powerpc/booke/booke_pmap.c:1.32 --- src/sys/arch/powerpc/booke/booke_pmap.c:1.31 Wed Jan 6 07:56:19 2021 +++ src/sys/arch/powerpc/booke/booke_pmap.c Fri Mar 19 07:51:33 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: booke_pmap.c,v 1.31 2021/01/06 07:56:19 rin Exp $ */ +/* $NetBSD: booke_pmap.c,v 1.32 2021/03/19 07:51:33 skrll Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -37,7 +37,7 @@ #define __PMAP_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.31 2021/01/06 07:56:19 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: booke_pmap.c,v 1.32 2021/03/19 07:51:33 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_multiprocessor.h" @@ -206,6 +206,9 @@ pmap_bootstrap(vaddr_t startkernel, vadd + kv_nsegtabs * NBSEG; } + /* update the top of the kernel VM - pmap_growkernel not required */ + pmap_curmaxkvaddr = pmap_limits.virtual_end; + /* * Now actually allocate the kernel PTE array (must be done * after virtual_end is initialized). Index: src/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.60 src/sys/uvm/pmap/pmap.c:1.61 --- src/sys/uvm/pmap/pmap.c:1.60 Sat Mar 13 17:14:11 2021 +++ src/sys/uvm/pmap/pmap.c Fri Mar 19 07:51:33 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.60 2021/03/13 17:14:11 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.61 2021/03/19 07:51:33 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.60 2021/03/13 17:14:11 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.61 2021/03/19 07:51:33 skrll Exp $"); /* * Manages physical address maps. @@ -103,6 +103,7 @@ __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.6 #include <sys/param.h> +#include <sys/asan.h> #include <sys/atomic.h> #include <sys/buf.h> #include <sys/cpu.h> @@ -212,8 +213,12 @@ struct pmap_kernel kernel_pmap_store = { struct pmap * const kernel_pmap_ptr = &kernel_pmap_store.kernel_pmap; +/* The current top of kernel VM - gets updated by pmap_growkernel */ +vaddr_t pmap_curmaxkvaddr; + struct pmap_limits pmap_limits = { /* VA and PA limits */ .virtual_start = VM_MIN_KERNEL_ADDRESS, + .virtual_end = VM_MAX_KERNEL_ADDRESS, }; #ifdef UVMHIST @@ -453,26 +458,36 @@ pmap_virtual_space(vaddr_t *vstartp, vad vaddr_t pmap_growkernel(vaddr_t maxkvaddr) { - vaddr_t virtual_end = pmap_limits.virtual_end; + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "maxkvaddr=%#jx (%#jx)", maxkvaddr, + pmap_curmaxkvaddr, 0, 0); + + vaddr_t virtual_end = pmap_curmaxkvaddr; maxkvaddr = pmap_round_seg(maxkvaddr) - 1; /* + * Don't exceed VM_MAX_KERNEL_ADDRESS! + */ + if (maxkvaddr == 0 || maxkvaddr > VM_MAX_KERNEL_ADDRESS) + maxkvaddr = VM_MAX_KERNEL_ADDRESS; + + /* * Reserve PTEs for the new KVA space. */ for (; virtual_end < maxkvaddr; virtual_end += NBSEG) { pmap_pte_reserve(pmap_kernel(), virtual_end, 0); } - /* - * Don't exceed VM_MAX_KERNEL_ADDRESS! - */ - if (virtual_end == 0 || virtual_end > VM_MAX_KERNEL_ADDRESS) - virtual_end = VM_MAX_KERNEL_ADDRESS; + kasan_shadow_map((void *)pmap_curmaxkvaddr, + (size_t)(virtual_end - pmap_curmaxkvaddr)); /* * Update new end. */ - pmap_limits.virtual_end = virtual_end; + pmap_curmaxkvaddr = virtual_end; + + UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); + return virtual_end; } Index: src/sys/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.19 src/sys/uvm/pmap/pmap.h:1.20 --- src/sys/uvm/pmap/pmap.h:1.19 Mon Dec 21 08:41:38 2020 +++ src/sys/uvm/pmap/pmap.h Fri Mar 19 07:51:33 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.19 2020/12/21 08:41:38 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.20 2021/03/19 07:51:33 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -186,6 +186,11 @@ extern u_int pmap_page_colormask; extern pmap_segtab_t pmap_kern_segtab; +/* + * The current top of kernel VM + */ +extern vaddr_t pmap_curmaxkvaddr; + #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count)