Module Name: src Committed By: skrll Date: Fri Aug 7 07:19:45 UTC 2020
Modified Files: src/sys/arch/m68k/include: pmap_coldfire.h src/sys/arch/mips/include: pmap.h src/sys/arch/powerpc/include/booke: pmap.h src/sys/arch/riscv/include: pmap.h src/sys/uvm/pmap: pmap.c pmap.h pmap_segtab.c Log Message: Provide a pmap_segtab_deactivate for symmetry with pmap_segtab_activate and use it in pmap_deactivate Call pmap_md_xtab_{,de}activate from pmap_segtab_{,de}activate to be used for PMAP_HWPAGEWALKER and any caches ops that might be required. Provide empty (for now) pmap_md_xtab_{,de}activate functions on the platforms that use sys/uvm/pmap To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/m68k/include/pmap_coldfire.h cvs rdiff -u -r1.72 -r1.73 src/sys/arch/mips/include/pmap.h cvs rdiff -u -r1.22 -r1.23 src/sys/arch/powerpc/include/booke/pmap.h cvs rdiff -u -r1.4 -r1.5 src/sys/arch/riscv/include/pmap.h cvs rdiff -u -r1.50 -r1.51 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.15 -r1.16 src/sys/uvm/pmap/pmap.h cvs rdiff -u -r1.14 -r1.15 src/sys/uvm/pmap/pmap_segtab.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/m68k/include/pmap_coldfire.h diff -u src/sys/arch/m68k/include/pmap_coldfire.h:1.2 src/sys/arch/m68k/include/pmap_coldfire.h:1.3 --- src/sys/arch/m68k/include/pmap_coldfire.h:1.2 Tue Mar 18 18:20:41 2014 +++ src/sys/arch/m68k/include/pmap_coldfire.h Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_coldfire.h,v 1.2 2014/03/18 18:20:41 riastradh Exp $ */ +/* $NetBSD: pmap_coldfire.h,v 1.3 2020/08/07 07:19:45 skrll Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. * All rights reserved. @@ -135,6 +135,20 @@ pmap_md_tlb_asid_max(void) { return PMAP_TLB_NUM_PIDS - 1; } + +static inline void +pmap_md_xtab_activate(struct pmap *pm, struct lwp *l) +{ + + /* nothing */ +} + +static inline void +pmap_md_xtab_deactivate(struct pmap *pm) +{ + + /* nothing */ +} #endif #define POOL_VTOPHYS(va) ((paddr_t)(vaddr_t)(va)) Index: src/sys/arch/mips/include/pmap.h diff -u src/sys/arch/mips/include/pmap.h:1.72 src/sys/arch/mips/include/pmap.h:1.73 --- src/sys/arch/mips/include/pmap.h:1.72 Sun Jul 26 08:08:41 2020 +++ src/sys/arch/mips/include/pmap.h Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.72 2020/07/26 08:08:41 simonb Exp $ */ +/* $NetBSD: pmap.h,v 1.73 2020/08/07 07:19:45 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -140,6 +140,21 @@ pmap_md_cache_prefer_mask(void) { return MIPS_HAS_R4K_MMU ? mips_cache_info.mci_cache_prefer_mask : 0; } + +static inline void +pmap_md_xtab_activate(struct pmap *pm, struct lwp *l) +{ + + /* nothing */ +} + +static inline void +pmap_md_xtab_deactivate(struct pmap *pm) +{ + + /* nothing */ +} + #endif /* __PMAP_PRIVATE */ struct tlbmask { Index: src/sys/arch/powerpc/include/booke/pmap.h diff -u src/sys/arch/powerpc/include/booke/pmap.h:1.22 src/sys/arch/powerpc/include/booke/pmap.h:1.23 --- src/sys/arch/powerpc/include/booke/pmap.h:1.22 Mon Jul 6 09:34:17 2020 +++ src/sys/arch/powerpc/include/booke/pmap.h Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.22 2020/07/06 09:34:17 rin Exp $ */ +/* $NetBSD: pmap.h,v 1.23 2020/08/07 07:19:45 skrll Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -154,6 +154,21 @@ pmap_md_ok_to_steal_p(const uvm_physseg_ { return true; } + +static __inline void +pmap_md_xtab_activate(struct pmap *pm, struct lwp *l) +{ + + /* nothing */ +} + +static __inline void +pmap_md_xtab_deactivate(struct pmap *pm) +{ + + /* nothing */ +} + #endif #define POOL_VTOPHYS(va) ((paddr_t)(vaddr_t)(va)) Index: src/sys/arch/riscv/include/pmap.h diff -u src/sys/arch/riscv/include/pmap.h:1.4 src/sys/arch/riscv/include/pmap.h:1.5 --- src/sys/arch/riscv/include/pmap.h:1.4 Wed Mar 11 13:30:31 2020 +++ src/sys/arch/riscv/include/pmap.h Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.4 2020/03/11 13:30:31 thorpej Exp $ */ +/* $NetBSD: pmap.h,v 1.5 2020/08/07 07:19:45 skrll Exp $ */ /* * Copyright (c) 2014, 2019 The NetBSD Foundation, Inc. @@ -163,6 +163,21 @@ pmap_md_tlb_asid_max(void) { return PMAP_TLB_NUM_PIDS - 1; } + +static inline void +pmap_md_xtab_activate(struct pmap *pm, struct lwp *l) +{ + + /* nothing */ +} + +static inline void +pmap_md_xtab_deactivate(struct pmap *pm) +{ + + /* nothing */ +} + #endif /* __PMAP_PRIVATE */ #endif /* _KERNEL */ Index: src/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.50 src/sys/uvm/pmap/pmap.c:1.51 --- src/sys/uvm/pmap/pmap.c:1.50 Sat Jul 18 16:12:09 2020 +++ src/sys/uvm/pmap/pmap.c Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.50 2020/07/18 16:12:09 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.51 2020/08/07 07:19:45 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.50 2020/07/18 16:12:09 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.51 2020/08/07 07:19:45 skrll Exp $"); /* * Manages physical address maps. @@ -869,11 +869,8 @@ pmap_deactivate(struct lwp *l) kpreempt_disable(); KASSERT(l == curlwp || l->l_cpu == curlwp->l_cpu); pmap_tlb_miss_lock_enter(); - curcpu()->ci_pmap_user_segtab = PMAP_INVALID_SEGTAB_ADDRESS; -#ifdef _LP64 - curcpu()->ci_pmap_user_seg0tab = NULL; -#endif pmap_tlb_asid_deactivate(pmap); + pmap_segtab_deactivate(pmap); pmap_tlb_miss_lock_exit(); kpreempt_enable(); Index: src/sys/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.15 src/sys/uvm/pmap/pmap.h:1.16 --- src/sys/uvm/pmap/pmap.h:1.15 Wed Jul 8 12:12:16 2020 +++ src/sys/uvm/pmap/pmap.h Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.15 2020/07/08 12:12:16 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.16 2020/08/07 07:19:45 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -114,6 +114,7 @@ pt_entry_t *pmap_pte_reserve(struct pmap void pmap_pte_process(struct pmap *, vaddr_t, vaddr_t, pte_callback_t, uintptr_t); void pmap_segtab_activate(struct pmap *, struct lwp *); +void pmap_segtab_deactivate(struct pmap *); void pmap_segtab_init(struct pmap *); void pmap_segtab_destroy(struct pmap *, pte_callback_t, uintptr_t); extern kmutex_t pmap_segtab_lock; Index: src/sys/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.14 src/sys/uvm/pmap/pmap_segtab.c:1.15 --- src/sys/uvm/pmap/pmap_segtab.c:1.14 Mon Feb 24 12:20:30 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Fri Aug 7 07:19:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.14 2020/02/24 12:20:30 rin Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.15 2020/08/07 07:19:45 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.14 2020/02/24 12:20:30 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.15 2020/08/07 07:19:45 skrll Exp $"); /* * Manages physical address maps. @@ -370,6 +370,7 @@ pmap_segtab_activate(struct pmap *pm, st { if (l == curlwp) { struct cpu_info * const ci = l->l_cpu; + pmap_md_xtab_activate(pm, l); KASSERT(pm == l->l_proc->p_vmspace->vm_map.pmap); if (pm == pmap_kernel()) { ci->ci_pmap_user_segtab = PMAP_INVALID_SEGTAB_ADDRESS; @@ -385,6 +386,20 @@ pmap_segtab_activate(struct pmap *pm, st } } + +void +pmap_segtab_deactivate(pmap_t pm) +{ + + pmap_md_xtab_deactivate(pm); + + curcpu()->ci_pmap_user_segtab = PMAP_INVALID_SEGTAB_ADDRESS; +#ifdef _LP64 + curcpu()->ci_pmap_user_seg0tab = NULL; +#endif + +} + /* * Act on the given range of addresses from the specified map. *