Module Name: src Committed By: ad Date: Sat Mar 14 14:05:44 UTC 2020
Modified Files: src/share/man/man9: pmap.9 src/sys/arch/aarch64/aarch64: pmap.c src/sys/arch/alpha/include: pmap.h src/sys/arch/arm/arm32: pmap.c src/sys/arch/arm/include/arm32: pmap.h src/sys/arch/hppa/include: pmap.h src/sys/arch/ia64/ia64: pmap.c src/sys/arch/m68k/include: pmap_motorola.h src/sys/arch/powerpc/include/ibm4xx: pmap.h src/sys/arch/powerpc/include/oea: pmap.h src/sys/arch/sh3/include: pmap.h src/sys/arch/sparc/include: pmap.h src/sys/arch/sparc/sparc: pmap.c src/sys/arch/sparc64/sparc64: pmap.c src/sys/arch/sun2/include: pmap.h src/sys/arch/sun3/include: pmap3.h pmap3x.h src/sys/arch/usermode/usermode: pmap.c src/sys/arch/vax/include: pmap.h src/sys/arch/x86/include: pmap.h src/sys/arch/x86/x86: pmap.c src/sys/uvm: uvm_pmap.h src/sys/uvm/pmap: pmap.c Log Message: pmap_remove_all(): Return a boolean value to indicate the behaviour. If true, all mappings have been removed, the pmap is totally cleared out, and UVM can then avoid doing the work to call pmap_remove() for each map entry. If false, either nothing has been done, or some helpful arch-specific voodoo has taken place. To generate a diff of this commit: cvs rdiff -u -r1.46 -r1.47 src/share/man/man9/pmap.9 cvs rdiff -u -r1.67 -r1.68 src/sys/arch/aarch64/aarch64/pmap.c cvs rdiff -u -r1.80 -r1.81 src/sys/arch/alpha/include/pmap.h cvs rdiff -u -r1.398 -r1.399 src/sys/arch/arm/arm32/pmap.c cvs rdiff -u -r1.163 -r1.164 src/sys/arch/arm/include/arm32/pmap.h cvs rdiff -u -r1.39 -r1.40 src/sys/arch/hppa/include/pmap.h cvs rdiff -u -r1.39 -r1.40 src/sys/arch/ia64/ia64/pmap.c cvs rdiff -u -r1.35 -r1.36 src/sys/arch/m68k/include/pmap_motorola.h cvs rdiff -u -r1.20 -r1.21 src/sys/arch/powerpc/include/ibm4xx/pmap.h cvs rdiff -u -r1.29 -r1.30 src/sys/arch/powerpc/include/oea/pmap.h cvs rdiff -u -r1.36 -r1.37 src/sys/arch/sh3/include/pmap.h cvs rdiff -u -r1.92 -r1.93 src/sys/arch/sparc/include/pmap.h cvs rdiff -u -r1.366 -r1.367 src/sys/arch/sparc/sparc/pmap.c cvs rdiff -u -r1.311 -r1.312 src/sys/arch/sparc64/sparc64/pmap.c cvs rdiff -u -r1.27 -r1.28 src/sys/arch/sun2/include/pmap.h cvs rdiff -u -r1.50 -r1.51 src/sys/arch/sun3/include/pmap3.h cvs rdiff -u -r1.30 -r1.31 src/sys/arch/sun3/include/pmap3x.h cvs rdiff -u -r1.114 -r1.115 src/sys/arch/usermode/usermode/pmap.c cvs rdiff -u -r1.80 -r1.81 src/sys/arch/vax/include/pmap.h cvs rdiff -u -r1.111 -r1.112 src/sys/arch/x86/include/pmap.h cvs rdiff -u -r1.364 -r1.365 src/sys/arch/x86/x86/pmap.c cvs rdiff -u -r1.39 -r1.40 src/sys/uvm/uvm_pmap.h cvs rdiff -u -r1.47 -r1.48 src/sys/uvm/pmap/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/share/man/man9/pmap.9 diff -u src/share/man/man9/pmap.9:1.46 src/share/man/man9/pmap.9:1.47 --- src/share/man/man9/pmap.9:1.46 Mon Jan 14 15:56:06 2019 +++ src/share/man/man9/pmap.9 Sat Mar 14 14:05:42 2020 @@ -1,6 +1,6 @@ -.\" $NetBSD: pmap.9,v 1.46 2019/01/14 15:56:06 wiz Exp $ +.\" $NetBSD: pmap.9,v 1.47 2020/03/14 14:05:42 ad Exp $ .\" -.\" Copyright (c) 2000, 2001, 2002 The NetBSD Foundation, Inc. +.\" Copyright (c) 2000, 2001, 2002, 2020 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 13, 2019 +.Dd March 14, 2020 .Dt PMAP 9 .Os .Sh NAME @@ -63,7 +63,7 @@ "u_int flags" .Ft void .Fn "pmap_remove" "pmap_t pmap" "vaddr_t sva" "vaddr_t eva" -.Ft void +.Ft bool .Fn "pmap_remove_all" "pmap_t pmap" .Ft void .Fn "pmap_protect" "pmap_t pmap" "vaddr_t sva" "vaddr_t eva" "vm_prot_t prot" @@ -549,7 +549,7 @@ Remove mappings from the virtual address to .Fa eva from the specified physical map. -.It void Fn "pmap_remove_all" "pmap_t pmap" +.It bool Fn "pmap_remove_all" "pmap_t pmap" This function is a hint to the .Nm pmap implementation that all entries in @@ -581,6 +581,21 @@ mappings immediately in or to use the knowledge of the upcoming .Fn pmap_remove calls to optimize the removals (or to just ignore this call). +.Pp +If all mappings in the address space have been removed, +.Fn pmap_remove_all +should return +.Dv true +to indicate that that the pmap is now empty. +In this case UVM will skip all subsequent calls to +.Fn pmap_remove +and +.Fn pmap_update +for the pmap, that would otherwise be required to clean it out. +If any mappings could possibly remain, +.Fn pmap_remove_all +must return +.Dv false . .It void Fn "pmap_protect" "pmap_t pmap" "vaddr_t sva" "vaddr_t eva" \ "vm_prot_t prot" Set the protection of the mappings in the virtual address range Index: src/sys/arch/aarch64/aarch64/pmap.c diff -u src/sys/arch/aarch64/aarch64/pmap.c:1.67 src/sys/arch/aarch64/aarch64/pmap.c:1.68 --- src/sys/arch/aarch64/aarch64/pmap.c:1.67 Mon Mar 2 08:39:36 2020 +++ src/sys/arch/aarch64/aarch64/pmap.c Sat Mar 14 14:05:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.67 2020/03/02 08:39:36 ryo Exp $ */ +/* $NetBSD: pmap.c,v 1.68 2020/03/14 14:05:42 ad Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.67 2020/03/02 08:39:36 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.68 2020/03/14 14:05:42 ad Exp $"); #include "opt_arm_debug.h" #include "opt_ddb.h" @@ -1947,10 +1947,11 @@ pmap_enter(struct pmap *pm, vaddr_t va, return _pmap_enter(pm, va, pa, prot, flags, false); } -void +bool pmap_remove_all(struct pmap *pm) { /* nothing to do */ + return false; } static void Index: src/sys/arch/alpha/include/pmap.h diff -u src/sys/arch/alpha/include/pmap.h:1.80 src/sys/arch/alpha/include/pmap.h:1.81 --- src/sys/arch/alpha/include/pmap.h:1.80 Sat May 19 20:04:41 2018 +++ src/sys/arch/alpha/include/pmap.h Sat Mar 14 14:05:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.80 2018/05/19 20:04:41 thorpej Exp $ */ +/* $NetBSD: pmap.h,v 1.81 2020/03/14 14:05:42 ad Exp $ */ /*- * Copyright (c) 1998, 1999, 2000, 2001, 2007 The NetBSD Foundation, Inc. @@ -214,10 +214,11 @@ void pmap_do_tlb_shootdown(struct cpu_in #define pmap_copy(dp, sp, da, l, sa) /* nothing */ #define pmap_update(pmap) /* nothing (yet) */ -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } #define pmap_is_referenced(pg) \ Index: src/sys/arch/arm/arm32/pmap.c diff -u src/sys/arch/arm/arm32/pmap.c:1.398 src/sys/arch/arm/arm32/pmap.c:1.399 --- src/sys/arch/arm/arm32/pmap.c:1.398 Fri Mar 13 16:25:19 2020 +++ src/sys/arch/arm/arm32/pmap.c Sat Mar 14 14:05:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.398 2020/03/13 16:25:19 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.399 2020/03/14 14:05:42 ad Exp $ */ /* * Copyright 2003 Wasabi Systems, Inc. @@ -198,7 +198,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.398 2020/03/13 16:25:19 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.399 2020/03/14 14:05:42 ad Exp $"); #include <sys/atomic.h> #include <sys/param.h> @@ -5180,7 +5180,7 @@ pmap_update(pmap_t pm) UVMHIST_LOG(maphist, " <-- done", 0, 0, 0, 0); } -void +bool pmap_remove_all(pmap_t pm) { @@ -5208,6 +5208,7 @@ pmap_remove_all(pmap_t pm) pmap_tlb_asid_release_all(pm); #endif pm->pm_remove_all = true; + return false; } /* Index: src/sys/arch/arm/include/arm32/pmap.h diff -u src/sys/arch/arm/include/arm32/pmap.h:1.163 src/sys/arch/arm/include/arm32/pmap.h:1.164 --- src/sys/arch/arm/include/arm32/pmap.h:1.163 Mon Feb 24 20:31:56 2020 +++ src/sys/arch/arm/include/arm32/pmap.h Sat Mar 14 14:05:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.163 2020/02/24 20:31:56 ad Exp $ */ +/* $NetBSD: pmap.h,v 1.164 2020/03/14 14:05:42 ad Exp $ */ /* * Copyright (c) 2002, 2003 Wasabi Systems, Inc. @@ -374,7 +374,7 @@ u_int arm32_mmap_flags(paddr_t); * Functions that we need to export */ void pmap_procwr(struct proc *, vaddr_t, int); -void pmap_remove_all(pmap_t); +bool pmap_remove_all(pmap_t); bool pmap_extract(pmap_t, vaddr_t, paddr_t *); #define PMAP_NEED_PROCWR Index: src/sys/arch/hppa/include/pmap.h diff -u src/sys/arch/hppa/include/pmap.h:1.39 src/sys/arch/hppa/include/pmap.h:1.40 --- src/sys/arch/hppa/include/pmap.h:1.39 Mon Feb 24 20:42:18 2020 +++ src/sys/arch/hppa/include/pmap.h Sat Mar 14 14:05:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.39 2020/02/24 20:42:18 ad Exp $ */ +/* $NetBSD: pmap.h,v 1.40 2020/03/14 14:05:42 ad Exp $ */ /* $OpenBSD: pmap.h,v 1.35 2007/12/14 18:32:23 deraadt Exp $ */ @@ -167,10 +167,11 @@ pmap_deactivate(struct lwp *l) /* Nothing. */ } -static inline void +static inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } static inline int Index: src/sys/arch/ia64/ia64/pmap.c diff -u src/sys/arch/ia64/ia64/pmap.c:1.39 src/sys/arch/ia64/ia64/pmap.c:1.40 --- src/sys/arch/ia64/ia64/pmap.c:1.39 Sat Nov 30 16:23:46 2019 +++ src/sys/arch/ia64/ia64/pmap.c Sat Mar 14 14:05:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.39 2019/11/30 16:23:46 riastradh Exp $ */ +/* $NetBSD: pmap.c,v 1.40 2020/03/14 14:05:42 ad Exp $ */ /*- * Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc. @@ -81,7 +81,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.39 2019/11/30 16:23:46 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.40 2020/03/14 14:05:42 ad Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -1856,10 +1856,11 @@ pmap_remove(pmap_t pmap, vaddr_t sva, va * entries in pmap will be removed before any more entries are * entered. */ -void +bool pmap_remove_all(pmap_t pmap) { /* XXX do nothing */ + return false; } /* Index: src/sys/arch/m68k/include/pmap_motorola.h diff -u src/sys/arch/m68k/include/pmap_motorola.h:1.35 src/sys/arch/m68k/include/pmap_motorola.h:1.36 --- src/sys/arch/m68k/include/pmap_motorola.h:1.35 Sat Feb 1 06:17:11 2020 +++ src/sys/arch/m68k/include/pmap_motorola.h Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_motorola.h,v 1.35 2020/02/01 06:17:11 tsutsui Exp $ */ +/* $NetBSD: pmap_motorola.h,v 1.36 2020/03/14 14:05:43 ad Exp $ */ /* * Copyright (c) 1991, 1993 @@ -204,10 +204,11 @@ extern struct pv_header *pv_table; /* ar #define pmap_update(pmap) __nothing /* nothing (yet) */ -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } extern paddr_t Sysseg_pa; Index: src/sys/arch/powerpc/include/ibm4xx/pmap.h diff -u src/sys/arch/powerpc/include/ibm4xx/pmap.h:1.20 src/sys/arch/powerpc/include/ibm4xx/pmap.h:1.21 --- src/sys/arch/powerpc/include/ibm4xx/pmap.h:1.20 Thu Mar 5 02:14:53 2020 +++ src/sys/arch/powerpc/include/ibm4xx/pmap.h Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.20 2020/03/05 02:14:53 rin Exp $ */ +/* $NetBSD: pmap.h,v 1.21 2020/03/14 14:05:43 ad Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -172,10 +172,11 @@ bool pmap_check_attr(struct vm_page *, u void pmap_real_memory(paddr_t *, psize_t *); int pmap_tlbmiss(vaddr_t va, int ctx); -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } int ctx_alloc(struct pmap *); Index: src/sys/arch/powerpc/include/oea/pmap.h diff -u src/sys/arch/powerpc/include/oea/pmap.h:1.29 src/sys/arch/powerpc/include/oea/pmap.h:1.30 --- src/sys/arch/powerpc/include/oea/pmap.h:1.29 Thu Apr 19 21:50:07 2018 +++ src/sys/arch/powerpc/include/oea/pmap.h Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.29 2018/04/19 21:50:07 christos Exp $ */ +/* $NetBSD: pmap.h,v 1.30 2020/03/14 14:05:43 ad Exp $ */ /*- * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -128,10 +128,11 @@ extern int pmap_use_altivec; #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) /* ARGSUSED */ -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } #if (defined(PPC_OEA) + defined(PPC_OEA64) + defined(PPC_OEA64_BRIDGE)) != 1 Index: src/sys/arch/sh3/include/pmap.h diff -u src/sys/arch/sh3/include/pmap.h:1.36 src/sys/arch/sh3/include/pmap.h:1.37 --- src/sys/arch/sh3/include/pmap.h:1.36 Sat Sep 3 09:07:53 2016 +++ src/sys/arch/sh3/include/pmap.h Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.36 2016/09/03 09:07:53 christos Exp $ */ +/* $NetBSD: pmap.h,v 1.37 2020/03/14 14:05:43 ad Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -61,10 +61,11 @@ void pmap_procwr(struct proc *, vaddr_t, #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) /* ARGSUSED */ -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } /* Index: src/sys/arch/sparc/include/pmap.h diff -u src/sys/arch/sparc/include/pmap.h:1.92 src/sys/arch/sparc/include/pmap.h:1.93 --- src/sys/arch/sparc/include/pmap.h:1.92 Sat Oct 19 19:40:23 2013 +++ src/sys/arch/sparc/include/pmap.h Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.92 2013/10/19 19:40:23 mrg Exp $ */ +/* $NetBSD: pmap.h,v 1.93 2020/03/14 14:05:43 ad Exp $ */ /* * Copyright (c) 1996 @@ -270,7 +270,7 @@ void kvm_uncache(char *, int); int mmu_pagein(struct pmap *pm, vaddr_t, int); void pmap_writetext(unsigned char *, int); void pmap_globalize_boot_cpuinfo(struct cpu_info *); -void pmap_remove_all(struct pmap *pm); +bool pmap_remove_all(struct pmap *pm); #define pmap_mmap_flags(x) 0 /* dummy so far */ /* SUN4/SUN4C SPECIFIC DECLARATIONS */ Index: src/sys/arch/sparc/sparc/pmap.c diff -u src/sys/arch/sparc/sparc/pmap.c:1.366 src/sys/arch/sparc/sparc/pmap.c:1.367 --- src/sys/arch/sparc/sparc/pmap.c:1.366 Sun Jan 13 22:11:11 2019 +++ src/sys/arch/sparc/sparc/pmap.c Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.366 2019/01/13 22:11:11 mrg Exp $ */ +/* $NetBSD: pmap.c,v 1.367 2020/03/14 14:05:43 ad Exp $ */ /* * Copyright (c) 1996 @@ -56,7 +56,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.366 2019/01/13 22:11:11 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.367 2020/03/14 14:05:43 ad Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -4606,11 +4606,11 @@ pgt_lvl23_remove4m(struct pmap *pm, stru } #endif /* SUN4M || SUN4D */ -void +bool pmap_remove_all(struct pmap *pm) { if (pm->pm_ctx == NULL) - return; + return false; #if defined(SUN4) || defined(SUN4C) if (CPU_HAS_SUNMMU) { @@ -4628,6 +4628,7 @@ pmap_remove_all(struct pmap *pm) #endif pm->pm_flags |= PMAP_USERCACHECLEAN; + return false; } /* Index: src/sys/arch/sparc64/sparc64/pmap.c diff -u src/sys/arch/sparc64/sparc64/pmap.c:1.311 src/sys/arch/sparc64/sparc64/pmap.c:1.312 --- src/sys/arch/sparc64/sparc64/pmap.c:1.311 Sun Dec 15 21:11:34 2019 +++ src/sys/arch/sparc64/sparc64/pmap.c Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.311 2019/12/15 21:11:34 ad Exp $ */ +/* $NetBSD: pmap.c,v 1.312 2020/03/14 14:05:43 ad Exp $ */ /* * * Copyright (C) 1996-1999 Eduardo Horvath. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.311 2019/12/15 21:11:34 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.312 2020/03/14 14:05:43 ad Exp $"); #undef NO_VCACHE /* Don't forget the locked TLB in dostart */ #define HWREF @@ -2018,7 +2018,7 @@ pmap_enter(struct pmap *pm, vaddr_t va, return error; } -void +bool pmap_remove_all(struct pmap *pm) { #ifdef MULTIPROCESSOR @@ -2027,7 +2027,7 @@ pmap_remove_all(struct pmap *pm) #endif if (pm == pmap_kernel()) { - return; + return false; } write_user_windows(); pm->pm_refs = 0; @@ -2063,6 +2063,7 @@ pmap_remove_all(struct pmap *pm) * only flush the right context on each CPU? */ blast_dcache(); + return false; } /* Index: src/sys/arch/sun2/include/pmap.h diff -u src/sys/arch/sun2/include/pmap.h:1.27 src/sys/arch/sun2/include/pmap.h:1.28 --- src/sys/arch/sun2/include/pmap.h:1.27 Sat Feb 1 06:17:11 2020 +++ src/sys/arch/sun2/include/pmap.h Sat Mar 14 14:05:43 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.27 2020/02/01 06:17:11 tsutsui Exp $ */ +/* $NetBSD: pmap.h,v 1.28 2020/03/14 14:05:43 ad Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -72,10 +72,11 @@ extern vaddr_t pmap_map(vaddr_t, paddr_t /* Extract the PMEG for a given physical address. */ extern int _pmap_extract_pmeg(pmap_t, vaddr_t); -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } /* Index: src/sys/arch/sun3/include/pmap3.h diff -u src/sys/arch/sun3/include/pmap3.h:1.50 src/sys/arch/sun3/include/pmap3.h:1.51 --- src/sys/arch/sun3/include/pmap3.h:1.50 Sat Jan 18 20:47:15 2020 +++ src/sys/arch/sun3/include/pmap3.h Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap3.h,v 1.50 2020/01/18 20:47:15 tsutsui Exp $ */ +/* $NetBSD: pmap3.h,v 1.51 2020/03/14 14:05:44 ad Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -67,10 +67,11 @@ extern segsz_t pmap_wired_pages(pmap_t); /* Map a given physical region to a virtual region */ extern vaddr_t pmap_map(vaddr_t, paddr_t, paddr_t, int); -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } /* Index: src/sys/arch/sun3/include/pmap3x.h diff -u src/sys/arch/sun3/include/pmap3x.h:1.30 src/sys/arch/sun3/include/pmap3x.h:1.31 --- src/sys/arch/sun3/include/pmap3x.h:1.30 Sat Jan 18 20:47:15 2020 +++ src/sys/arch/sun3/include/pmap3x.h Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap3x.h,v 1.30 2020/01/18 20:47:15 tsutsui Exp $ */ +/* $NetBSD: pmap3x.h,v 1.31 2020/03/14 14:05:44 ad Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -56,10 +56,11 @@ segsz_t pmap_count(pmap_t, int); /* Map a given physical region to a virtual region */ vaddr_t pmap_map(vaddr_t, paddr_t, paddr_t, int); -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } /* Index: src/sys/arch/usermode/usermode/pmap.c diff -u src/sys/arch/usermode/usermode/pmap.c:1.114 src/sys/arch/usermode/usermode/pmap.c:1.115 --- src/sys/arch/usermode/usermode/pmap.c:1.114 Sun Sep 16 09:25:47 2018 +++ src/sys/arch/usermode/usermode/pmap.c Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.114 2018/09/16 09:25:47 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.115 2020/03/14 14:05:44 ad Exp $ */ /*- * Copyright (c) 2011 Reinoud Zandijk <rein...@netbsd.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.114 2018/09/16 09:25:47 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.115 2020/03/14 14:05:44 ad Exp $"); #include "opt_memsize.h" #include "opt_kmempages.h" @@ -1030,7 +1030,7 @@ pmap_remove(pmap_t pmap, vaddr_t sva, va splx(s); } -void +bool pmap_remove_all(pmap_t pmap) { /* just a hint that all the entries are to be removed */ @@ -1038,7 +1038,7 @@ pmap_remove_all(pmap_t pmap) /* we dont do anything with the kernel pmap */ if (pmap == pmap_kernel()) - return; + return false; #if 0 /* remove all mappings in one-go; not needed */ @@ -1050,6 +1050,7 @@ pmap_remove_all(pmap_t pmap) thunk_msync(VM_MIN_ADDRESS, VM_MAXUSER_ADDRESS - VM_MIN_ADDRESS, THUNK_MS_SYNC | THUNK_MS_INVALIDATE); #endif + return false; } void Index: src/sys/arch/vax/include/pmap.h diff -u src/sys/arch/vax/include/pmap.h:1.80 src/sys/arch/vax/include/pmap.h:1.81 --- src/sys/arch/vax/include/pmap.h:1.80 Tue May 24 23:30:30 2011 +++ src/sys/arch/vax/include/pmap.h Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.80 2011/05/24 23:30:30 matt Exp $ */ +/* $NetBSD: pmap.h,v 1.81 2020/03/14 14:05:44 ad Exp $ */ /* * Copyright (c) 1991 Regents of the University of California. @@ -258,10 +258,11 @@ pmap_protect(pmap_t pmap, vaddr_t start, pmap_protect_long(pmap, start, end, prot); } -static __inline void +static __inline bool pmap_remove_all(struct pmap *pmap) { /* Nothing. */ + return false; } /* Routines that are best to define as macros */ Index: src/sys/arch/x86/include/pmap.h diff -u src/sys/arch/x86/include/pmap.h:1.111 src/sys/arch/x86/include/pmap.h:1.112 --- src/sys/arch/x86/include/pmap.h:1.111 Tue Mar 10 22:38:41 2020 +++ src/sys/arch/x86/include/pmap.h Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.111 2020/03/10 22:38:41 ad Exp $ */ +/* $NetBSD: pmap.h,v 1.112 2020/03/14 14:05:44 ad Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -366,7 +366,7 @@ bool pmap_test_attrs(struct vm_page *, void pmap_write_protect(struct pmap *, vaddr_t, vaddr_t, vm_prot_t); void pmap_load(void); paddr_t pmap_init_tmp_pgtbl(paddr_t); -void pmap_remove_all(struct pmap *); +bool pmap_remove_all(struct pmap *); void pmap_ldt_cleanup(struct lwp *); void pmap_ldt_sync(struct pmap *); void pmap_kremove_local(vaddr_t, vsize_t); Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.364 src/sys/arch/x86/x86/pmap.c:1.365 --- src/sys/arch/x86/x86/pmap.c:1.364 Sat Mar 14 05:19:50 2020 +++ src/sys/arch/x86/x86/pmap.c Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.364 2020/03/14 05:19:50 maxv Exp $ */ +/* $NetBSD: pmap.c,v 1.365 2020/03/14 14:05:44 ad Exp $ */ /* * Copyright (c) 2008, 2010, 2016, 2017, 2019, 2020 The NetBSD Foundation, Inc. @@ -130,7 +130,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.364 2020/03/14 05:19:50 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.365 2020/03/14 14:05:44 ad Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -2700,7 +2700,7 @@ pmap_destroy(struct pmap *pmap) * pmap_remove_all: pmap is being torn down by the current thread. * avoid unnecessary invalidations. */ -void +bool pmap_remove_all(struct pmap *pmap) { @@ -2710,6 +2710,7 @@ pmap_remove_all(struct pmap *pmap) */ KASSERT(pmap->pm_remove_all == NULL); pmap->pm_remove_all = curlwp; + return false; } #if defined(PMAP_FORK) Index: src/sys/uvm/uvm_pmap.h diff -u src/sys/uvm/uvm_pmap.h:1.39 src/sys/uvm/uvm_pmap.h:1.40 --- src/sys/uvm/uvm_pmap.h:1.39 Sat May 19 15:03:26 2018 +++ src/sys/uvm/uvm_pmap.h Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_pmap.h,v 1.39 2018/05/19 15:03:26 jdolecek Exp $ */ +/* $NetBSD: uvm_pmap.h,v 1.40 2020/03/14 14:05:44 ad Exp $ */ /* * Copyright (c) 1991, 1993 @@ -190,7 +190,7 @@ void pmap_reference(pmap_t); #if !defined(pmap_remove) void pmap_remove(pmap_t, vaddr_t, vaddr_t); #endif -void pmap_remove_all(struct pmap *); +bool pmap_remove_all(struct pmap *); #if !defined(pmap_update) void pmap_update(pmap_t); #endif Index: src/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.47 src/sys/uvm/pmap/pmap.c:1.48 --- src/sys/uvm/pmap/pmap.c:1.47 Thu Mar 12 23:10:27 2020 +++ src/sys/uvm/pmap/pmap.c Sat Mar 14 14:05:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.47 2020/03/12 23:10:27 thorpej Exp $ */ +/* $NetBSD: pmap.c,v 1.48 2020/03/14 14:05:44 ad 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.47 2020/03/12 23:10:27 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.48 2020/03/14 14:05:44 ad Exp $"); /* * Manages physical address maps. @@ -1489,7 +1489,7 @@ pmap_kremove(vaddr_t va, vsize_t len) UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); } -void +bool pmap_remove_all(struct pmap *pmap) { UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); @@ -1524,6 +1524,7 @@ pmap_remove_all(struct pmap *pmap) kpreempt_enable(); UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); + return false; } /*