CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue May 4 09:05:34 UTC 2021 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Always expose pmap_tlb_update_addr now that all current PMAP_HWPAGEWALKERs (arm) users provide the required functions. To generate a diff of this commit: cvs rdiff -u -r1.43 -r1.44 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.43 src/sys/uvm/pmap/pmap_tlb.c:1.44 --- src/sys/uvm/pmap/pmap_tlb.c:1.43 Sat May 1 14:00:57 2021 +++ src/sys/uvm/pmap/pmap_tlb.c Tue May 4 09:05:34 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.43 2021/05/01 14:00:57 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.44 2021/05/04 09:05:34 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.43 2021/05/01 14:00:57 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.44 2021/05/04 09:05:34 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -733,7 +733,6 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) } #endif /* MULTIPROCESSOR && PMAP_TLB_NEED_SHOOTDOWN */ -#ifndef PMAP_HWPAGEWALKER int pmap_tlb_update_addr(pmap_t pm, vaddr_t va, pt_entry_t pte, u_int flags) { @@ -773,7 +772,6 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t return rv; } -#endif /* !PMAP_HWPAGEWALKER */ void pmap_tlb_invalidate_addr(pmap_t pm, vaddr_t va)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat May 1 14:00:57 UTC 2021 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Revert previous To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.42 src/sys/uvm/pmap/pmap_tlb.c:1.43 --- src/sys/uvm/pmap/pmap_tlb.c:1.42 Sat May 1 06:56:41 2021 +++ src/sys/uvm/pmap/pmap_tlb.c Sat May 1 14:00:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.42 2021/05/01 06:56:41 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.43 2021/05/01 14:00:57 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.42 2021/05/01 06:56:41 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.43 2021/05/01 14:00:57 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -733,6 +733,7 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) } #endif /* MULTIPROCESSOR && PMAP_TLB_NEED_SHOOTDOWN */ +#ifndef PMAP_HWPAGEWALKER int pmap_tlb_update_addr(pmap_t pm, vaddr_t va, pt_entry_t pte, u_int flags) { @@ -772,6 +773,7 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t return rv; } +#endif /* !PMAP_HWPAGEWALKER */ void pmap_tlb_invalidate_addr(pmap_t pm, vaddr_t va)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat May 1 06:56:41 UTC 2021 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Expose pmap_tlb_update_addr to the PMAP_HWPAGEWALKER platforms To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.41 src/sys/uvm/pmap/pmap_tlb.c:1.42 --- src/sys/uvm/pmap/pmap_tlb.c:1.41 Thu Sep 24 06:45:58 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Sat May 1 06:56:41 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.41 2020/09/24 06:45:58 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.42 2021/05/01 06:56:41 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.41 2020/09/24 06:45:58 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.42 2021/05/01 06:56:41 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -733,7 +733,6 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) } #endif /* MULTIPROCESSOR && PMAP_TLB_NEED_SHOOTDOWN */ -#ifndef PMAP_HWPAGEWALKER int pmap_tlb_update_addr(pmap_t pm, vaddr_t va, pt_entry_t pte, u_int flags) { @@ -773,7 +772,6 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t return rv; } -#endif /* !PMAP_HWPAGEWALKER */ void pmap_tlb_invalidate_addr(pmap_t pm, vaddr_t va)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Mar 13 15:29:13 UTC 2021 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Don't use %jx for 0 or 1 - just use %jd in UVMHIST_LOG format. To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.58 src/sys/uvm/pmap/pmap.c:1.59 --- src/sys/uvm/pmap/pmap.c:1.58 Sun Dec 20 16:38:26 2020 +++ src/sys/uvm/pmap/pmap.c Sat Mar 13 15:29:13 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.58 2020/12/20 16:38:26 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.59 2021/03/13 15:29:13 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.58 2020/12/20 16:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.59 2021/03/13 15:29:13 skrll Exp $"); /* * Manages physical address maps. @@ -950,7 +950,7 @@ pmap_update(struct pmap *pmap) pmap_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done (kernel=%jx)", + UVMHIST_LOG(pmaphist, " <-- done (kernel=%jd)", (pmap == pmap_kernel() ? 1 : 0), 0, 0, 0); } @@ -969,7 +969,7 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva const bool is_kernel_pmap_p = (pmap == pmap_kernel()); UVMHIST_FUNC(__func__); - UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx kernel=%jx va=%#jx..%#jx)", + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx kernel=%jd va=%#jx..%#jx)", (uintptr_t)pmap, (pmap == pmap_kernel() ? 1 : 0), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx)", (uintptr_t)ptep, flags, 0, 0); @@ -1113,7 +1113,7 @@ pmap_pte_protect(pmap_t pmap, vaddr_t sv const vm_prot_t prot = (flags & VM_PROT_ALL); UVMHIST_FUNC(__func__); - UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx kernel=%jx va=%#jx..%#jx)", + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx kernel=%jd va=%#jx..%#jx)", (uintptr_t)pmap, (pmap == pmap_kernel() ? 1 : 0), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx)", (uintptr_t)ptep, flags, 0, 0);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Mon Dec 21 08:41:38 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.h Log Message: Remove variable in function declaration argument To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 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/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.18 src/sys/uvm/pmap/pmap.h:1.19 --- src/sys/uvm/pmap/pmap.h:1.18 Sun Dec 20 16:38:26 2020 +++ src/sys/uvm/pmap/pmap.h Mon Dec 21 08:41:38 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.18 2020/12/20 16:38:26 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.19 2020/12/21 08:41:38 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -195,7 +195,7 @@ bool pmap_page_clear_attributes(struct v void pmap_page_set_attributes(struct vm_page_md *, u_int); void pmap_pvlist_lock_init(size_t); #ifdef PMAP_VIRTUAL_CACHE_ALIASES -void pmap_page_cache(struct vm_page_md *, bool cached); +void pmap_page_cache(struct vm_page_md *, bool); #endif #ifdef __HAVE_PMAP_PV_TRACK
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Oct 8 14:02:40 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c pmap_segtab.c Log Message: %#jx vs %jx consistency in UVMHIST_LOG To generate a diff of this commit: cvs rdiff -u -r1.56 -r1.57 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.25 -r1.26 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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.56 src/sys/uvm/pmap/pmap.c:1.57 --- src/sys/uvm/pmap/pmap.c:1.56 Thu Sep 24 06:45:58 2020 +++ src/sys/uvm/pmap/pmap.c Thu Oct 8 14:02:40 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.56 2020/09/24 06:45:58 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.57 2020/10/08 14:02:40 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.56 2020/09/24 06:45:58 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.57 2020/10/08 14:02:40 skrll Exp $"); /* * Manages physical address maps. @@ -407,13 +407,13 @@ pmap_page_syncicache(struct vm_page *pg) VM_PAGEMD_PVLIST_READLOCK(mdpg); pmap_pvlist_check(mdpg); - UVMHIST_LOG(pmaphist, "pv %jx pv_pmap %jx", (uintptr_t)pv, + UVMHIST_LOG(pmaphist, "pv %#jx pv_pmap %#jx", (uintptr_t)pv, (uintptr_t)pv->pv_pmap, 0, 0); if (pv->pv_pmap != NULL) { for (; pv != NULL; pv = pv->pv_next) { #ifdef MULTIPROCESSOR - UVMHIST_LOG(pmaphist, "pv %jx pv_pmap %jx", + UVMHIST_LOG(pmaphist, "pv %#jx pv_pmap %#jx", (uintptr_t)pv, (uintptr_t)pv->pv_pmap, 0, 0); kcpuset_merge(onproc, pv->pv_pmap->pm_onproc); if (kcpuset_match(onproc, kcpuset_running)) { @@ -779,7 +779,7 @@ pmap_page_remove(struct vm_page *pg) npv = pv->pv_next; #ifdef PMAP_VIRTUAL_CACHE_ALIASES if (PV_ISKENTER_P(pv)) { - UVMHIST_LOG(pmaphist, " pv %#jx pmap %#jx va %jx" + UVMHIST_LOG(pmaphist, " pv %#jx pmap %#jx va %#jx" " skip", (uintptr_t)pv, (uintptr_t)pv->pv_pmap, pv->pv_va, 0); @@ -815,8 +815,8 @@ pmap_page_remove(struct vm_page *pg) KASSERTMSG(ptep != NULL, "%#"PRIxVADDR " %#"PRIxVADDR, va, pmap_limits.virtual_end); pt_entry_t pte = *ptep; - UVMHIST_LOG(pmaphist, " pv %#jx pmap %#jx va %jx" - " pte %jx", (uintptr_t)pv, (uintptr_t)pmap, va, + UVMHIST_LOG(pmaphist, " pv %#jx pmap %#jx va %#jx" + " pte %#jx", (uintptr_t)pv, (uintptr_t)pmap, va, pte_value(pte)); if (!pte_valid_p(pte)) continue; @@ -918,7 +918,7 @@ pmap_update(struct pmap *pmap) pmap_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done (kernel=%#jx)", + UVMHIST_LOG(pmaphist, " <-- done (kernel=%jx)", (pmap == pmap_kernel() ? 1 : 0), 0, 0, 0); } Index: src/sys/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.25 src/sys/uvm/pmap/pmap_segtab.c:1.26 --- src/sys/uvm/pmap/pmap_segtab.c:1.25 Thu Sep 24 06:45:58 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Thu Oct 8 14:02:40 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.25 2020/09/24 06:45:58 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.26 2020/10/08 14:02:40 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.25 2020/09/24 06:45:58 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.26 2020/10/08 14:02:40 skrll Exp $"); /* * Manages physical address maps. @@ -265,7 +265,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se UVMHIST_FUNC(__func__); UVMHIST_CALLARGS(pmapsegtabhist, "pm=%#jx stpp=%#jx free=%jd", (uintptr_t)pmap, (uintptr_t)stp_p, free_stp, 0); - UVMHIST_LOG(pmapsegtabhist, " callback=%jx flags=%jx va=%jx vinc=%jx", + UVMHIST_LOG(pmapsegtabhist, " callback=%#jx flags=%jx va=%#jx vinc=%#jx", (uintptr_t)callback, flags, (uintptr_t)va, (uintptr_t)vinc); for (size_t i = (va / vinc) & (PMAP_SEGTABSIZE - 1); i < PMAP_SEGTABSIZE; @@ -574,7 +574,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va *pte_p = pte; #endif KASSERT(pte == stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]); - UVMHIST_CALLARGS(pmapsegtabhist, "pm=%#jx va=%#jx -> tab[%jd]=%jx", + UVMHIST_CALLARGS(pmapsegtabhist, "pm=%#jx va=%#jx -> tab[%jd]=%#jx", (uintptr_t)pmap, (uintptr_t)va, (va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1), (uintptr_t)pte);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Sep 24 06:45:58 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c pmap_segtab.c pmap_tlb.c Log Message: Whitespace To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.24 -r1.25 src/sys/uvm/pmap/pmap_segtab.c cvs rdiff -u -r1.40 -r1.41 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.55 src/sys/uvm/pmap/pmap.c:1.56 --- src/sys/uvm/pmap/pmap.c:1.55 Thu Aug 20 05:54:32 2020 +++ src/sys/uvm/pmap/pmap.c Thu Sep 24 06:45:58 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.55 2020/08/20 05:54:32 mrg Exp $ */ +/* $NetBSD: pmap.c,v 1.56 2020/09/24 06:45:58 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.55 2020/08/20 05:54:32 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.56 2020/09/24 06:45:58 skrll Exp $"); /* * Manages physical address maps. @@ -408,7 +408,7 @@ pmap_page_syncicache(struct vm_page *pg) pmap_pvlist_check(mdpg); UVMHIST_LOG(pmaphist, "pv %jx pv_pmap %jx", (uintptr_t)pv, - (uintptr_t)pv->pv_pmap, 0, 0); + (uintptr_t)pv->pv_pmap, 0, 0); if (pv->pv_pmap != NULL) { for (; pv != NULL; pv = pv->pv_next) { Index: src/sys/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.24 src/sys/uvm/pmap/pmap_segtab.c:1.25 --- src/sys/uvm/pmap/pmap_segtab.c:1.24 Thu Sep 10 02:12:57 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Thu Sep 24 06:45:58 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.24 2020/09/10 02:12:57 rin Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.25 2020/09/24 06:45:58 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.24 2020/09/10 02:12:57 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.25 2020/09/24 06:45:58 skrll Exp $"); /* * Manages physical address maps. @@ -192,7 +192,7 @@ pmap_check_ptes(pt_entry_t *pte, const c j, pte_value(pte[j]), 0, 0); #endif panic("%s: pte[%zu] entry at %p not 0 (%#"PRIxPTE")", - caller, i, &pte[i], pte_value(pte[i])); + caller, i, &pte[i], pte_value(pte[i])); } #endif } Index: src/sys/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.40 src/sys/uvm/pmap/pmap_tlb.c:1.41 --- src/sys/uvm/pmap/pmap_tlb.c:1.40 Sat Aug 22 14:51:44 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Thu Sep 24 06:45:58 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.40 2020/08/22 14:51:44 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.41 2020/09/24 06:45:58 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.40 2020/08/22 14:51:44 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.41 2020/09/24 06:45:58 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -757,8 +757,8 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t (flags & PMAP_TLB_INSERT) != 0); pmap_tlb_asid_check(); UVMHIST_LOG(maphist, - " %jd <-- tlb_update_addr(%#jx, %#jx, %#jx, ...)", - rv, va, pai->pai_asid, pte_value(pte)); + " %jd <-- tlb_update_addr(%#jx, %#jx, %#jx, ...)", + rv, va, pai->pai_asid, pte_value(pte)); KASSERTMSG((flags & PMAP_TLB_INSERT) == 0 || rv == 1, "pmap %p (asid %u) va %#"PRIxVADDR" pte %#"PRIxPTE" rv %d", pm, pai->pai_asid, va, pte_value(pte), rv);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: rin Date: Thu Sep 10 02:12:57 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Cast pointer arguments of UVMHIST_CALLARGS() into uintptr_t. Appease GCC9 -Wpointer-to-int-cast on ILP32 environments. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.23 src/sys/uvm/pmap/pmap_segtab.c:1.24 --- src/sys/uvm/pmap/pmap_segtab.c:1.23 Sat Aug 22 15:34:51 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Thu Sep 10 02:12:57 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.23 2020/08/22 15:34:51 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.24 2020/09/10 02:12:57 rin Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.23 2020/08/22 15:34:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.24 2020/09/10 02:12:57 rin Exp $"); /* * Manages physical address maps. @@ -246,7 +246,7 @@ pmap_segtab_free(pmap_segtab_t *stp) { UVMHIST_FUNC(__func__); - UVMHIST_CALLARGS(pmapsegtabhist, "stp=%#jx", stp, 0, 0, 0); + UVMHIST_CALLARGS(pmapsegtabhist, "stp=%#jx", (uintptr_t)stp, 0, 0, 0); mutex_spin_enter(&pmap_segtab_lock); stp->seg_seg[0] = pmap_segtab_info.free_segtab; @@ -346,7 +346,8 @@ pmap_segtab_alloc(void) stp->seg_seg[0] = NULL; SEGTAB_ADD(nget, 1); found_on_freelist = true; - UVMHIST_CALLARGS(pmapsegtabhist, "freelist stp=%#jx", stp, 0, 0, 0); + UVMHIST_CALLARGS(pmapsegtabhist, "freelist stp=%#jx", + (uintptr_t)stp, 0, 0, 0); } mutex_spin_exit(&pmap_segtab_lock); @@ -364,7 +365,8 @@ pmap_segtab_alloc(void) const paddr_t stp_pa = VM_PAGE_TO_PHYS(stp_pg); stp = (pmap_segtab_t *)PMAP_MAP_POOLPAGE(stp_pa); - UVMHIST_CALLARGS(pmapsegtabhist, "new stp=%#jx", stp, 0, 0, 0); + UVMHIST_CALLARGS(pmapsegtabhist, "new stp=%#jx", + (uintptr_t)stp, 0, 0, 0); const size_t n = NBPG / sizeof(*stp); if (n > 1) { /* @@ -574,7 +576,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va KASSERT(pte == stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]); UVMHIST_CALLARGS(pmapsegtabhist, "pm=%#jx va=%#jx -> tab[%jd]=%jx", (uintptr_t)pmap, (uintptr_t)va, - (va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1), pte); + (va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1), (uintptr_t)pte); pmap_check_ptes(pte, __func__); pte += (va >> PGSHIFT) & (NPTEPG - 1);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Aug 22 15:32:36 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Remove the #if defined(__mips_n64) && PAGE_SIZE == 8192 and make the check MI - all PTs are PAGE_SIZE aligned To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.21 src/sys/uvm/pmap/pmap_segtab.c:1.22 --- src/sys/uvm/pmap/pmap_segtab.c:1.21 Sat Aug 22 13:59:16 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Sat Aug 22 15:32:36 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.21 2020/08/22 13:59:16 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.22 2020/08/22 15:32:36 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.21 2020/08/22 13:59:16 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.22 2020/08/22 15:32:36 skrll Exp $"); /* * Manages physical address maps. @@ -171,6 +171,13 @@ pmap_check_stp(pmap_segtab_t *stp, const static void pmap_check_ptes(pt_entry_t *pte, const char *caller) { + /* + * All pte arrays should be page aligned. + */ + if (((uintptr_t)pte & PAGE_MASK) != 0) { + panic("%s: pte entry at %p not page aligned", caller, pte); + } + #ifdef DEBUG for (size_t i = 0; i < NPTEPG; i++) if (!pte_zero_p(pte[i])) { @@ -283,17 +290,6 @@ pmap_segtab_release(pmap_t pmap, pmap_se continue; pmap_check_ptes(pte, __func__); -#if defined(__mips_n64) && PAGE_SIZE == 8192 - /* - * XXX This is evil. If vinc is 100 we are in - * the last level, and this pte should be page aligned. - */ - if (vinc == 0x100 && ((uintptr_t)pte & PAGE_MASK) != 0) { - panic("%s: pte entry at %p not page aligned", - __func__, pte); - } -#endif - /* * If our caller wants a callback, do so. */
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Aug 22 14:51:44 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Whitespace - line continutation alignment To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.39 src/sys/uvm/pmap/pmap_tlb.c:1.40 --- src/sys/uvm/pmap/pmap_tlb.c:1.39 Wed Aug 19 06:11:49 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Sat Aug 22 14:51:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.39 2020/08/19 06:11:49 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.40 2020/08/22 14:51:44 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.39 2020/08/19 06:11:49 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.40 2020/08/22 14:51:44 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -629,7 +629,7 @@ pmap_tlb_shootdown_process(void) (nobody) << 3 * TLBINV_NOBODY) \ | ( (one) << 3 * TLBINV_ONE) \ | ( (alluser) << 3 * TLBINV_ALLUSER) \ - | ((allkernel) << 3 * TLBINV_ALLKERNEL) \ + | ((allkernel) << 3 * TLBINV_ALLKERNEL) \ | ( (all) << 3 * TLBINV_ALL)) >> 3 * (op)) & 7) #define TLBINV_USER_MAP(op) \
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Aug 22 13:59:16 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.20 src/sys/uvm/pmap/pmap_segtab.c:1.21 --- src/sys/uvm/pmap/pmap_segtab.c:1.20 Thu Aug 20 23:36:45 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Sat Aug 22 13:59:16 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.20 2020/08/20 23:36:45 mrg Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.21 2020/08/22 13:59:16 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.20 2020/08/20 23:36:45 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.21 2020/08/22 13:59:16 skrll Exp $"); /* * Manages physical address maps. @@ -132,7 +132,7 @@ struct pmap_segtab_info { kmutex_t pmap_segtab_lock __cacheline_aligned; /* - * Check that a seg_tab[] array is empty. + * Check that a seg_tab[] array is empty. * * This is used when allocating or freeing a pmap_segtab_t. The stp * should be unused -- meaning, none of the seg_tab[] pointers are @@ -182,7 +182,7 @@ pmap_check_ptes(pt_entry_t *pte, const c if (!pte_zero_p(pte[j])) UVMHIST_LOG(pmapsegtabhist, "pte[%zu] = %#"PRIxPTE, - j, pte_value(pte[j]), 0, 0); + j, pte_value(pte[j]), 0, 0); #endif panic("%s: pte[%zu] entry at %p not 0 (%#"PRIxPTE")", caller, i, &pte[i], pte_value(pte[i])); @@ -281,7 +281,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se pt_entry_t *pte = stp->seg_tab[i]; if (pte == NULL) continue; - pmap_check_ptes(pte, __func__); + pmap_check_ptes(pte, __func__); #if defined(__mips_n64) && PAGE_SIZE == 8192 /*
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Thu Aug 20 23:36:45 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: fix hpcmips and evbppc builds (wrong type in panic()). To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.19 src/sys/uvm/pmap/pmap_segtab.c:1.20 --- src/sys/uvm/pmap/pmap_segtab.c:1.19 Thu Aug 20 05:54:32 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Thu Aug 20 23:36:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.19 2020/08/20 05:54:32 mrg Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.20 2020/08/20 23:36:45 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.19 2020/08/20 05:54:32 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.20 2020/08/20 23:36:45 mrg Exp $"); /* * Manages physical address maps. @@ -184,7 +184,7 @@ pmap_check_ptes(pt_entry_t *pte, const c "pte[%zu] = %#"PRIxPTE, j, pte_value(pte[j]), 0, 0); #endif - panic("%s: pte[%ju] entry at %pu not 0 (%#"PRIxPTE")", + panic("%s: pte[%zu] entry at %p not 0 (%#"PRIxPTE")", caller, i, &pte[i], pte_value(pte[i])); } #endif
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Thu Aug 20 05:54:32 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c pmap.h pmap_segtab.c Log Message: move pmap segtab history into a new history of only 1000 entries, but will overflow much slower than the main pmap history. move various debug info into kernhist. make pte array checker into an array and use it in pmap_segtab_release() and pmap_pte_reserve(). move check before MD callback(), incase it wants to change ptes for some reason (they're passed in, but this callback is currently always NULL.) clean up some history logs to reduce the number of lines required. To generate a diff of this commit: cvs rdiff -u -r1.54 -r1.55 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.16 -r1.17 src/sys/uvm/pmap/pmap.h cvs rdiff -u -r1.18 -r1.19 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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.54 src/sys/uvm/pmap/pmap.c:1.55 --- src/sys/uvm/pmap/pmap.c:1.54 Wed Aug 19 07:29:01 2020 +++ src/sys/uvm/pmap/pmap.c Thu Aug 20 05:54:32 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.54 2020/08/19 07:29:01 simonb Exp $ */ +/* $NetBSD: pmap.c,v 1.55 2020/08/20 05:54:32 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.54 2020/08/19 07:29:01 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.55 2020/08/20 05:54:32 mrg Exp $"); /* * Manages physical address maps. @@ -217,8 +217,10 @@ struct pmap_limits pmap_limits = { /* VA #ifdef UVMHIST static struct kern_history_ent pmapexechistbuf[1]; static struct kern_history_ent pmaphistbuf[1]; +static struct kern_history_ent pmapsegtabhistbuf[1000]; UVMHIST_DEFINE(pmapexechist); UVMHIST_DEFINE(pmaphist); +UVMHIST_DEFINE(pmapsegtabhist); #endif /* @@ -587,6 +589,7 @@ pmap_init(void) { UVMHIST_INIT_STATIC(pmapexechist, pmapexechistbuf); UVMHIST_INIT_STATIC(pmaphist, pmaphistbuf); + UVMHIST_INIT_STATIC(pmapsegtabhist, pmapsegtabhistbuf); UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); Index: src/sys/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.16 src/sys/uvm/pmap/pmap.h:1.17 --- src/sys/uvm/pmap/pmap.h:1.16 Fri Aug 7 07:19:45 2020 +++ src/sys/uvm/pmap/pmap.h Thu Aug 20 05:54:32 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.16 2020/08/07 07:19:45 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.17 2020/08/20 05:54:32 mrg Exp $ */ /* * Copyright (c) 1992, 1993 @@ -78,6 +78,7 @@ #ifdef UVMHIST UVMHIST_DECL(pmapexechist); UVMHIST_DECL(pmaphist); +UVMHIST_DECL(pmapsegtabhist); #endif /* Index: src/sys/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.18 src/sys/uvm/pmap/pmap_segtab.c:1.19 --- src/sys/uvm/pmap/pmap_segtab.c:1.18 Tue Aug 18 11:48:21 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Thu Aug 20 05:54:32 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.18 2020/08/18 11:48:21 simonb Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.19 2020/08/20 05:54:32 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.18 2020/08/18 11:48:21 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.19 2020/08/20 05:54:32 mrg Exp $"); /* * Manages physical address maps. @@ -131,16 +131,32 @@ struct pmap_segtab_info { kmutex_t pmap_segtab_lock __cacheline_aligned; +/* + * Check that a seg_tab[] array is empty. + * + * This is used when allocating or freeing a pmap_segtab_t. The stp + * should be unused -- meaning, none of the seg_tab[] pointers are + * not NULL, as it transitions from either freshly allocated segtab from + * pmap pool, an unused allocated page segtab alloc from the SMP case, + * where two CPUs attempt to allocate the same underlying segtab, the + * release of a segtab entry to the freelist, or for SMP, where reserve + * also frees a freshly allocated but unused entry. + */ static void pmap_check_stp(pmap_segtab_t *stp, const char *caller, const char *why) { #ifdef DEBUG for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) { - if (stp->seg_tab[i] != 0) { + if (stp->seg_tab[i] != NULL) { +#define DEBUG_NOISY #ifdef DEBUG_NOISY + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmapsegtabhist, "stp=%#jx", + (uintptr_t)stp, 0, 0, 0); for (size_t j = i; j < PMAP_SEGTABSIZE; j++) -printf("%s: pm_segtab.seg_tab[%zu] = %p\n", -caller, j, stp->seg_tab[j]); +if (stp->seg_tab[j] != NULL) + printf("%s: stp->seg_tab[%zu] = %p\n", + caller, j, stp->seg_tab[j]); #endif panic("%s: pm_segtab.seg_tab[%zu] != 0 (%p): %s", caller, i, stp->seg_tab[i], why); @@ -149,6 +165,31 @@ pmap_check_stp(pmap_segtab_t *stp, const #endif } +/* + * Check that an array of ptes is actually zero. + */ +static void +pmap_check_ptes(pt_entry_t *pte, const char *caller)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Aug 19 06:11:49 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c pmap_tlb.h Log Message: KNF. Add some whitespace to the TLBINV_MAP macro and tlb_invalidate_op enum. To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 src/sys/uvm/pmap/pmap_tlb.c cvs rdiff -u -r1.14 -r1.15 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.38 src/sys/uvm/pmap/pmap_tlb.c:1.39 --- src/sys/uvm/pmap/pmap_tlb.c:1.38 Wed Aug 19 06:08:27 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Wed Aug 19 06:11:49 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.38 2020/08/19 06:08:27 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.39 2020/08/19 06:11:49 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.38 2020/08/19 06:08:27 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.39 2020/08/19 06:11:49 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -626,11 +626,11 @@ pmap_tlb_shootdown_process(void) * can be loaded in a single instruction. */ #define TLBINV_MAP(op, nobody, one, alluser, allkernel, all) \ - (nobody) << 3*TLBINV_NOBODY) \ - | ( (one) << 3*TLBINV_ONE) \ - | ( (alluser) << 3*TLBINV_ALLUSER) \ - | ((allkernel) << 3*TLBINV_ALLKERNEL) \ - | ( (all) << 3*TLBINV_ALL)) >> 3*(op)) & 7) + (nobody) << 3 * TLBINV_NOBODY) \ + | ( (one) << 3 * TLBINV_ONE) \ + | ( (alluser) << 3 * TLBINV_ALLUSER) \ + | ((allkernel) << 3 * TLBINV_ALLKERNEL) \ + | ( (all) << 3 * TLBINV_ALL)) >> 3 * (op)) & 7) #define TLBINV_USER_MAP(op) \ TLBINV_MAP(op, TLBINV_ONE, TLBINV_ALLUSER, TLBINV_ALLUSER, \ Index: src/sys/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.14 src/sys/uvm/pmap/pmap_tlb.h:1.15 --- src/sys/uvm/pmap/pmap_tlb.h:1.14 Sat Aug 1 07:14:05 2020 +++ src/sys/uvm/pmap/pmap_tlb.h Wed Aug 19 06:11:49 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.14 2020/08/01 07:14:05 skrll Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.15 2020/08/19 06:11:49 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -104,11 +104,11 @@ struct pmap_asid_info { - offsetof(struct pmap, pm_pai[tlbinfo_index(ti)]))) enum tlb_invalidate_op { - TLBINV_NOBODY=0, - TLBINV_ONE=1, - TLBINV_ALLUSER=2, - TLBINV_ALLKERNEL=3, - TLBINV_ALL=4 + TLBINV_NOBODY = 0, + TLBINV_ONE = 1, + TLBINV_ALLUSER = 2, + TLBINV_ALLKERNEL = 3, + TLBINV_ALL = 4 }; struct pmap_tlb_info {
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Aug 19 06:08:27 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Unwrap short line KASSERT To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.37 src/sys/uvm/pmap/pmap_tlb.c:1.38 --- src/sys/uvm/pmap/pmap_tlb.c:1.37 Wed Aug 19 06:07:03 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Wed Aug 19 06:08:27 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.37 2020/08/19 06:07:03 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.38 2020/08/19 06:08:27 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.37 2020/08/19 06:07:03 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.38 2020/08/19 06:08:27 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -551,8 +551,7 @@ pmap_tlb_shootdown_process(void) #endif KASSERT(cpu_intr_p()); - KASSERTMSG(ci->ci_cpl >= IPL_SCHED, - "%s: cpl (%d) < IPL_SCHED (%d)", + KASSERTMSG(ci->ci_cpl >= IPL_SCHED, "%s: cpl (%d) < IPL_SCHED (%d)", __func__, ci->ci_cpl, IPL_SCHED); TLBINFO_LOCK(ti);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Aug 19 06:07:03 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Fix inverted logic test in pmap_tlb_shootdown_process for if the victim is onproc. To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.36 src/sys/uvm/pmap/pmap_tlb.c:1.37 --- src/sys/uvm/pmap/pmap_tlb.c:1.36 Tue Aug 11 06:54:14 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Wed Aug 19 06:07:03 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.36 2020/08/11 06:54:14 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.37 2020/08/19 06:07:03 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.36 2020/08/11 06:54:14 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.37 2020/08/19 06:07:03 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -564,7 +564,7 @@ pmap_tlb_shootdown_process(void) */ struct pmap_asid_info * const pai = PMAP_PAI(ti->ti_victim, ti); KASSERT(ti->ti_victim != pmap_kernel()); - if (!pmap_tlb_intersecting_onproc_p(ti->ti_victim, ti)) { + if (pmap_tlb_intersecting_onproc_p(ti->ti_victim, ti)) { /* * The victim is an active pmap so we will just * invalidate its TLB entries.
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: simonb Date: Tue Aug 18 11:48:21 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Fix small tyop in a comment. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.17 src/sys/uvm/pmap/pmap_segtab.c:1.18 --- src/sys/uvm/pmap/pmap_segtab.c:1.17 Tue Aug 18 07:25:46 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Tue Aug 18 11:48:21 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.17 2020/08/18 07:25:46 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.18 2020/08/18 11:48:21 simonb Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.17 2020/08/18 07:25:46 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.18 2020/08/18 11:48:21 simonb Exp $"); /* * Manages physical address maps. @@ -237,7 +237,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se continue; /* - * If our caller want a callback, do so. + * If our caller wants a callback, do so. */ if (callback != NULL) { (*callback)(pmap, va, va + vinc, pte, flags);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Aug 18 07:25:46 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Improve a panic message ever so slightly To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.16 src/sys/uvm/pmap/pmap_segtab.c:1.17 --- src/sys/uvm/pmap/pmap_segtab.c:1.16 Mon Aug 17 08:56:27 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Tue Aug 18 07:25:46 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.16 2020/08/17 08:56:27 mrg Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.17 2020/08/18 07:25:46 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.16 2020/08/17 08:56:27 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.17 2020/08/18 07:25:46 skrll Exp $"); /* * Manages physical address maps. @@ -245,7 +245,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se #ifdef DEBUG for (size_t j = 0; j < NPTEPG; j++) { if (!pte_zero_p(pte[j])) -panic("%s: pte entry %p not 0 (%#"PRIxPTE")", +panic("%s: pte entry at %p not 0 (%#"PRIxPTE")", __func__, &pte[j], pte_value(pte[j])); } #endif
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Mon Aug 17 08:56:27 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: add pmaphist calls around seg_tab[] manipulation. hopefully will help find what causes this: panic: pmap_segtab_alloc: pm_segtab.seg_tab[1010] != 0 (0x98004eeb6068): from free list To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.15 src/sys/uvm/pmap/pmap_segtab.c:1.16 --- src/sys/uvm/pmap/pmap_segtab.c:1.15 Fri Aug 7 07:19:45 2020 +++ src/sys/uvm/pmap/pmap_segtab.c Mon Aug 17 08:56:27 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.15 2020/08/07 07:19:45 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.16 2020/08/17 08:56:27 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.15 2020/08/07 07:19:45 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.16 2020/08/17 08:56:27 mrg Exp $"); /* * Manages physical address maps. @@ -210,12 +210,18 @@ pmap_segtab_release(pmap_t pmap, pmap_se { pmap_segtab_t *stp = *stp_p; + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "pm=%#jx stpp=%#jx free=%jd", + (uintptr_t)pmap, (uintptr_t)stp_p, free_stp, 0); + UVMHIST_LOG(pmaphist, " callback=%jx flags=%jx va=%jx vinc=%jx", + (uintptr_t)callback, flags, (uintptr_t)va, (uintptr_t)vinc); for (size_t i = (va / vinc) & (PMAP_SEGTABSIZE - 1); i < PMAP_SEGTABSIZE; i++, va += vinc) { #ifdef _LP64 if (vinc > NBSEG) { if (stp->seg_seg[i] != NULL) { +UVMHIST_LOG(pmaphist, " recursing", 0, 0, 0, 0); pmap_segtab_release(pmap, &stp->seg_seg[i], true, callback, flags, va, vinc / NSEGPG); KASSERT(stp->seg_seg[i] == NULL); @@ -255,6 +261,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se #endif stp->seg_tab[i] = NULL; + UVMHIST_LOG(pmaphist, " zeroing tab[%jd]", i, 0, 0, 0); } if (free_stp) { @@ -448,6 +455,10 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va pmap_segtab_t *stp = pmap->pm_segtab; pt_entry_t *pte; + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "pm=%#jx va=%#jx flags=%jx", + (uintptr_t)pmap, (uintptr_t)va, flags, 0); + pte = pmap_pte_lookup(pmap, va); if (__predict_false(pte == NULL)) { #ifdef _LP64 @@ -513,6 +524,8 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va *pte_p = pte; #endif KASSERT(pte == stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]); + UVMHIST_LOG(pmaphist, " set tab[%jd]=%jx", + (va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1), pte, 0, 0); #ifdef DEBUG for (size_t i = 0; i < NPTEPG; i++) {
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Aug 11 06:54:14 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: s/pmaphist/maphist/ for now To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.35 src/sys/uvm/pmap/pmap_tlb.c:1.36 --- src/sys/uvm/pmap/pmap_tlb.c:1.35 Tue Aug 11 06:09:44 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Tue Aug 11 06:54:14 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.35 2020/08/11 06:09:44 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.36 2020/08/11 06:54:14 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.35 2020/08/11 06:09:44 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.36 2020/08/11 06:54:14 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -215,7 +215,7 @@ static void pmap_tlb_pai_check(struct pmap_tlb_info *ti, bool locked_p) { UVMHIST_FUNC(__func__); - UVMHIST_CALLARGS(pmaphist, "(ti=%#jx)", (uintptr_t)ti, 0, 0, 0); + UVMHIST_CALLARGS(maphist, "(ti=%#jx)", (uintptr_t)ti, 0, 0, 0); #ifdef DIAGNOSTIC struct pmap_asid_info *pai; @@ -236,7 +236,7 @@ pmap_tlb_pai_check(struct pmap_tlb_info if (!locked_p) TLBINFO_UNLOCK(ti); #endif - UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); + UVMHIST_LOG(maphist, " <-- done", 0, 0, 0, 0); } static void
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Aug 11 06:09:44 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c pmap_tlb.c Log Message: More UVMHIST_LOG. Remove some commented output printfs. To generate a diff of this commit: cvs rdiff -u -r1.52 -r1.53 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.34 -r1.35 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.52 src/sys/uvm/pmap/pmap.c:1.53 --- src/sys/uvm/pmap/pmap.c:1.52 Tue Aug 11 05:43:45 2020 +++ src/sys/uvm/pmap/pmap.c Tue Aug 11 06:09:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.52 2020/08/11 05:43:45 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.53 2020/08/11 06:09:44 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.52 2020/08/11 05:43:45 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.53 2020/08/11 06:09:44 skrll Exp $"); /* * Manages physical address maps. @@ -388,6 +388,8 @@ pmap_page_set_attributes(struct vm_page_ static void pmap_page_syncicache(struct vm_page *pg) { + UVMHIST_FUNC(__func__); + UVMHIST_CALLED(pmaphist); #ifndef MULTIPROCESSOR struct pmap * const curpmap = curlwp->l_proc->p_vmspace->vm_map.pmap; #endif @@ -403,9 +405,14 @@ pmap_page_syncicache(struct vm_page *pg) VM_PAGEMD_PVLIST_READLOCK(mdpg); pmap_pvlist_check(mdpg); + UVMHIST_LOG(pmaphist, "pv %jx pv_pmap %jx\n", (uintptr_t)pv, + (uintptr_t)pv->pv_pmap, 0, 0); + if (pv->pv_pmap != NULL) { for (; pv != NULL; pv = pv->pv_next) { #ifdef MULTIPROCESSOR + UVMHIST_LOG(pmaphist, "pv %jx pv_pmap %jx\n", + (uintptr_t)pv, (uintptr_t)pv->pv_pmap, 0, 0); kcpuset_merge(onproc, pv->pv_pmap->pm_onproc); if (kcpuset_match(onproc, kcpuset_running)) { break; Index: src/sys/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.34 src/sys/uvm/pmap/pmap_tlb.c:1.35 --- src/sys/uvm/pmap/pmap_tlb.c:1.34 Sun Aug 9 06:26:49 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Tue Aug 11 06:09:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.34 2020/08/09 06:26:49 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.35 2020/08/11 06:09:44 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.34 2020/08/09 06:26:49 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.35 2020/08/11 06:09:44 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -214,6 +214,9 @@ pmap_tlb_intersecting_onproc_p(pmap_t pm static void pmap_tlb_pai_check(struct pmap_tlb_info *ti, bool locked_p) { + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(ti=%#jx)", (uintptr_t)ti, 0, 0, 0); + #ifdef DIAGNOSTIC struct pmap_asid_info *pai; if (!locked_p) @@ -233,6 +236,7 @@ pmap_tlb_pai_check(struct pmap_tlb_info if (!locked_p) TLBINFO_UNLOCK(ti); #endif + UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); } static void @@ -268,9 +272,13 @@ pmap_tlb_pai_reset(struct pmap_tlb_info */ if (PMAP_TLB_FLUSH_ASID_ON_RESET) { #ifndef MULTIPROCESSOR + UVMHIST_LOG(maphist, " ... asid %u flushed", pai->pai_asid, 0, + 0, 0); tlb_invalidate_asids(pai->pai_asid, pai->pai_asid); #endif if (TLBINFO_ASID_INUSE_P(ti, pai->pai_asid)) { + UVMHIST_LOG(maphist, " ... asid marked unused", + pai->pai_asid, 0, 0, 0); TLBINFO_ASID_MARK_UNUSED(ti, pai->pai_asid); ti->ti_asids_free++; } @@ -363,13 +371,13 @@ pmap_tlb_info_init(struct pmap_tlb_info #endif /* MULTIPROCESSOR */ KASSERT(ti == &pmap_tlb0_info); KASSERT(ti->ti_lock == &pmap_tlb0_lock); - //printf("ti_lock %p ", ti->ti_lock); + mutex_init(ti->ti_lock, MUTEX_DEFAULT, IPL_SCHED); #if defined(MULTIPROCESSOR) && PMAP_TLB_MAX > 1 kcpuset_create(&ti->ti_kcpuset, true); kcpuset_set(ti->ti_kcpuset, cpu_index(curcpu())); #endif - //printf("asid "); + if (ti->ti_asid_max == 0) { ti->ti_asid_max = pmap_md_tlb_asid_max(); ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti->ti_asid_max); @@ -991,12 +999,13 @@ pmap_tlb_asid_deactivate(pmap_t pm) } #endif curcpu()->ci_pmap_asid_cur = KERNEL_PID; - UVMHIST_LOG(maphist, " <-- done (pm=%#jx)", (uintptr_t)pm, 0, 0, 0); tlb_set_asid(KERNEL_PID); + pmap_tlb_pai_check(cpu_tlb_info(curcpu()), false); #if defined(DEBUG) pmap_tlb_asid_check(); #endif + UVMHIST_LOG(maphist, " <-- done (pm=%#jx)", (uintptr_t)pm, 0, 0, 0); } void
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Aug 11 05:43:45 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Fix a comment To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.52 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.51 src/sys/uvm/pmap/pmap.c:1.52 --- src/sys/uvm/pmap/pmap.c:1.51 Fri Aug 7 07:19:45 2020 +++ src/sys/uvm/pmap/pmap.c Tue Aug 11 05:43:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.51 2020/08/07 07:19:45 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.52 2020/08/11 05:43:45 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.51 2020/08/07 07:19:45 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.52 2020/08/11 05:43:45 skrll Exp $"); /* * Manages physical address maps. @@ -1309,8 +1309,6 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd /* * Now validate mapping with desired protection/wiring. - * Assume uniform modified and referenced status for all - * MIPS pages in a MACH page. */ if (wired) { pmap->pm_stats.wired_count++;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Aug 1 07:14:05 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.h Log Message: Provide a TLBINFO_OWNED To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.13 src/sys/uvm/pmap/pmap_tlb.h:1.14 --- src/sys/uvm/pmap/pmap_tlb.h:1.13 Mon Feb 19 22:01:15 2018 +++ src/sys/uvm/pmap/pmap_tlb.h Sat Aug 1 07:14:05 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.13 2018/02/19 22:01:15 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.14 2020/08/01 07:14:05 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -96,6 +96,7 @@ struct pmap_asid_info { #define TLBINFO_LOCK(ti) mutex_spin_enter((ti)->ti_lock) #define TLBINFO_UNLOCK(ti) mutex_spin_exit((ti)->ti_lock) +#define TLBINFO_OWNED(ti) mutex_owned((ti)->ti_lock) #define PMAP_PAI_ASIDVALID_P(pai, ti) ((pai)->pai_asid != 0) #define PMAP_PAI(pmap, ti) (&(pmap)->pm_pai[tlbinfo_index(ti)]) #define PAI_PMAP(pai, ti) \
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Jul 18 16:12:09 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Always call pmap_segtab_activate in pmap_activate. pmap_segtab_activate does the right thing if called with non-curlwp. To generate a diff of this commit: cvs rdiff -u -r1.49 -r1.50 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.49 src/sys/uvm/pmap/pmap.c:1.50 --- src/sys/uvm/pmap/pmap.c:1.49 Sun Apr 12 15:36:18 2020 +++ src/sys/uvm/pmap/pmap.c Sat Jul 18 16:12:09 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.49 2020/04/12 15:36:18 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.50 2020/07/18 16:12:09 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.49 2020/04/12 15:36:18 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.50 2020/07/18 16:12:09 skrll Exp $"); /* * Manages physical address maps. @@ -723,9 +723,7 @@ pmap_activate(struct lwp *l) kpreempt_disable(); pmap_tlb_miss_lock_enter(); pmap_tlb_asid_acquire(pmap, l); - if (l == curlwp) { - pmap_segtab_activate(pmap, l); - } + pmap_segtab_activate(pmap, l); pmap_tlb_miss_lock_exit(); kpreempt_enable();
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Jul 8 12:12:16 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.h Log Message: Comment updates To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 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/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.14 src/sys/uvm/pmap/pmap.h:1.15 --- src/sys/uvm/pmap/pmap.h:1.14 Sun Mar 15 11:36:24 2020 +++ src/sys/uvm/pmap/pmap.h Wed Jul 8 12:12:16 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.14 2020/03/15 11:36:24 rin Exp $ */ +/* $NetBSD: pmap.h,v 1.15 2020/07/08 12:12:16 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -103,6 +103,11 @@ typedef union pmap_segtab { struct pmap; typedef bool (*pte_callback_t)(struct pmap *, vaddr_t, vaddr_t, pt_entry_t *, uintptr_t); + +/* + * Common part of the bootstraping the system enough to run with + * virtual memory. + */ void pmap_bootstrap_common(void); pt_entry_t *pmap_pte_lookup(struct pmap *, vaddr_t); pt_entry_t *pmap_pte_reserve(struct pmap *, vaddr_t, int); @@ -182,9 +187,6 @@ extern pmap_segtab_t pmap_kern_segtab; #define pmap_wired_count(pmap) ((pmap)->pm_stats.wired_count) #define pmap_resident_count(pmap) ((pmap)->pm_stats.resident_count) -/* - * Bootstrap the system enough to run with virtual memory. - */ bool pmap_remove_all(pmap_t); void pmap_set_modified(paddr_t); bool pmap_page_clear_attributes(struct vm_page_md *, u_int);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Apr 14 05:43:57 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Fix UVMHIST bulid To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.32 src/sys/uvm/pmap/pmap_tlb.c:1.33 --- src/sys/uvm/pmap/pmap_tlb.c:1.32 Sun Apr 12 15:36:18 2020 +++ src/sys/uvm/pmap/pmap_tlb.c Tue Apr 14 05:43:57 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.32 2020/04/12 15:36:18 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.33 2020/04/14 05:43:57 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.32 2020/04/12 15:36:18 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.33 2020/04/14 05:43:57 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -241,7 +241,7 @@ pmap_tlb_pai_reset(struct pmap_tlb_info { UVMHIST_FUNC(__func__); UVMHIST_CALLARGS(maphist, "(ti=%#jx, pai=%#jx, pm=%#jx): asid %u", - ti, (uintptr_t)pai, (uintptr_t)pm, pai->pai_asid); + (uintptr_t)ti, (uintptr_t)pai, (uintptr_t)pm, pai->pai_asid); /* * We must have an ASID but it must not be onproc (on a processor).
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Mon Apr 13 08:05:22 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_synci.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/uvm/pmap/pmap_synci.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/uvm/pmap/pmap_synci.c diff -u src/sys/uvm/pmap/pmap_synci.c:1.4 src/sys/uvm/pmap/pmap_synci.c:1.5 --- src/sys/uvm/pmap/pmap_synci.c:1.4 Wed Dec 18 11:27:56 2019 +++ src/sys/uvm/pmap/pmap_synci.c Mon Apr 13 08:05:22 2020 @@ -29,7 +29,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_synci.c,v 1.4 2019/12/18 11:27:56 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_synci.c,v 1.5 2020/04/13 08:05:22 skrll Exp $"); #define __PMAP_PRIVATE @@ -41,7 +41,7 @@ __KERNEL_RCSID(0, "$NetBSD: pmap_synci.c #include #include #include - + #include #if defined(MULTIPROCESSOR)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sun Apr 12 15:36:18 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c pmap_tlb.c Log Message: Use UVMHIST_CALLARGS To generate a diff of this commit: cvs rdiff -u -r1.48 -r1.49 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.31 -r1.32 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.48 src/sys/uvm/pmap/pmap.c:1.49 --- src/sys/uvm/pmap/pmap.c:1.48 Sat Mar 14 14:05:44 2020 +++ src/sys/uvm/pmap/pmap.c Sun Apr 12 15:36:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.48 2020/03/14 14:05:44 ad Exp $ */ +/* $NetBSD: pmap.c,v 1.49 2020/04/12 15:36:18 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.48 2020/03/14 14:05:44 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.49 2020/04/12 15:36:18 skrll Exp $"); /* * Manages physical address maps. @@ -581,7 +581,8 @@ pmap_init(void) UVMHIST_INIT_STATIC(pmapexechist, pmapexechistbuf); UVMHIST_INIT_STATIC(pmaphist, pmaphistbuf); - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); + UVMHIST_FUNC(__func__); + UVMHIST_CALLED(pmaphist); /* * Initialize the segtab lock. @@ -623,7 +624,8 @@ pmap_init(void) pmap_t pmap_create(void) { - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); + UVMHIST_FUNC(__func__); + UVMHIST_CALLED(pmaphist); PMAP_COUNT(create); pmap_t pmap = pool_get(&pmap_pmap_pool, PR_WAITOK); @@ -658,8 +660,8 @@ pmap_create(void) void pmap_destroy(pmap_t pmap) { - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%#jx)", (uintptr_t)pmap, 0, 0, 0); + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx)", (uintptr_t)pmap, 0, 0, 0); if (atomic_dec_uint_nv(&pmap->pm_count) > 0) { PMAP_COUNT(dereference); @@ -694,8 +696,8 @@ pmap_destroy(pmap_t pmap) void pmap_reference(pmap_t pmap) { - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%#jx)", (uintptr_t)pmap, 0, 0, 0); + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx)", (uintptr_t)pmap, 0, 0, 0); PMAP_COUNT(reference); if (pmap != NULL) { @@ -713,8 +715,8 @@ pmap_activate(struct lwp *l) { pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap; - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(l=%#jx pmap=%#jx)", (uintptr_t)l, + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(l=%#jx pmap=%#jx)", (uintptr_t)l, (uintptr_t)pmap, 0, 0); PMAP_COUNT(activate); @@ -744,9 +746,8 @@ pmap_page_remove(struct vm_page *pg) VM_PAGEMD_PVLIST_LOCK(mdpg); pmap_pvlist_check(mdpg); - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - - UVMHIST_LOG(pmapexechist, "pg %#jx (pa %#jx) [page removed]: " + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmapexechist, "pg %#jx (pa %#jx) [page removed]: " "execpage cleared", (uintptr_t)pg, VM_PAGE_TO_PHYS(pg), 0, 0); #ifdef PMAP_VIRTUAL_CACHE_ALIASES pmap_page_clear_attributes(mdpg, VM_PAGEMD_EXECPAGE|VM_PAGEMD_UNCACHED); @@ -862,8 +863,8 @@ pmap_deactivate(struct lwp *l) { pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap; - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(l=%#jx pmap=%#jx)", (uintptr_t)l, + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(l=%#jx pmap=%#jx)", (uintptr_t)l, (uintptr_t)pmap, 0, 0); PMAP_COUNT(deactivate); @@ -885,8 +886,8 @@ pmap_deactivate(struct lwp *l) void pmap_update(struct pmap *pmap) { - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%#jx)", (uintptr_t)pmap, 0, 0, 0); + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx)", (uintptr_t)pmap, 0, 0, 0); PMAP_COUNT(update); kpreempt_disable(); @@ -930,10 +931,10 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva const pt_entry_t npte = flags; const bool is_kernel_pmap_p = (pmap == pmap_kernel()); - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%#jx kernel=%c va=%#jx..%#jx)", - (uintptr_t)pmap, (is_kernel_pmap_p ? 1 : 0), sva, eva); - UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx", + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx kernel=%jx va=%#jx..%#jx)", + (uintptr_t)pmap, (pmap == pmap_kernel() ? 1 : 0), sva, eva); + UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx)", (uintptr_t)ptep, flags, 0, 0); KASSERT(kpreempt_disabled()); @@ -977,8 +978,8 @@ pmap_remove(pmap_t pmap, vaddr_t sva, va const bool is_kernel_pmap_p = (pmap == pmap_kernel()); const pt_entry_t npte = pte_nv_entry(is_kernel_pmap_p); - UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%#jx, va=%#jx..%#jx)", + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(pmaphist, "(pmap=%#jx, va=%#jx..%#jx)", (uintptr_t
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Apr 9 08:55:45 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Make a comment less MIPS specific To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.30 src/sys/uvm/pmap/pmap_tlb.c:1.31 --- src/sys/uvm/pmap/pmap_tlb.c:1.30 Wed Dec 18 11:27:56 2019 +++ src/sys/uvm/pmap/pmap_tlb.c Thu Apr 9 08:55:45 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.30 2019/12/18 11:27:56 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.31 2020/04/09 08:55:45 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.30 2019/12/18 11:27:56 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.31 2020/04/09 08:55:45 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -69,13 +69,14 @@ __KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v * * Each pmap has two bitmaps: pm_active and pm_onproc. Each bit in pm_active * indicates whether that pmap has an allocated ASID for a CPU. Each bit in - * pm_onproc indicates that pmap's ASID is active (equal to the ASID in COP 0 - * register EntryHi) on a CPU. The bit number comes from the CPU's cpu_index(). - * Even though these bitmaps contain the bits for all CPUs, the bits that - * correspond to the bits belonging to the CPUs sharing a TLB can only be - * manipulated while holding that TLB's lock. Atomic ops must be used to - * update them since multiple CPUs may be changing different sets of bits at - * same time but these sets never overlap. + * pm_onproc indicates that the pmap's ASID is in use, i.e. a CPU has it in its + * "current ASID" field, e.g. the ASID field of the COP 0 register EntryHi for + * MIPS, or the ASID field of TTBR0 for AA64. The bit number used in these + * bitmaps comes from the CPU's cpu_index(). Even though these bitmaps contain + * the bits for all CPUs, the bits that correspond to the bits belonging to + * the CPUs sharing a TLB can only be manipulated while holding that TLB's + * lock. Atomic ops must be used to update them since multiple CPUs may be + * changing different sets of bits at same time but these sets never overlap. * * When a change to the local TLB may require a change in the TLB's of other * CPUs, we try to avoid sending an IPI if at all possible. For instance, if
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: ad Date: Mon Mar 16 20:07:44 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: Use C99-ism to reduce ifdefs. Pointed out by christos@. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.9 src/sys/uvm/pmap/pmap_pvt.c:1.10 --- src/sys/uvm/pmap/pmap_pvt.c:1.9 Mon Mar 16 19:56:39 2020 +++ src/sys/uvm/pmap/pmap_pvt.c Mon Mar 16 20:07:44 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.9 2020/03/16 19:56:39 ad Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.10 2020/03/16 20:07:44 ad Exp $ */ /*- * Copyright (c) 2014, 2020 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.9 2020/03/16 19:56:39 ad Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.10 2020/03/16 20:07:44 ad Exp $"); #include #include @@ -77,9 +77,6 @@ pmap_pv_track(paddr_t start, psize_t siz { struct pv_track *pvt; size_t npages; -#ifdef PMAP_PAGE_INIT - size_t i; -#endif KASSERT(start == trunc_page(start)); KASSERT(size == trunc_page(size)); @@ -94,7 +91,7 @@ pmap_pv_track(paddr_t start, psize_t siz pvt->pvt_size = size; #ifdef PMAP_PAGE_INIT - for (i = 0; i < npages; i++) + for (size_t i = 0; i < npages; i++) PMAP_PAGE_INIT(&pvt->pvt_pages[i]); #endif
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: ad Date: Mon Mar 16 19:56:39 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: pmap_pv_track(): use PMAP_PAGE_INIT() otherwise the x86 pmap pukes. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.8 src/sys/uvm/pmap/pmap_pvt.c:1.9 --- src/sys/uvm/pmap/pmap_pvt.c:1.8 Wed Jan 1 16:50:41 2020 +++ src/sys/uvm/pmap/pmap_pvt.c Mon Mar 16 19:56:39 2020 @@ -1,7 +1,7 @@ -/* $NetBSD: pmap_pvt.c,v 1.8 2020/01/01 16:50:41 martin Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.9 2020/03/16 19:56:39 ad Exp $ */ /*- - * Copyright (c) 2014 The NetBSD Foundation, Inc. + * Copyright (c) 2014, 2020 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -30,7 +30,7 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.8 2020/01/01 16:50:41 martin Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.9 2020/03/16 19:56:39 ad Exp $"); #include #include @@ -77,6 +77,9 @@ pmap_pv_track(paddr_t start, psize_t siz { struct pv_track *pvt; size_t npages; +#ifdef PMAP_PAGE_INIT + size_t i; +#endif KASSERT(start == trunc_page(start)); KASSERT(size == trunc_page(size)); @@ -90,6 +93,11 @@ pmap_pv_track(paddr_t start, psize_t siz pvt->pvt_start = start; pvt->pvt_size = size; +#ifdef PMAP_PAGE_INIT + for (i = 0; i < npages; i++) + PMAP_PAGE_INIT(&pvt->pvt_pages[i]); +#endif + mutex_enter(&pv_unmanaged.lock); pvt->pvt_next = pv_unmanaged.list; atomic_store_release(&pv_unmanaged.list, pvt);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: rin Date: Sun Mar 15 11:36:24 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.h Log Message: Fix build for ports using uvm/pmap; pmap_remove_all() returns a boolean. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 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/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.13 src/sys/uvm/pmap/pmap.h:1.14 --- src/sys/uvm/pmap/pmap.h:1.13 Wed Mar 11 13:30:31 2020 +++ src/sys/uvm/pmap/pmap.h Sun Mar 15 11:36:24 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.13 2020/03/11 13:30:31 thorpej Exp $ */ +/* $NetBSD: pmap.h,v 1.14 2020/03/15 11:36:24 rin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -185,7 +185,7 @@ extern pmap_segtab_t pmap_kern_segtab; /* * Bootstrap the system enough to run with virtual memory. */ -void pmap_remove_all(pmap_t); +bool pmap_remove_all(pmap_t); void pmap_set_modified(paddr_t); bool pmap_page_clear_attributes(struct vm_page_md *, u_int); void pmap_page_set_attributes(struct vm_page_md *, u_int);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: thorpej Date: Thu Mar 12 23:10:27 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: pmap_tlb_miss_lock needs to be globally visible. To generate a diff of this commit: cvs rdiff -u -r1.46 -r1.47 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.46 src/sys/uvm/pmap/pmap.c:1.47 --- src/sys/uvm/pmap/pmap.c:1.46 Wed Mar 11 13:30:31 2020 +++ src/sys/uvm/pmap/pmap.c Thu Mar 12 23:10:27 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.46 2020/03/11 13:30:31 thorpej Exp $ */ +/* $NetBSD: pmap.c,v 1.47 2020/03/12 23:10:27 thorpej Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.46 2020/03/11 13:30:31 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.47 2020/03/12 23:10:27 thorpej Exp $"); /* * Manages physical address maps. @@ -277,7 +277,7 @@ struct pool_allocator pmap_pv_page_alloc #define pmap_tlb_miss_lock_enter() pmap_md_tlb_miss_lock_enter() #define pmap_tlb_miss_lock_exit() pmap_md_tlb_miss_lock_exit() #else -static kmutex_t pmap_tlb_miss_lock __cacheline_aligned; +kmutex_t pmap_tlb_miss_lock __cacheline_aligned; static void pmap_tlb_miss_lock_init(void)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: martin Date: Wed Jan 1 16:50:42 UTC 2020 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: Revert previous (include of sys/param.h) - the headers requiring this have been fixed. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.7 src/sys/uvm/pmap/pmap_pvt.c:1.8 --- src/sys/uvm/pmap/pmap_pvt.c:1.7 Sat Dec 28 08:25:33 2019 +++ src/sys/uvm/pmap/pmap_pvt.c Wed Jan 1 16:50:41 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.7 2019/12/28 08:25:33 martin Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.8 2020/01/01 16:50:41 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,9 +30,8 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.7 2019/12/28 08:25:33 martin Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.8 2020/01/01 16:50:41 martin Exp $"); -#include #include #include #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: ad Date: Mon Dec 30 18:28:06 UTC 2019 Modified Files: src/sys/uvm/pmap: vmpagemd.h Log Message: pg->phys_addr -> VM_PAGE_TO_PHYS(). To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/uvm/pmap/vmpagemd.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/uvm/pmap/vmpagemd.h diff -u src/sys/uvm/pmap/vmpagemd.h:1.15 src/sys/uvm/pmap/vmpagemd.h:1.16 --- src/sys/uvm/pmap/vmpagemd.h:1.15 Sun Oct 20 08:29:38 2019 +++ src/sys/uvm/pmap/vmpagemd.h Mon Dec 30 18:28:06 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: vmpagemd.h,v 1.15 2019/10/20 08:29:38 skrll Exp $ */ +/* $NetBSD: vmpagemd.h,v 1.16 2019/12/30 18:28:06 ad Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -149,7 +149,7 @@ pmap_pvlist_locked_p(struct vm_page_md * do { \ (pg)->mdpage.mdpg_first.pv_next = NULL;\ (pg)->mdpage.mdpg_first.pv_pmap = NULL;\ - (pg)->mdpage.mdpg_first.pv_va = (pg)->phys_addr; \ + (pg)->mdpage.mdpg_first.pv_va = VM_PAGE_TO_PHYS(pg); \ (pg)->mdpage.mdpg_attrs = 0; \ VM_PAGEMD_PVLIST_LOCK_INIT(&(pg)->mdpage); \ } while (/* CONSTCOND */ 0)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: martin Date: Sat Dec 28 08:25:33 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: Add mising sys/param.h include (for COHERENCY_UNIT, now needed in uvm headers) To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.6 src/sys/uvm/pmap/pmap_pvt.c:1.7 --- src/sys/uvm/pmap/pmap_pvt.c:1.6 Wed Dec 18 11:27:56 2019 +++ src/sys/uvm/pmap/pmap_pvt.c Sat Dec 28 08:25:33 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.6 2019/12/18 11:27:56 skrll Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.7 2019/12/28 08:25:33 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,8 +30,9 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.6 2019/12/18 11:27:56 skrll Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.7 2019/12/28 08:25:33 martin Exp $"); +#include #include #include #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Dec 18 11:27:56 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap_pvt.c pmap_segtab.c pmap_synci.c pmap_tlb.c Log Message: KNF To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/uvm/pmap/pmap_pvt.c cvs rdiff -u -r1.12 -r1.13 src/sys/uvm/pmap/pmap_segtab.c cvs rdiff -u -r1.3 -r1.4 src/sys/uvm/pmap/pmap_synci.c cvs rdiff -u -r1.29 -r1.30 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.5 src/sys/uvm/pmap/pmap_pvt.c:1.6 --- src/sys/uvm/pmap/pmap_pvt.c:1.5 Mon Dec 9 04:39:58 2019 +++ src/sys/uvm/pmap/pmap_pvt.c Wed Dec 18 11:27:56 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.5 2019/12/09 04:39:58 riastradh Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.6 2019/12/18 11:27:56 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,11 +30,11 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.5 2019/12/09 04:39:58 riastradh Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.6 2019/12/18 11:27:56 skrll Exp $"); +#include #include #include -#include #include #include Index: src/sys/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.12 src/sys/uvm/pmap/pmap_segtab.c:1.13 --- src/sys/uvm/pmap/pmap_segtab.c:1.12 Sat Dec 14 14:46:11 2019 +++ src/sys/uvm/pmap/pmap_segtab.c Wed Dec 18 11:27:56 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.12 2019/12/14 14:46:11 ad Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.13 2019/12/18 11:27:56 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.12 2019/12/14 14:46:11 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.13 2019/12/18 11:27:56 skrll Exp $"); /* * Manages physical address maps. @@ -100,10 +100,11 @@ __KERNEL_RCSID(0, "$NetBSD: pmap_segtab. #include "opt_multiprocessor.h" #include -#include -#include -#include + #include +#include +#include +#include #include Index: src/sys/uvm/pmap/pmap_synci.c diff -u src/sys/uvm/pmap/pmap_synci.c:1.3 src/sys/uvm/pmap/pmap_synci.c:1.4 --- src/sys/uvm/pmap/pmap_synci.c:1.3 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/pmap_synci.c Wed Dec 18 11:27:56 2019 @@ -29,17 +29,18 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_synci.c,v 1.3 2016/07/11 16:06:09 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_synci.c,v 1.4 2019/12/18 11:27:56 skrll Exp $"); #define __PMAP_PRIVATE #include "opt_multiprocessor.h" #include -#include -#include + #include #include +#include +#include #include Index: src/sys/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.29 src/sys/uvm/pmap/pmap_tlb.c:1.30 --- src/sys/uvm/pmap/pmap_tlb.c:1.29 Tue Dec 17 13:25:50 2019 +++ src/sys/uvm/pmap/pmap_tlb.c Wed Dec 18 11:27:56 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.29 2019/12/17 13:25:50 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.30 2019/12/18 11:27:56 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.29 2019/12/17 13:25:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.30 2019/12/18 11:27:56 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -127,12 +127,13 @@ __KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v #include "opt_multiprocessor.h" #include -#include -#include -#include + #include -#include /* for cold */ #include +#include /* for cold */ +#include +#include +#include #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Dec 18 10:55:50 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Remove duplicate #includes To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.44 src/sys/uvm/pmap/pmap.c:1.45 --- src/sys/uvm/pmap/pmap.c:1.44 Sun Oct 20 08:29:38 2019 +++ src/sys/uvm/pmap/pmap.c Wed Dec 18 10:55:50 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.44 2019/10/20 08:29:38 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.45 2019/12/18 10:55:50 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.44 2019/10/20 08:29:38 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.45 2019/12/18 10:55:50 skrll Exp $"); /* * Manages physical address maps. @@ -102,14 +102,12 @@ __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.4 #define __PMAP_PRIVATE #include + #include #include #include #include #include -#include -#include -#include #include #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Dec 17 13:25:50 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Fix a UVMHIST_LOG format To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.28 src/sys/uvm/pmap/pmap_tlb.c:1.29 --- src/sys/uvm/pmap/pmap_tlb.c:1.28 Sun Feb 25 21:43:03 2018 +++ src/sys/uvm/pmap/pmap_tlb.c Tue Dec 17 13:25:50 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.28 2018/02/25 21:43:03 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.29 2019/12/17 13:25:50 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.28 2018/02/25 21:43:03 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.29 2019/12/17 13:25:50 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -734,7 +734,7 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); UVMHIST_LOG(maphist, - " (pm=%#jx va=%#j, pte=%#jx flags=%#jx)", + " (pm=%#jx va=%#jx, pte=%#jx flags=%#jx)", (uintptr_t)pm, va, pte_value(pte), flags); KASSERT(kpreempt_disabled());
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: ad Date: Sat Dec 14 14:46:11 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Use pageq.list instead of listq.list. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.11 src/sys/uvm/pmap/pmap_segtab.c:1.12 --- src/sys/uvm/pmap/pmap_segtab.c:1.11 Sun Oct 20 07:22:51 2019 +++ src/sys/uvm/pmap/pmap_segtab.c Sat Dec 14 14:46:11 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.11 2019/10/20 07:22:51 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.12 2019/12/14 14:46:11 ad Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.11 2019/10/20 07:22:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.12 2019/12/14 14:46:11 ad Exp $"); /* * Manages physical address maps. @@ -247,7 +247,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se struct vm_page *pg = PHYS_TO_VM_PAGE(pa); #ifdef PMAP_PTP_CACHE mutex_spin_enter(&pmap_segtab_lock); - LIST_INSERT_HEAD(&pmap_segtab_info.ptp_pgflist, pg, listq.list); + LIST_INSERT_HEAD(&pmap_segtab_info.ptp_pgflist, pg, pageq.list); mutex_spin_exit(&pmap_segtab_lock); #else uvm_pagefree(pg); @@ -457,7 +457,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va #ifdef PMAP_PTP_CACHE mutex_spin_enter(&pmap_segtab_lock); if ((pg = LIST_FIRST(&pmap_segtab_info.ptp_pgflist)) != NULL) { - LIST_REMOVE(pg, listq.list); + LIST_REMOVE(pg, pageq.list); KASSERT(LIST_FIRST(&pmap_segtab_info.ptp_pgflist) != pg); } mutex_spin_exit(&pmap_segtab_lock); @@ -485,7 +485,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va #ifdef PMAP_PTP_CACHE mutex_spin_enter(&pmap_segtab_lock); LIST_INSERT_HEAD(&pmap_segtab_info.ptp_pgflist, - pg, listq.list); + pg, pageq.list); mutex_spin_exit(&pmap_segtab_lock); #else PMAP_UNMAP_POOLPAGE((vaddr_t)pte);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: riastradh Date: Mon Dec 9 04:39:58 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: Convert pmap_pvt to atomic_load/store. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.4 src/sys/uvm/pmap/pmap_pvt.c:1.5 --- src/sys/uvm/pmap/pmap_pvt.c:1.4 Sat Dec 7 17:56:08 2019 +++ src/sys/uvm/pmap/pmap_pvt.c Mon Dec 9 04:39:58 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.4 2019/12/07 17:56:08 jmcneill Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.5 2019/12/09 04:39:58 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.4 2019/12/07 17:56:08 jmcneill Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.5 2019/12/09 04:39:58 riastradh Exp $"); #include #include @@ -92,8 +92,7 @@ pmap_pv_track(paddr_t start, psize_t siz mutex_enter(&pv_unmanaged.lock); pvt->pvt_next = pv_unmanaged.list; - membar_producer(); - pv_unmanaged.list = pvt; + atomic_store_release(&pv_unmanaged.list, pvt); mutex_exit(&pv_unmanaged.lock); } @@ -119,9 +118,21 @@ pmap_pv_untrack(paddr_t start, psize_t s panic("pmap_pv_untrack: pv-tracking at 0x%"PRIxPADDR ": 0x%"PRIxPSIZE" bytes, not 0x%"PRIxPSIZE" bytes", pvt->pvt_start, pvt->pvt_size, size); - *pvtp = pvt->pvt_next; + + /* + * Remove from list. Readers can safely see the old + * and new states of the list. + */ + atomic_store_relaxed(pvtp, pvt->pvt_next); + + /* Wait for readers who can see the old state to finish. */ pserialize_perform(pv_unmanaged.psz); - pvt->pvt_next = NULL; + + /* + * We now have exclusive access to pvt and can destroy + * it. Poison it to catch bugs. + */ + explicit_memset(&pvt->pvt_next, 0x1a, sizeof pvt->pvt_next); goto out; } panic("pmap_pv_untrack: pages not pv-tracked at 0x%"PRIxPADDR @@ -143,8 +154,9 @@ pmap_pv_tracked(paddr_t pa) KASSERT(pa == trunc_page(pa)); s = pserialize_read_enter(); - for (pvt = pv_unmanaged.list; pvt != NULL; pvt = pvt->pvt_next) { - membar_datadep_consumer(); + for (pvt = atomic_load_consume(&pv_unmanaged.list); + pvt != NULL; + pvt = pvt->pvt_next) { if ((pvt->pvt_start <= pa) && ((pa - pvt->pvt_start) < pvt->pvt_size)) break;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jmcneill Date: Sat Dec 7 17:56:08 UTC 2019 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: sys/atomic.h for membar_* To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.3 src/sys/uvm/pmap/pmap_pvt.c:1.4 --- src/sys/uvm/pmap/pmap_pvt.c:1.3 Sun Feb 7 18:41:25 2016 +++ src/sys/uvm/pmap/pmap_pvt.c Sat Dec 7 17:56:08 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.3 2016/02/07 18:41:25 riastradh Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.4 2019/12/07 17:56:08 jmcneill Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,10 +30,11 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.3 2016/02/07 18:41:25 riastradh Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.4 2019/12/07 17:56:08 jmcneill Exp $"); #include #include +#include #include #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jdolecek Date: Sun Feb 25 21:43:03 UTC 2018 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: fix the DIAGNOSTIC function pmap_tlb_asid_count() to not expect that TLBINFO_ASID_INUSE_P() returns just 0 or 1; the underlying __BITMAP_ISSET() actually returns the matching bit nowadays, which caused miscounting fixes PR kern/53054 by Sevan Janiyan To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.27 src/sys/uvm/pmap/pmap_tlb.c:1.28 --- src/sys/uvm/pmap/pmap_tlb.c:1.27 Sun Feb 25 16:44:31 2018 +++ src/sys/uvm/pmap/pmap_tlb.c Sun Feb 25 21:43:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.27 2018/02/25 16:44:31 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.28 2018/02/25 21:43:03 jdolecek Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.27 2018/02/25 16:44:31 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.28 2018/02/25 21:43:03 jdolecek Exp $"); /* * Manages address spaces in a TLB. @@ -409,7 +409,8 @@ pmap_tlb_asid_count(struct pmap_tlb_info { size_t count = 0; for (tlb_asid_t asid = 1; asid <= ti->ti_asid_max; asid++) { - count += TLBINFO_ASID_INUSE_P(ti, asid); + if (TLBINFO_ASID_INUSE_P(ti, asid)) + count++; } return count; }
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jdolecek Date: Sun Feb 25 16:44:31 UTC 2018 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: adjust KASSERT() triggered in PR port-cobalt/53054 to provide more info To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.26 src/sys/uvm/pmap/pmap_tlb.c:1.27 --- src/sys/uvm/pmap/pmap_tlb.c:1.26 Wed Feb 21 21:53:54 2018 +++ src/sys/uvm/pmap/pmap_tlb.c Sun Feb 25 16:44:31 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.26 2018/02/21 21:53:54 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.27 2018/02/25 16:44:31 jdolecek Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.26 2018/02/21 21:53:54 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.27 2018/02/25 16:44:31 jdolecek Exp $"); /* * Manages address spaces in a TLB. @@ -457,7 +457,11 @@ pmap_tlb_asid_reinitialize(struct pmap_t const u_int asids_found = tlb_record_asids( ti->ti_asid_bitmap._b, ti->ti_asid_max); pmap_tlb_asid_check(); - KASSERT(asids_found == pmap_tlb_asid_count(ti)); +#ifdef DIAGNOSTIC + const u_int asids_count = pmap_tlb_asid_count(ti); +#endif + KASSERTMSG(asids_found == asids_count, + "found %u != count %u", asids_found, asids_count); if (__predict_false(asids_found >= ti->ti_asid_max / 2)) { tlb_invalidate_asids(KERNEL_PID + 1, ti->ti_asid_max); #else /* MULTIPROCESSOR && !PMAP_TLB_NEED_SHOOTDOWN */
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jdolecek Date: Wed Feb 21 21:53:54 UTC 2018 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: KERNEL_PID is > 0 on powerpc/ibm4xx, need to mask all bits <0, KERNEL_PID> to avoid triggering KASSERT() checking allocated asid is bigger than KERNEL_PID; adjust also TLBINFO_ASID_INITIAL_FREE() accordingly discussed with Nick To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.25 src/sys/uvm/pmap/pmap_tlb.c:1.26 --- src/sys/uvm/pmap/pmap_tlb.c:1.25 Mon Feb 19 22:01:15 2018 +++ src/sys/uvm/pmap/pmap_tlb.c Wed Feb 21 21:53:54 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.25 2018/02/19 22:01:15 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.26 2018/02/21 21:53:54 jdolecek Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.25 2018/02/19 22:01:15 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.26 2018/02/21 21:53:54 jdolecek Exp $"); /* * Manages address spaces in a TLB. @@ -144,14 +144,30 @@ static kmutex_t pmap_tlb0_lock __cacheli #error "KERNEL_PID expected in range 0-31" #endif +#define TLBINFO_ASID_MARK_UNUSED(ti, asid) \ + __BITMAP_CLR((asid), &(ti)->ti_asid_bitmap) +#define TLBINFO_ASID_MARK_USED(ti, asid) \ + __BITMAP_SET((asid), &(ti)->ti_asid_bitmap) +#define TLBINFO_ASID_INUSE_P(ti, asid) \ + __BITMAP_ISSET((asid), &(ti)->ti_asid_bitmap) +#define TLBINFO_ASID_RESET(ti) \ + do {\ + __BITMAP_ZERO(&ti->ti_asid_bitmap); \ + for (tlb_asid_t asid = 0; asid <= KERNEL_PID; asid++) \ + TLBINFO_ASID_MARK_USED(ti, asid); \ + } while (0) +#define TLBINFO_ASID_INITIAL_FREE(asid_max) \ + (asid_max + 1 /* 0 */ - (1 + KERNEL_PID)) + struct pmap_tlb_info pmap_tlb0_info = { .ti_name = "tlb0", .ti_asid_hint = KERNEL_PID + 1, #ifdef PMAP_TLB_NUM_PIDS .ti_asid_max = IFCONSTANT(PMAP_TLB_NUM_PIDS - 1), - .ti_asids_free = IFCONSTANT(PMAP_TLB_NUM_PIDS - (1 + KERNEL_PID)), + .ti_asids_free = IFCONSTANT( + TLBINFO_ASID_INITIAL_FREE(PMAP_TLB_NUM_PIDS - 1)), #endif - .ti_asid_bitmap._b[0] = __BIT(KERNEL_PID), + .ti_asid_bitmap._b[0] = __BITS(0, KERNEL_PID), #ifdef PMAP_TLB_WIRED_UPAGES .ti_wired = PMAP_TLB_WIRED_UPAGES, #endif @@ -171,20 +187,6 @@ struct pmap_tlb_info *pmap_tlbs[PMAP_TLB u_int pmap_ntlbs = 1; #endif -#define TLBINFO_ASID_MARK_UNUSED(ti, asid) \ - __BITMAP_CLR((asid), &(ti)->ti_asid_bitmap) -#define TLBINFO_ASID_MARK_USED(ti, asid) \ - __BITMAP_SET((asid), &(ti)->ti_asid_bitmap) -#define TLBINFO_ASID_INUSE_P(ti, asid) \ - __BITMAP_ISSET((asid), &(ti)->ti_asid_bitmap) -#define TLBINFO_ASID_RESET(ti) \ - do { \ - __BITMAP_ZERO(&ti->ti_asid_bitmap); \ - TLBINFO_ASID_MARK_USED(ti, KERNEL_PID); \ - } while (0) -#define TLBINFO_ASID_INITIAL_FREE(ti) \ - ((ti)->ti_asid_max + 1 /* 0 */ - 1 /* reserved KERNEL_PID */) - #ifdef MULTIPROCESSOR __unused static inline bool pmap_tlb_intersecting_active_p(pmap_t pm, struct pmap_tlb_info *ti) @@ -338,10 +340,10 @@ pmap_tlb_info_init(struct pmap_tlb_info KASSERT(pmap_tlbs[pmap_ntlbs] == NULL); ti->ti_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_SCHED); - TLBINFO_ASID_MARK_USED(ti, KERNEL_PID); + TLBINFO_ASID_RESET(ti); ti->ti_asid_hint = KERNEL_PID + 1; ti->ti_asid_max = pmap_tlbs[0]->ti_asid_max; - ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti->ti_asid_max); ti->ti_tlbinvop = TLBINV_NOBODY; ti->ti_victim = NULL; kcpuset_create(&ti->ti_kcpuset, true); @@ -368,7 +370,7 @@ pmap_tlb_info_init(struct pmap_tlb_info //printf("asid "); if (ti->ti_asid_max == 0) { ti->ti_asid_max = pmap_md_tlb_asid_max(); - ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti->ti_asid_max); } KASSERT(ti->ti_asid_max < PMAP_TLB_BITMAP_LENGTH); @@ -427,7 +429,7 @@ pmap_tlb_asid_reinitialize(struct pmap_t * First, clear the ASID bitmap (except for ASID 0 which belongs * to the kernel). */ - ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti->ti_asid_max); ti->ti_asid_hint = KERNEL_PID + 1; TLBINFO_ASID_RESET(ti); @@ -471,7 +473,8 @@ pmap_tlb_asid_reinitialize(struct pmap_t tlb_invalidate_all(); #endif /* MULTIPROCESSOR && !PMAP_TLB_NEED_SHOOTDOWN */ TLBINFO_ASID_RESET(ti); - ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE( +ti->ti_asid_max); #if !defined(MULTIPROCESSOR) || defined(PMAP_TLB_NEED_SHOOTDOWN) } else { ti->ti_asids_free -= asids_found;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jdolecek Date: Mon Feb 19 22:01:16 UTC 2018 Modified Files: src/sys/uvm/pmap: pmap_tlb.c pmap_tlb.h Log Message: convert to use actual __BITMAP_*() macros from , and make it possible to override the ASID bitmap length; default to 256 ASIDs as before XXX NFCI; compile tested only on evbpcc and evbmips, unfortunately didn't find any combination of port using the MI pmap_tlb.c and working in QEMU To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/uvm/pmap/pmap_tlb.c cvs rdiff -u -r1.12 -r1.13 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.24 src/sys/uvm/pmap/pmap_tlb.c:1.25 --- src/sys/uvm/pmap/pmap_tlb.c:1.24 Mon Feb 19 21:40:45 2018 +++ src/sys/uvm/pmap/pmap_tlb.c Mon Feb 19 22:01:15 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.24 2018/02/19 21:40:45 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.25 2018/02/19 22:01:15 jdolecek Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.24 2018/02/19 21:40:45 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.25 2018/02/19 22:01:15 jdolecek Exp $"); /* * Manages address spaces in a TLB. @@ -140,6 +140,10 @@ static kmutex_t pmap_tlb0_lock __cacheli #define IFCONSTANT(x) (__builtin_constant_p((x)) ? (x) : 0) +#if KERNEL_PID > 31 +#error "KERNEL_PID expected in range 0-31" +#endif + struct pmap_tlb_info pmap_tlb0_info = { .ti_name = "tlb0", .ti_asid_hint = KERNEL_PID + 1, @@ -147,7 +151,7 @@ struct pmap_tlb_info pmap_tlb0_info = { .ti_asid_max = IFCONSTANT(PMAP_TLB_NUM_PIDS - 1), .ti_asids_free = IFCONSTANT(PMAP_TLB_NUM_PIDS - (1 + KERNEL_PID)), #endif - .ti_asid_bitmap[0] = (2 << KERNEL_PID) - 1, + .ti_asid_bitmap._b[0] = __BIT(KERNEL_PID), #ifdef PMAP_TLB_WIRED_UPAGES .ti_wired = PMAP_TLB_WIRED_UPAGES, #endif @@ -167,22 +171,19 @@ struct pmap_tlb_info *pmap_tlbs[PMAP_TLB u_int pmap_ntlbs = 1; #endif -#define __BITMAP_SET(bm, n) \ - ((bm)[(n) / (8*sizeof(bm[0]))] |= 1LU << ((n) % (8*sizeof(bm[0] -#define __BITMAP_CLR(bm, n) \ - ((bm)[(n) / (8*sizeof(bm[0]))] &= ~(1LU << ((n) % (8*sizeof(bm[0]) -#define __BITMAP_ISSET_P(bm, n) \ - (((bm)[(n) / (8*sizeof(bm[0]))] & (1LU << ((n) % (8*sizeof(bm[0]) != 0) - #define TLBINFO_ASID_MARK_UNUSED(ti, asid) \ - __BITMAP_CLR((ti)->ti_asid_bitmap, (asid)) + __BITMAP_CLR((asid), &(ti)->ti_asid_bitmap) #define TLBINFO_ASID_MARK_USED(ti, asid) \ - __BITMAP_SET((ti)->ti_asid_bitmap, (asid)) + __BITMAP_SET((asid), &(ti)->ti_asid_bitmap) #define TLBINFO_ASID_INUSE_P(ti, asid) \ - __BITMAP_ISSET_P((ti)->ti_asid_bitmap, (asid)) + __BITMAP_ISSET((asid), &(ti)->ti_asid_bitmap) +#define TLBINFO_ASID_RESET(ti) \ + do { \ + __BITMAP_ZERO(&ti->ti_asid_bitmap); \ + TLBINFO_ASID_MARK_USED(ti, KERNEL_PID); \ + } while (0) #define TLBINFO_ASID_INITIAL_FREE(ti) \ ((ti)->ti_asid_max + 1 /* 0 */ - 1 /* reserved KERNEL_PID */) - #ifdef MULTIPROCESSOR __unused static inline bool @@ -337,7 +338,7 @@ pmap_tlb_info_init(struct pmap_tlb_info KASSERT(pmap_tlbs[pmap_ntlbs] == NULL); ti->ti_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_SCHED); - ti->ti_asid_bitmap[0] = (2 << KERNEL_PID) - 1; + TLBINFO_ASID_MARK_USED(ti, KERNEL_PID); ti->ti_asid_hint = KERNEL_PID + 1; ti->ti_asid_max = pmap_tlbs[0]->ti_asid_max; ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); @@ -350,6 +351,8 @@ pmap_tlb_info_init(struct pmap_tlb_info snprintf(ti->ti_name, sizeof(ti->ti_name), "tlb%u", ti->ti_index); pmap_tlb_info_evcnt_attach(ti); + + KASSERT(ti->ti_asid_max < PMAP_TLB_BITMAP_LENGTH); return; } #endif @@ -368,7 +371,7 @@ pmap_tlb_info_init(struct pmap_tlb_info ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); } - KASSERT(ti->ti_asid_max < sizeof(ti->ti_asid_bitmap)*8); + KASSERT(ti->ti_asid_max < PMAP_TLB_BITMAP_LENGTH); } #if defined(MULTIPROCESSOR) @@ -413,9 +416,6 @@ pmap_tlb_asid_count(struct pmap_tlb_info static void pmap_tlb_asid_reinitialize(struct pmap_tlb_info *ti, enum tlb_invalidate_op op) { - const size_t asid_bitmap_words = - ti->ti_asid_max / (8 * sizeof(ti->ti_asid_bitmap[0])); - UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); UVMHIST_LOG(maphist, "(ti=%#jx, op=%ju)", (uintptr_t)ti, op, 0, 0); @@ -429,10 +429,7 @@ pmap_tlb_asid_reinitialize(struct pmap_t */ ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); ti->ti_asid_hint = KERNEL_PID + 1; - ti->ti_asid_bitmap[0] = (2 << KERNEL_PID) - 1; - for (size_t word = 1; word <= asid_bitmap_words; word++) { - ti->ti_asid_bitmap[word] = 0; - } + TLBINFO_ASID_RESET(ti); switch (op) { #if defined(MULTIPROCESSOR) && defined(PMAP_TLB_NEED_SHOOTDOWN) @@ -455,8 +452,8 @@ pmap_tlb_asid_reinitialize(struct pmap_t */ #if !defined
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jdolecek Date: Mon Feb 19 21:40:45 UTC 2018 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: a bit of DRY - add macro for initial free ASID count To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.23 src/sys/uvm/pmap/pmap_tlb.c:1.24 --- src/sys/uvm/pmap/pmap_tlb.c:1.23 Mon Feb 19 21:20:33 2018 +++ src/sys/uvm/pmap/pmap_tlb.c Mon Feb 19 21:40:45 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.23 2018/02/19 21:20:33 jdolecek Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.24 2018/02/19 21:40:45 jdolecek Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.23 2018/02/19 21:20:33 jdolecek Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.24 2018/02/19 21:40:45 jdolecek Exp $"); /* * Manages address spaces in a TLB. @@ -180,6 +180,9 @@ u_int pmap_ntlbs = 1; __BITMAP_SET((ti)->ti_asid_bitmap, (asid)) #define TLBINFO_ASID_INUSE_P(ti, asid) \ __BITMAP_ISSET_P((ti)->ti_asid_bitmap, (asid)) +#define TLBINFO_ASID_INITIAL_FREE(ti) \ + ((ti)->ti_asid_max + 1 /* 0 */ - 1 /* reserved KERNEL_PID */) + #ifdef MULTIPROCESSOR __unused static inline bool @@ -337,7 +340,7 @@ pmap_tlb_info_init(struct pmap_tlb_info ti->ti_asid_bitmap[0] = (2 << KERNEL_PID) - 1; ti->ti_asid_hint = KERNEL_PID + 1; ti->ti_asid_max = pmap_tlbs[0]->ti_asid_max; - ti->ti_asids_free = ti->ti_asid_max - KERNEL_PID; + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); ti->ti_tlbinvop = TLBINV_NOBODY; ti->ti_victim = NULL; kcpuset_create(&ti->ti_kcpuset, true); @@ -362,7 +365,7 @@ pmap_tlb_info_init(struct pmap_tlb_info //printf("asid "); if (ti->ti_asid_max == 0) { ti->ti_asid_max = pmap_md_tlb_asid_max(); - ti->ti_asids_free = ti->ti_asid_max - KERNEL_PID; + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); } KASSERT(ti->ti_asid_max < sizeof(ti->ti_asid_bitmap)*8); @@ -424,7 +427,7 @@ pmap_tlb_asid_reinitialize(struct pmap_t * First, clear the ASID bitmap (except for ASID 0 which belongs * to the kernel). */ - ti->ti_asids_free = ti->ti_asid_max - KERNEL_PID; + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); ti->ti_asid_hint = KERNEL_PID + 1; ti->ti_asid_bitmap[0] = (2 << KERNEL_PID) - 1; for (size_t word = 1; word <= asid_bitmap_words; word++) { @@ -476,7 +479,7 @@ pmap_tlb_asid_reinitialize(struct pmap_t word++) { ti->ti_asid_bitmap[word] = 0; } - ti->ti_asids_free = ti->ti_asid_max - KERNEL_PID; + ti->ti_asids_free = TLBINFO_ASID_INITIAL_FREE(ti); #if !defined(MULTIPROCESSOR) || defined(PMAP_TLB_NEED_SHOOTDOWN) } else { ti->ti_asids_free -= asids_found;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jdolecek Date: Mon Feb 19 21:20:34 UTC 2018 Modified Files: src/sys/uvm/pmap: pmap_tlb.c pmap_tlb.h Log Message: make it possible to not use the icache evcnts To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 src/sys/uvm/pmap/pmap_tlb.c cvs rdiff -u -r1.11 -r1.12 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.22 src/sys/uvm/pmap/pmap_tlb.c:1.23 --- src/sys/uvm/pmap/pmap_tlb.c:1.22 Sat Oct 28 00:37:13 2017 +++ src/sys/uvm/pmap/pmap_tlb.c Mon Feb 19 21:20:33 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.22 2017/10/28 00:37:13 pgoyette Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.23 2018/02/19 21:20:33 jdolecek Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.22 2017/10/28 00:37:13 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.23 2018/02/19 21:20:33 jdolecek Exp $"); /* * Manages address spaces in a TLB. @@ -296,7 +296,7 @@ pmap_tlb_pai_reset(struct pmap_tlb_info void pmap_tlb_info_evcnt_attach(struct pmap_tlb_info *ti) { -#if defined(MULTIPROCESSOR) +#if defined(MULTIPROCESSOR) && !defined(PMAP_TLB_NO_SYNCI_EVCNT) evcnt_attach_dynamic_nozero(&ti->ti_evcnt_synci_desired, EVCNT_TYPE_MISC, NULL, ti->ti_name, "icache syncs desired"); @@ -315,7 +315,7 @@ pmap_tlb_info_evcnt_attach(struct pmap_t evcnt_attach_dynamic_nozero(&ti->ti_evcnt_synci_deferred, EVCNT_TYPE_MISC, &ti->ti_evcnt_synci_desired, ti->ti_name, "icache pages deferred"); -#endif /* MULTIPROCESSOR */ +#endif /* MULTIPROCESSOR && !PMAP_TLB_NO_SYNCI_EVCNT */ evcnt_attach_dynamic_nozero(&ti->ti_evcnt_asid_reinits, EVCNT_TYPE_MISC, NULL, ti->ti_name, "asid pool reinit"); Index: src/sys/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.11 src/sys/uvm/pmap/pmap_tlb.h:1.12 --- src/sys/uvm/pmap/pmap_tlb.h:1.11 Sat Jun 24 05:31:03 2017 +++ src/sys/uvm/pmap/pmap_tlb.h Mon Feb 19 21:20:33 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.11 2017/06/24 05:31:03 skrll Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.12 2018/02/19 21:20:33 jdolecek Exp $ */ /* * Copyright (c) 1992, 1993 @@ -129,12 +129,14 @@ struct pmap_tlb_info { #else #define tlbinfo_index(ti) ((void)(ti), 0) #endif +#if !defined(PMAP_TLB_NO_SYNCI_EVCNT) struct evcnt ti_evcnt_synci_asts; struct evcnt ti_evcnt_synci_all; struct evcnt ti_evcnt_synci_pages; struct evcnt ti_evcnt_synci_deferred; struct evcnt ti_evcnt_synci_desired; struct evcnt ti_evcnt_synci_duplicate; +#endif /* !PMAP_TLB_NO_SYNCI_EVCNT */ #else #define tlbinfo_index(ti) ((void)(ti), 0) #endif
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: pgoyette Date: Mon Oct 30 03:25:14 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Remove unneeded casts to (uintptr_t). This is already taken care of in the xxxHIST_LOG() macros. No need to pull-up to -8 - the extra cast really won't hurt anything. To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.39 src/sys/uvm/pmap/pmap.c:1.40 --- src/sys/uvm/pmap/pmap.c:1.39 Mon Oct 30 01:19:46 2017 +++ src/sys/uvm/pmap/pmap.c Mon Oct 30 03:25:14 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.39 2017/10/30 01:19:46 pgoyette Exp $ */ +/* $NetBSD: pmap.c,v 1.40 2017/10/30 03:25:14 pgoyette Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.39 2017/10/30 01:19:46 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.40 2017/10/30 03:25:14 pgoyette Exp $"); /* * Manages physical address maps. @@ -885,7 +885,7 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); UVMHIST_LOG(pmaphist, "(pmap=%#jx kernel=%c va=%#jx..%#jx)", - (uintmax_t)(uintptr_t)pmap, (is_kernel_pmap_p ? 1 : 0), sva, eva); + (uintptr_t)pmap, (is_kernel_pmap_p ? 1 : 0), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx", (uintptr_t)ptep, flags, 0, 0); @@ -1029,8 +1029,7 @@ pmap_pte_protect(pmap_t pmap, vaddr_t sv UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); UVMHIST_LOG(pmaphist, "(pmap=%#jx kernel=%jx va=%#jx..%#jx)", - (uintmax_t)(uintptr_t)pmap, (pmap == pmap_kernel() ? 1 : 0), - sva, eva); + (uintptr_t)pmap, (pmap == pmap_kernel() ? 1 : 0), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx)", (uintptr_t)ptep, flags, 0, 0);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: pgoyette Date: Mon Oct 30 01:19:46 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: And replace an instance of "%p" conversion with "%#jx" To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.38 src/sys/uvm/pmap/pmap.c:1.39 --- src/sys/uvm/pmap/pmap.c:1.38 Mon Oct 30 00:55:42 2017 +++ src/sys/uvm/pmap/pmap.c Mon Oct 30 01:19:46 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.38 2017/10/30 00:55:42 kre Exp $ */ +/* $NetBSD: pmap.c,v 1.39 2017/10/30 01:19:46 pgoyette Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.38 2017/10/30 00:55:42 kre Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.39 2017/10/30 01:19:46 pgoyette Exp $"); /* * Manages physical address maps. @@ -884,7 +884,7 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva const bool is_kernel_pmap_p = (pmap == pmap_kernel()); UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%p kernel=%c va=%#jx..%#jx)", + UVMHIST_LOG(pmaphist, "(pmap=%#jx kernel=%c va=%#jx..%#jx)", (uintmax_t)(uintptr_t)pmap, (is_kernel_pmap_p ? 1 : 0), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx", (uintptr_t)ptep, flags, 0, 0);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: kre Date: Mon Oct 30 00:55:42 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Remove a stray '"' (obvious typo) and add a couple of casts that are probably needed. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.37 src/sys/uvm/pmap/pmap.c:1.38 --- src/sys/uvm/pmap/pmap.c:1.37 Sat Oct 28 00:37:13 2017 +++ src/sys/uvm/pmap/pmap.c Mon Oct 30 00:55:42 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.37 2017/10/28 00:37:13 pgoyette Exp $ */ +/* $NetBSD: pmap.c,v 1.38 2017/10/30 00:55:42 kre Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.37 2017/10/28 00:37:13 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.38 2017/10/30 00:55:42 kre Exp $"); /* * Manages physical address maps. @@ -884,8 +884,8 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva const bool is_kernel_pmap_p = (pmap == pmap_kernel()); UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%p kernel=%c va=%#jx"..%#jx)", - pmap, (is_kernel_pmap_p ? 1 : 0), sva, eva); + UVMHIST_LOG(pmaphist, "(pmap=%p kernel=%c va=%#jx..%#jx)", + (uintmax_t)(uintptr_t)pmap, (is_kernel_pmap_p ? 1 : 0), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx", (uintptr_t)ptep, flags, 0, 0); @@ -1029,7 +1029,8 @@ pmap_pte_protect(pmap_t pmap, vaddr_t sv UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); UVMHIST_LOG(pmaphist, "(pmap=%#jx kernel=%jx va=%#jx..%#jx)", - pmap, (pmap == pmap_kernel() ? 1 : 0), sva, eva); + (uintmax_t)(uintptr_t)pmap, (pmap == pmap_kernel() ? 1 : 0), + sva, eva); UVMHIST_LOG(pmaphist, "ptep=%#jx, flags(npte)=%#jx)", (uintptr_t)ptep, flags, 0, 0);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Sep 7 06:29:47 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: There's no need to call pmap_tlb_invalidate_addr if pmap_remove_all was called and PMAP_DEFERRED_ACTIVATE is set. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.35 src/sys/uvm/pmap/pmap.c:1.36 --- src/sys/uvm/pmap/pmap.c:1.35 Sat Jun 24 07:30:17 2017 +++ src/sys/uvm/pmap/pmap.c Thu Sep 7 06:29:47 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.35 2017/06/24 07:30:17 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.36 2017/09/07 06:29:47 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.35 2017/06/24 07:30:17 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.36 2017/09/07 06:29:47 skrll Exp $"); /* * Manages physical address maps. @@ -774,10 +774,12 @@ pmap_page_remove(struct vm_page *pg) pmap_md_tlb_miss_lock_enter(); const pt_entry_t npte = pte_nv_entry(is_kernel_pmap_p); pte_set(ptep, npte); - /* - * Flush the TLB for the given address. - */ - pmap_tlb_invalidate_addr(pmap, va); + if (__predict_true(!(pmap->pm_flags & PMAP_DEFERRED_ACTIVATE))) { + /* + * Flush the TLB for the given address. + */ + pmap_tlb_invalidate_addr(pmap, va); + } pmap_md_tlb_miss_lock_exit(); /* @@ -903,10 +905,13 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva } pmap_md_tlb_miss_lock_enter(); pte_set(ptep, npte); - /* - * Flush the TLB for the given address. - */ - pmap_tlb_invalidate_addr(pmap, sva); + if (__predict_true(!(pmap->pm_flags & PMAP_DEFERRED_ACTIVATE))) { + + /* + * Flush the TLB for the given address. + */ + pmap_tlb_invalidate_addr(pmap, sva); + } pmap_md_tlb_miss_lock_exit(); }
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Jun 24 07:30:17 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Use pte_set To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.34 src/sys/uvm/pmap/pmap.c:1.35 --- src/sys/uvm/pmap/pmap.c:1.34 Fri May 12 05:45:58 2017 +++ src/sys/uvm/pmap/pmap.c Sat Jun 24 07:30:17 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.34 2017/05/12 05:45:58 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.35 2017/06/24 07:30:17 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.34 2017/05/12 05:45:58 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.35 2017/06/24 07:30:17 skrll Exp $"); /* * Manages physical address maps. @@ -773,7 +773,7 @@ pmap_page_remove(struct vm_page *pg) pmap_md_tlb_miss_lock_enter(); const pt_entry_t npte = pte_nv_entry(is_kernel_pmap_p); - *ptep = npte; + pte_set(ptep, npte); /* * Flush the TLB for the given address. */ @@ -902,7 +902,7 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva pmap_remove_pv(pmap, sva, pg, pte_modified_p(pte)); } pmap_md_tlb_miss_lock_enter(); - *ptep = npte; + pte_set(ptep, npte); /* * Flush the TLB for the given address. */ @@ -1054,7 +1054,7 @@ pmap_pte_protect(pmap_t pmap, vaddr_t sv pte = pte_prot_downgrade(pte, prot); if (*ptep != pte) { pmap_md_tlb_miss_lock_enter(); - *ptep = pte; + pte_set(ptep, pte); /* * Update the TLB if needed. */ @@ -1137,7 +1137,7 @@ pmap_page_cache(struct vm_page *pg, bool if (pte_valid_p(pte)) { pte = pte_cached_change(pte, cached); pmap_md_tlb_miss_lock_enter(); - *ptep = pte; + pte_set(ptep, pte); pmap_tlb_update_addr(pmap, va, pte, PMAP_TLB_NEED_IPI); pmap_md_tlb_miss_lock_exit(); } @@ -1271,7 +1271,7 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd KASSERT(pte_valid_p(npte)); pmap_md_tlb_miss_lock_enter(); - *ptep = npte; + pte_set(ptep, npte); pmap_tlb_update_addr(pmap, va, npte, update_flags); pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); @@ -1357,7 +1357,7 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, v * don't. Instead let the next reference to the page do it. */ pmap_md_tlb_miss_lock_enter(); - *ptep = npte; + pte_set(ptep, npte); pmap_tlb_update_addr(pmap_kernel(), va, npte, 0); pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); @@ -1407,7 +1407,7 @@ pmap_pte_kremove(pmap_t pmap, vaddr_t sv #endif pmap_md_tlb_miss_lock_enter(); - *ptep = new_pte; + pte_set(ptep, new_pte); pmap_tlb_invalidate_addr(pmap, sva); pmap_md_tlb_miss_lock_exit(); } @@ -1500,7 +1500,7 @@ pmap_unwire(pmap_t pmap, vaddr_t va) if (pte_wired_p(pte)) { pmap_md_tlb_miss_lock_enter(); - *ptep = pte_unwire_entry(pte); + pte_set(ptep, pte_unwire_entry(pte)); pmap_md_tlb_miss_lock_exit(); pmap->pm_stats.wired_count--; } @@ -1667,7 +1667,7 @@ pmap_clear_modify(struct vm_page *pg) KASSERT(pte_valid_p(pte)); const uintptr_t gen = VM_PAGEMD_PVLIST_UNLOCK(mdpg); pmap_md_tlb_miss_lock_enter(); - *ptep = pte; + pte_set(ptep, pte); pmap_tlb_invalidate_addr(pmap, va); pmap_md_tlb_miss_lock_exit(); pmap_update(pmap);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Jun 24 05:49:50 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.h Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 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/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.8 src/sys/uvm/pmap/pmap.h:1.9 --- src/sys/uvm/pmap/pmap.h:1.8 Sat Jun 24 05:31:03 2017 +++ src/sys/uvm/pmap/pmap.h Sat Jun 24 05:49:50 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.8 2017/06/24 05:31:03 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.9 2017/06/24 05:49:50 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -154,7 +154,7 @@ struct pmap_limits { /* * Initialize the kernel pmap. - */ + */ #ifdef MULTIPROCESSOR #define PMAP_SIZE offsetof(struct pmap, pm_pai[PMAP_TLB_MAX]) #else
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Jun 24 05:39:53 UTC 2017 Modified Files: src/sys/uvm/pmap: vmpagemd.h Log Message: Use __BIT(0) for PV_KENTER. NFC. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/uvm/pmap/vmpagemd.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/uvm/pmap/vmpagemd.h diff -u src/sys/uvm/pmap/vmpagemd.h:1.6 src/sys/uvm/pmap/vmpagemd.h:1.7 --- src/sys/uvm/pmap/vmpagemd.h:1.6 Sat Jun 24 05:34:37 2017 +++ src/sys/uvm/pmap/vmpagemd.h Sat Jun 24 05:39:53 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vmpagemd.h,v 1.6 2017/06/24 05:34:37 skrll Exp $ */ +/* $NetBSD: vmpagemd.h,v 1.7 2017/06/24 05:39:53 skrll Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -60,7 +60,7 @@ typedef struct pv_entry { struct pv_entry *pv_next; struct pmap *pv_pmap; vaddr_t pv_va; -#define PV_KENTER 0x0001 +#define PV_KENTER __BIT(0) } *pv_entry_t; #ifndef _MODULE
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Jun 24 05:34:37 UTC 2017 Modified Files: src/sys/uvm/pmap: vmpagemd.h Log Message: Whitespace - comment alignment. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/uvm/pmap/vmpagemd.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/uvm/pmap/vmpagemd.h diff -u src/sys/uvm/pmap/vmpagemd.h:1.5 src/sys/uvm/pmap/vmpagemd.h:1.6 --- src/sys/uvm/pmap/vmpagemd.h:1.5 Sat Jun 24 05:31:03 2017 +++ src/sys/uvm/pmap/vmpagemd.h Sat Jun 24 05:34:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vmpagemd.h,v 1.5 2017/06/24 05:31:03 skrll Exp $ */ +/* $NetBSD: vmpagemd.h,v 1.6 2017/06/24 05:34:37 skrll Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -86,9 +86,9 @@ typedef struct pv_entry { struct vm_page_md { volatile unsigned long mdpg_attrs; /* page attributes */ - struct pv_entry mdpg_first; /* pv_entry first */ + struct pv_entry mdpg_first; /* pv_entry first */ #if defined(MULTIPROCESSOR) || defined(MODULAR) || defined(_MODULE) - kmutex_t *mdpg_lock; /* pv list lock */ + kmutex_t *mdpg_lock; /* pv list lock */ #endif };
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Jun 24 05:31:03 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.h pmap_pvt.h pmap_tlb.h tlb.h vmpagemd.h Log Message: Multiple inclusion protection define consistency To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/uvm/pmap/pmap.h cvs rdiff -u -r1.1 -r1.2 src/sys/uvm/pmap/pmap_pvt.h cvs rdiff -u -r1.10 -r1.11 src/sys/uvm/pmap/pmap_tlb.h cvs rdiff -u -r1.3 -r1.4 src/sys/uvm/pmap/tlb.h cvs rdiff -u -r1.4 -r1.5 src/sys/uvm/pmap/vmpagemd.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/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.7 src/sys/uvm/pmap/pmap.h:1.8 --- src/sys/uvm/pmap/pmap.h:1.7 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/pmap.h Sat Jun 24 05:31:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.7 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: pmap.h,v 1.8 2017/06/24 05:31:03 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -71,8 +71,8 @@ * @(#)pmap.h 8.1 (Berkeley) 6/10/93 */ -#ifndef _COMMON_PMAP_H_ -#define _COMMON_PMAP_H_ +#ifndef _UVM_PMAP_PMAP_H_ +#define _UVM_PMAP_PMAP_H_ #include #ifdef UVMHIST @@ -218,4 +218,4 @@ struct evcnt pmap_evcnt_##name = \ EVCNT_ATTACH_STATIC(pmap_evcnt_##name) #endif /* _KERNEL */ -#endif /* _COMMON_PMAP_H_ */ +#endif /* _UVM_PMAP_PMAP_H_ */ Index: src/sys/uvm/pmap/pmap_pvt.h diff -u src/sys/uvm/pmap/pmap_pvt.h:1.1 src/sys/uvm/pmap/pmap_pvt.h:1.2 --- src/sys/uvm/pmap/pmap_pvt.h:1.1 Wed Nov 11 08:20:22 2015 +++ src/sys/uvm/pmap/pmap_pvt.h Sat Jun 24 05:31:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.h,v 1.1 2015/11/11 08:20:22 skrll Exp $ */ +/* $NetBSD: pmap_pvt.h,v 1.2 2017/06/24 05:31:03 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,8 +30,8 @@ */ -#ifndef _COMMON_PMAP_PV_H_ -#define _COMMON_PMAP_PV_H_ +#ifndef _UVM_PMAP_PMAP_PVT_H_ +#define _UVM_PMAP_PMAP_PVT_H_ #include @@ -44,4 +44,4 @@ void pmap_pv_untrack(paddr_t, psize_t); struct pmap_page *pmap_pv_tracked(paddr_t); -#endif /* _COMMON_PMAP_PV_H_ */ +#endif /* _UVM_PMAP_PMAP_PVT_H_ */ Index: src/sys/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.10 src/sys/uvm/pmap/pmap_tlb.h:1.11 --- src/sys/uvm/pmap/pmap_tlb.h:1.10 Fri May 26 06:41:42 2017 +++ src/sys/uvm/pmap/pmap_tlb.h Sat Jun 24 05:31:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.10 2017/05/26 06:41:42 skrll Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.11 2017/06/24 05:31:03 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -71,8 +71,8 @@ * @(#)pmap.h 8.1 (Berkeley) 6/10/93 */ -#ifndef _COMMON_PMAP_TLB_H_ -#define _COMMON_PMAP_TLB_H_ +#ifndef _UVM_PMAP_PMAP_TLB_H_ +#define _UVM_PMAP_PMAP_TLB_H_ #include #include @@ -179,4 +179,4 @@ void pmap_tlb_check(pmap_t, bool (*)(voi void pmap_tlb_asid_check(void); #endif /* _KERNEL */ -#endif /* _COMMON_PMAP_TLB_H_ */ +#endif /* _UVM_PMAP_PMAP_TLB_H_ */ Index: src/sys/uvm/pmap/tlb.h diff -u src/sys/uvm/pmap/tlb.h:1.3 src/sys/uvm/pmap/tlb.h:1.4 --- src/sys/uvm/pmap/tlb.h:1.3 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/tlb.h Sat Jun 24 05:31:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: tlb.h,v 1.3 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: tlb.h,v 1.4 2017/06/24 05:31:03 skrll Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -27,8 +27,8 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _UVM_PMAP_PMAP_TLB_TLB_H_ -#define _UVM_PMAP_PMAP_TLB_TLB_H_ +#ifndef _UVM_PMAP_TLB_H_ +#define _UVM_PMAP_TLB_H_ #if defined(_KERNEL) || defined(_KMEMUSER) @@ -69,4 +69,4 @@ void tlb_dump(void (*)(const char *, ... #endif /* _KERNEL || _KMEMUSER */ -#endif /* !_UVM_PMAP_PMAP_TLB_TLB_H_ */ +#endif /* _UVM_PMAP_TLB_H_ */ Index: src/sys/uvm/pmap/vmpagemd.h diff -u src/sys/uvm/pmap/vmpagemd.h:1.4 src/sys/uvm/pmap/vmpagemd.h:1.5 --- src/sys/uvm/pmap/vmpagemd.h:1.4 Wed Jun 7 07:06:26 2017 +++ src/sys/uvm/pmap/vmpagemd.h Sat Jun 24 05:31:03 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vmpagemd.h,v 1.4 2017/06/07 07:06:26 skrll Exp $ */ +/* $NetBSD: vmpagemd.h,v 1.5 2017/06/24 05:31:03 skrll Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -35,8 +35,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _COMMON_PMAP_TLB_VMPAGEMD_H_ -#define _COMMON_PMAP_TLB_VMPAGEMD_H_ +#ifndef _UVM_PMAP_VMPAGEMD_H_ +#define _UVM_PMAP_VMPAGEMD_H_ #ifdef _LOCORE #error use assym.h instead @@ -158,4 +158,4 @@ do { \ #endif /* _MODULE */ -#endif /* __COMMON_PMAP_TLB_VMPAGEMD_H_ */ +#endif /* _UVM_PMAP_VMPAGEMD_H_ */
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Jun 7 07:06:26 UTC 2017 Modified Files: src/sys/uvm/pmap: vmpagemd.h Log Message: Use __BIT(). No functional change. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/uvm/pmap/vmpagemd.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/uvm/pmap/vmpagemd.h diff -u src/sys/uvm/pmap/vmpagemd.h:1.3 src/sys/uvm/pmap/vmpagemd.h:1.4 --- src/sys/uvm/pmap/vmpagemd.h:1.3 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/vmpagemd.h Wed Jun 7 07:06:26 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: vmpagemd.h,v 1.3 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: vmpagemd.h,v 1.4 2017/06/07 07:06:26 skrll Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -65,12 +65,12 @@ typedef struct pv_entry { #ifndef _MODULE -#define VM_PAGEMD_REFERENCED 0x0001 /* page has been recently referenced */ -#define VM_PAGEMD_MODIFIED 0x0002 /* page has been modified */ -#define VM_PAGEMD_POOLPAGE 0x0004 /* page is used as a poolpage */ -#define VM_PAGEMD_EXECPAGE 0x0008 /* page is exec mapped */ +#define VM_PAGEMD_REFERENCED __BIT(0) /* page has been referenced */ +#define VM_PAGEMD_MODIFIED __BIT(1) /* page has been modified */ +#define VM_PAGEMD_POOLPAGE __BIT(2) /* page is used as a poolpage */ +#define VM_PAGEMD_EXECPAGE __BIT(3) /* page is exec mapped */ #ifdef PMAP_VIRTUAL_CACHE_ALIASES -#define VM_PAGEMD_UNCACHED 0x0010 /* page is mapped uncached */ +#define VM_PAGEMD_UNCACHED __BIT(4) /* page is mapped uncached */ #endif #ifdef PMAP_VIRTUAL_CACHE_ALIASES
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri May 26 06:41:42 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap_tlb.h Log Message: Whitespace To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.9 src/sys/uvm/pmap/pmap_tlb.h:1.10 --- src/sys/uvm/pmap/pmap_tlb.h:1.9 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/pmap_tlb.h Fri May 26 06:41:42 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.9 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.10 2017/05/26 06:41:42 skrll Exp $ */ /* * Copyright (c) 1992, 1993 @@ -115,7 +115,7 @@ struct pmap_tlb_info { #define tlbinfo_noasids_p(ti) ((ti)->ti_asids_free == 0) kmutex_t *ti_lock; u_int ti_wired; /* # of wired TLB entries */ - tlb_asid_t ti_asid_hint; /* probable next ASID to use */ + tlb_asid_t ti_asid_hint; /* probable next ASID to use */ tlb_asid_t ti_asid_max; LIST_HEAD(, pmap_asid_info) ti_pais; /* list of active ASIDs */ #ifdef MULTIPROCESSOR
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri May 26 06:40:47 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Remove incorrect __diagused To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.20 src/sys/uvm/pmap/pmap_tlb.c:1.21 --- src/sys/uvm/pmap/pmap_tlb.c:1.20 Fri May 26 06:38:56 2017 +++ src/sys/uvm/pmap/pmap_tlb.c Fri May 26 06:40:47 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.20 2017/05/26 06:38:56 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.21 2017/05/26 06:40:47 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.20 2017/05/26 06:38:56 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.21 2017/05/26 06:40:47 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -826,7 +826,7 @@ pmap_tlb_asid_alloc(struct pmap_tlb_info * a new one. */ if (__predict_true(TLBINFO_ASID_INUSE_P(ti, ti->ti_asid_hint))) { - const size_t nbpw __diagused = 8*sizeof(ti->ti_asid_bitmap[0]); + const size_t nbpw = 8 * sizeof(ti->ti_asid_bitmap[0]); size_t i; u_long bits; for (i = 0; (bits = ~ti->ti_asid_bitmap[i]) == 0; i++) {
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri May 26 06:38:56 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Use the define name PMAP_HWPAGEWALKER and not PMAP_TLB_HWPAGEWALKER To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.19 src/sys/uvm/pmap/pmap_tlb.c:1.20 --- src/sys/uvm/pmap/pmap_tlb.c:1.19 Sun Oct 9 14:51:50 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Fri May 26 06:38:56 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.19 2016/10/09 14:51:50 christos Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.20 2017/05/26 06:38:56 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.19 2016/10/09 14:51:50 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.20 2017/05/26 06:38:56 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -721,7 +721,7 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) } #endif /* MULTIPROCESSOR && PMAP_TLB_NEED_SHOOTDOWN */ -#ifndef PMAP_TLB_HWPAGEWALKER +#ifndef PMAP_HWPAGEWALKER int pmap_tlb_update_addr(pmap_t pm, vaddr_t va, pt_entry_t pte, u_int flags) { @@ -762,7 +762,7 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t return rv; } -#endif /* !PMAP_TLB_HWPAGEWALKER */ +#endif /* !PMAP_HWPAGEWALKER */ void pmap_tlb_invalidate_addr(pmap_t pm, vaddr_t va)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri May 12 12:18:37 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: KASSERT -> KASSERTMSG To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.5 src/sys/uvm/pmap/pmap_segtab.c:1.6 --- src/sys/uvm/pmap/pmap_segtab.c:1.5 Fri May 12 12:18:07 2017 +++ src/sys/uvm/pmap/pmap_segtab.c Fri May 12 12:18:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.5 2017/05/12 12:18:07 skrll Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.6 2017/05/12 12:18:37 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.5 2017/05/12 12:18:07 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.6 2017/05/12 12:18:37 skrll Exp $"); /* * Manages physical address maps. @@ -168,7 +168,8 @@ static inline pt_entry_t * pmap_segmap(struct pmap *pmap, vaddr_t va) { pmap_segtab_t *stp = pmap->pm_segtab; - KASSERT(pmap != pmap_kernel() || !pmap_md_direct_mapped_vaddr_p(va)); + KASSERTMSG(pmap != pmap_kernel() || !pmap_md_direct_mapped_vaddr_p(va), + "pmap %p va %#" PRIxVADDR, pmap, va); #ifdef _LP64 stp = stp->seg_seg[(va >> XSEGSHIFT) & (NSEGPG - 1)]; if (stp == NULL)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri May 12 12:18:07 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.4 src/sys/uvm/pmap/pmap_segtab.c:1.5 --- src/sys/uvm/pmap/pmap_segtab.c:1.4 Wed Nov 23 03:30:53 2016 +++ src/sys/uvm/pmap/pmap_segtab.c Fri May 12 12:18:07 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.4 2016/11/23 03:30:53 mrg Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.5 2017/05/12 12:18:07 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.4 2016/11/23 03:30:53 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.5 2017/05/12 12:18:07 skrll Exp $"); /* * Manages physical address maps. @@ -256,7 +256,7 @@ pmap_segtab_release(pmap_t pmap, pmap_se } if (free_stp) { - pmap_check_stp(stp, __func__, + pmap_check_stp(stp, __func__, vinc == NBSEG ? "release seg" : "release xseg"); pmap_segtab_free(stp); *stp_p = NULL;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri May 12 05:45:59 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Sprinkle some KASSERTs To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.33 src/sys/uvm/pmap/pmap.c:1.34 --- src/sys/uvm/pmap/pmap.c:1.33 Sun May 7 04:15:50 2017 +++ src/sys/uvm/pmap/pmap.c Fri May 12 05:45:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.33 2017/05/07 04:15:50 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.34 2017/05/12 05:45:58 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.33 2017/05/07 04:15:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.34 2017/05/12 05:45:58 skrll Exp $"); /* * Manages physical address maps. @@ -1738,6 +1738,8 @@ pmap_pvlist_check(struct vm_page_md *mdp || VM_PAGEMD_UNCACHED_P(mdpg), "colors=%#x uncached=%u", colors, VM_PAGEMD_UNCACHED_P(mdpg)); #endif + } else { + KASSERT(pv->pv_next == NULL); } #endif /* DEBUG */ } @@ -2102,6 +2104,7 @@ pmap_pv_page_free(struct pool *pp, void kpreempt_enable(); #endif pmap_page_clear_attributes(VM_PAGE_TO_MD(pg), VM_PAGEMD_POOLPAGE); + KASSERT(!VM_PAGEMD_EXECPAGE_P(VM_PAGE_TO_MD(pg))); uvm_pagefree(pg); } @@ -2139,7 +2142,10 @@ pmap_map_poolpage(paddr_t pa) { struct vm_page * const pg = PHYS_TO_VM_PAGE(pa); KASSERT(pg); + struct vm_page_md * const mdpg = VM_PAGE_TO_MD(pg); + KASSERT(!VM_PAGEMD_EXECPAGE_P(mdpg)); + pmap_page_set_attributes(mdpg, VM_PAGEMD_POOLPAGE); return pmap_md_map_poolpage(pa, NBPG); @@ -2153,6 +2159,8 @@ pmap_unmap_poolpage(vaddr_t va) struct vm_page * const pg = PHYS_TO_VM_PAGE(pa); KASSERT(pg != NULL); + KASSERT(!VM_PAGEMD_EXECPAGE_P(VM_PAGE_TO_MD(pg))); + pmap_page_clear_attributes(VM_PAGE_TO_MD(pg), VM_PAGEMD_POOLPAGE); pmap_md_unmap_poolpage(va, NBPG);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sun May 7 04:15:50 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Fix a comment To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.32 src/sys/uvm/pmap/pmap.c:1.33 --- src/sys/uvm/pmap/pmap.c:1.32 Fri Apr 28 17:04:33 2017 +++ src/sys/uvm/pmap/pmap.c Sun May 7 04:15:50 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.32 2017/04/28 17:04:33 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.33 2017/05/07 04:15:50 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.32 2017/04/28 17:04:33 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.33 2017/05/07 04:15:50 skrll Exp $"); /* * Manages physical address maps. @@ -973,7 +973,8 @@ pmap_page_protect(struct vm_page *pg, vm VM_PAGEMD_PVLIST_READLOCK(mdpg); pmap_pvlist_check(mdpg); /* - * Loop over all current mappings setting/clearing as apropos. + * Loop over all current mappings setting/clearing as + * appropriate. */ if (pv->pv_pmap != NULL) { while (pv != NULL) {
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri Apr 28 17:04:33 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Remove unused LNAME macro To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.31 src/sys/uvm/pmap/pmap.c:1.32 --- src/sys/uvm/pmap/pmap.c:1.31 Fri Apr 28 10:12:35 2017 +++ src/sys/uvm/pmap/pmap.c Fri Apr 28 17:04:33 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.31 2017/04/28 10:12:35 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.32 2017/04/28 17:04:33 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.31 2017/04/28 10:12:35 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.32 2017/04/28 17:04:33 skrll Exp $"); /* * Manages physical address maps. @@ -664,8 +664,6 @@ void pmap_activate(struct lwp *l) { pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap; -#define LNAME(l) \ - ((l)->l_name ? (l)->l_name : (l)->l_proc->p_comm) UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); UVMHIST_LOG(pmaphist, "(l=%p pmap=%p)", l, pmap, 0, 0);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri Apr 28 10:12:35 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Fix a UVMHIST_LOG after the "%s" removal To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.30 src/sys/uvm/pmap/pmap.c:1.31 --- src/sys/uvm/pmap/pmap.c:1.30 Sat Apr 22 20:20:19 2017 +++ src/sys/uvm/pmap/pmap.c Fri Apr 28 10:12:35 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.30 2017/04/22 20:20:19 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.31 2017/04/28 10:12:35 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.30 2017/04/22 20:20:19 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.31 2017/04/28 10:12:35 skrll Exp $"); /* * Manages physical address maps. @@ -1297,7 +1297,7 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd } else { UVMHIST_LOG(*histp, "va=%#"PRIxVADDR" pg %p: no syncicache cached %d", - va, pg, "no", pte_cached_p(npte)); + va, pg, pte_cached_p(npte), 0); } } else if (pg != NULL && (prot & VM_PROT_EXECUTE)) { KASSERT(mdpg != NULL);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Apr 22 20:20:19 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Improve a comment To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.29 src/sys/uvm/pmap/pmap.c:1.30 --- src/sys/uvm/pmap/pmap.c:1.29 Sat Apr 22 20:19:53 2017 +++ src/sys/uvm/pmap/pmap.c Sat Apr 22 20:20:19 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.29 2017/04/22 20:19:53 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.30 2017/04/22 20:20:19 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.29 2017/04/22 20:19:53 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.30 2017/04/22 20:20:19 skrll Exp $"); /* * Manages physical address maps. @@ -1732,8 +1732,8 @@ pmap_pvlist_check(struct vm_page_md *mdp #endif } #ifdef PMAP_VIRTUAL_CACHE_ALIASES - // Assert there if there more than 1 color mapped, that they - // are uncached. + // Assert that if there is more than 1 color mapped, that the + // page is uncached. KASSERTMSG(!pmap_md_virtual_cache_aliasing_p() || colors == 0 || (colors & (colors-1)) == 0 || VM_PAGEMD_UNCACHED_P(mdpg), "colors=%#x uncached=%u",
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Sat Apr 22 20:19:53 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.28 src/sys/uvm/pmap/pmap.c:1.29 --- src/sys/uvm/pmap/pmap.c:1.28 Thu Mar 2 20:11:19 2017 +++ src/sys/uvm/pmap/pmap.c Sat Apr 22 20:19:53 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.28 2017/03/02 20:11:19 mrg Exp $ */ +/* $NetBSD: pmap.c,v 1.29 2017/04/22 20:19:53 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.28 2017/03/02 20:11:19 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.29 2017/04/22 20:19:53 skrll Exp $"); /* * Manages physical address maps. @@ -502,7 +502,7 @@ pmap_steal_memory(vsize_t size, vaddr_t if (uvm_physseg_valid_p(maybe_bank)) { const uvm_physseg_t bank = maybe_bank; - + /* * There are enough pages here; steal them! */
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Thu Mar 2 20:11:19 UTC 2017 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: avoid using %s in UVMHIST. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.27 src/sys/uvm/pmap/pmap.c:1.28 --- src/sys/uvm/pmap/pmap.c:1.27 Fri Dec 23 09:16:46 2016 +++ src/sys/uvm/pmap/pmap.c Thu Mar 2 20:11:19 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.27 2016/12/23 09:16:46 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.28 2017/03/02 20:11:19 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.27 2016/12/23 09:16:46 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.28 2017/03/02 20:11:19 mrg Exp $"); /* * Manages physical address maps. @@ -668,7 +668,7 @@ pmap_activate(struct lwp *l) ((l)->l_name ? (l)->l_name : (l)->l_proc->p_comm) UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(l=%p pmap=%p (%s))", l, pmap, LNAME(l), 0); + UVMHIST_LOG(pmaphist, "(l=%p pmap=%p)", l, pmap, 0, 0); PMAP_COUNT(activate); kpreempt_disable(); @@ -680,7 +680,8 @@ pmap_activate(struct lwp *l) pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done (%u:%u)", l->l_proc->p_pid, l->l_lid, 0, 0); + UVMHIST_LOG(pmaphist, " <-- done (%u:%u)", l->l_proc->p_pid, l->l_lid, + 0, 0); } /* @@ -698,8 +699,9 @@ pmap_page_remove(struct vm_page *pg) UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmapexechist, "pg %p (pa %#"PRIxPADDR")%s: %s", - pg, VM_PAGE_TO_PHYS(pg), " [page removed]", "execpage cleared"); + UVMHIST_LOG(pmapexechist, "pg %p (pa %#"PRIxPADDR") [page removed]: " + "execpage cleared", pg, VM_PAGE_TO_PHYS(pg), + 0, 0); #ifdef PMAP_VIRTUAL_CACHE_ALIASES pmap_page_clear_attributes(mdpg, VM_PAGEMD_EXECPAGE|VM_PAGEMD_UNCACHED); #else @@ -811,7 +813,7 @@ pmap_deactivate(struct lwp *l) pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap; UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(l=%p pmap=%p (%s))", l, pmap, LNAME(l), 0); + UVMHIST_LOG(pmaphist, "(l=%p pmap=%p)", l, pmap, 0, 0); PMAP_COUNT(deactivate); kpreempt_disable(); @@ -825,7 +827,8 @@ pmap_deactivate(struct lwp *l) pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done (%u:%u)", l->l_proc->p_pid, l->l_lid, 0, 0); + UVMHIST_LOG(pmaphist, " <-- done (%u:%u)", l->l_proc->p_pid, l->l_lid, + 0, 0); } void @@ -858,8 +861,8 @@ pmap_update(struct pmap *pmap) pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done%s", - (pmap == pmap_kernel()) ? " (kernel)" : "", 0, 0, 0); + UVMHIST_LOG(pmaphist, " <-- done (%c)", + (pmap == pmap_kernel() ? 'k' : 'u'), 0, 0, 0); } /* @@ -877,8 +880,8 @@ pmap_pte_remove(pmap_t pmap, vaddr_t sva const bool is_kernel_pmap_p = (pmap == pmap_kernel()); UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%p %sva=%#"PRIxVADDR"..%#"PRIxVADDR, - pmap, (is_kernel_pmap_p ? "(kernel) " : ""), sva, eva); + UVMHIST_LOG(pmaphist, "(pmap=%p %cva=%#"PRIxVADDR"..%#"PRIxVADDR, + pmap, (is_kernel_pmap_p ? 'k' : 'u'), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%p, flags(npte)=%#"PRIxPTR")", ptep, flags, 0, 0); @@ -1017,8 +1020,8 @@ pmap_pte_protect(pmap_t pmap, vaddr_t sv const vm_prot_t prot = (flags & VM_PROT_ALL); UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pmap=%p %sva=%#"PRIxVADDR"..%#"PRIxVADDR, - pmap, (pmap == pmap_kernel() ? "(kernel) " : ""), sva, eva); + UVMHIST_LOG(pmaphist, "(pmap=%p %cva=%#"PRIxVADDR"..%#"PRIxVADDR")", + pmap, (pmap == pmap_kernel() ? 'k' : 'u'), sva, eva); UVMHIST_LOG(pmaphist, "ptep=%p, flags(npte)=%#"PRIxPTR")", ptep, flags, 0, 0); @@ -1039,9 +1042,9 @@ pmap_pte_protect(pmap_t pmap, vaddr_t sv if (VM_PAGEMD_CACHED_P(mdpg)) { #endif UVMHIST_LOG(pmapexechist, - "pg %p (pa %#"PRIxPADDR"): %s", - pg, VM_PAGE_TO_PHYS(pg), - "syncicached performed", 0); + "pg %p (pa %#"PRIxPADDR"): " + "syncicached performed", + pg, VM_PAGE_TO_PHYS(pg), 0, 0); pmap_page_syncicache(pg); PMAP_COUNT(exec_synced_protect); #ifdef PMAP_VIRTUAL_CACHE_ALIASES @@ -1108,8 +,8 @@ pmap_page_cache(struct vm_page *pg, bool struct vm_page_md * const mdpg = VM_PAGE_TO_MD(pg); UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(pg=%p (pa %#"PRIxPADDR") cached=%s)", - pg, VM_PAGE_TO_PHYS(pg), cached ? "true" : "false", 0); + UVMHIST_LOG(pmaphist, "(pg=%p (pa %#"PRIxPADDR") cached=%d)", + pg, VM_PAGE_TO_PHYS(pg), cached, 0); KASSERT
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri Dec 23 09:16:46 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: PHYSMEM -> PHYSSEG to fix build To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.26 src/sys/uvm/pmap/pmap.c:1.27 --- src/sys/uvm/pmap/pmap.c:1.26 Fri Dec 23 07:15:28 2016 +++ src/sys/uvm/pmap/pmap.c Fri Dec 23 09:16:46 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.26 2016/12/23 07:15:28 cherry Exp $ */ +/* $NetBSD: pmap.c,v 1.27 2016/12/23 09:16:46 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.26 2016/12/23 07:15:28 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.27 2016/12/23 09:16:46 skrll Exp $"); /* * Manages physical address maps. @@ -454,7 +454,7 @@ pmap_steal_memory(vsize_t size, vaddr_t paddr_t pa; vaddr_t va; - uvm_physseg_t maybe_bank = UVM_PHYSMEM_TYPE_INVALID; + uvm_physseg_t maybe_bank = UVM_PHYSSEG_TYPE_INVALID; size = round_page(size); npgs = atop(size); @@ -468,19 +468,19 @@ pmap_steal_memory(vsize_t size, vaddr_t if (uvm.page_init_done == true) panic("pmap_steal_memory: called _after_ bootstrap"); - aprint_debug("%s: seg %"PRIxPHYSMEM": %#"PRIxPADDR" %#"PRIxPADDR" %#"PRIxPADDR" %#"PRIxPADDR"\n", + aprint_debug("%s: seg %"PRIxPHYSSEG": %#"PRIxPADDR" %#"PRIxPADDR" %#"PRIxPADDR" %#"PRIxPADDR"\n", __func__, bank, uvm_physseg_get_avail_start(bank), uvm_physseg_get_start(bank), uvm_physseg_get_avail_end(bank), uvm_physseg_get_end(bank)); if (uvm_physseg_get_avail_start(bank) != uvm_physseg_get_start(bank) || uvm_physseg_get_avail_start(bank) >= uvm_physseg_get_avail_end(bank)) { - aprint_debug("%s: seg %"PRIxPHYSMEM": bad start\n", __func__, bank); + aprint_debug("%s: seg %"PRIxPHYSSEG": bad start\n", __func__, bank); continue; } if (uvm_physseg_get_avail_end(bank) - uvm_physseg_get_avail_start(bank) < npgs) { - aprint_debug("%s: seg %"PRIxPHYSMEM": too small for %zu pages\n", + aprint_debug("%s: seg %"PRIxPHYSSEG": too small for %zu pages\n", __func__, bank, npgs); continue; } @@ -502,14 +502,14 @@ pmap_steal_memory(vsize_t size, vaddr_t if (uvm_physseg_valid_p(maybe_bank)) { const uvm_physseg_t bank = maybe_bank; - + /* * There are enough pages here; steal them! */ pa = ptoa(uvm_physseg_get_start(bank)); uvm_physseg_unplug(atop(pa), npgs); - aprint_debug("%s: seg %"PRIxPHYSMEM": %zu pages stolen (%#"PRIxPADDR" left)\n", + aprint_debug("%s: seg %"PRIxPHYSSEG": %zu pages stolen (%#"PRIxPADDR" left)\n", __func__, bank, npgs, VM_PHYSMEM_SPACE(bank)); va = pmap_md_map_poolpage(pa, size);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Thu Dec 1 02:15:08 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: extend the pmap_activate/pmap_deactivate UVMHIST logs to include the pid, lid, and either l_name or p_comm. To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.24 src/sys/uvm/pmap/pmap.c:1.25 --- src/sys/uvm/pmap/pmap.c:1.24 Wed Oct 5 20:50:00 2016 +++ src/sys/uvm/pmap/pmap.c Thu Dec 1 02:15:08 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.24 2016/10/05 20:50:00 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.25 2016/12/01 02:15:08 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.24 2016/10/05 20:50:00 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.25 2016/12/01 02:15:08 mrg Exp $"); /* * Manages physical address maps. @@ -681,9 +681,11 @@ void pmap_activate(struct lwp *l) { pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap; +#define LNAME(l) \ + ((l)->l_name ? (l)->l_name : (l)->l_proc->p_comm) UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(l=%p (pmap=%p))", l, pmap, 0, 0); + UVMHIST_LOG(pmaphist, "(l=%p pmap=%p (%s))", l, pmap, LNAME(l), 0); PMAP_COUNT(activate); kpreempt_disable(); @@ -695,7 +697,7 @@ pmap_activate(struct lwp *l) pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); + UVMHIST_LOG(pmaphist, " <-- done (%u:%u)", l->l_proc->p_pid, l->l_lid, 0, 0); } /* @@ -826,7 +828,7 @@ pmap_deactivate(struct lwp *l) pmap_t pmap = l->l_proc->p_vmspace->vm_map.pmap; UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); - UVMHIST_LOG(pmaphist, "(l=%p (pmap=%p))", l, pmap, 0, 0); + UVMHIST_LOG(pmaphist, "(l=%p pmap=%p (%s))", l, pmap, LNAME(l), 0); PMAP_COUNT(deactivate); kpreempt_disable(); @@ -840,7 +842,7 @@ pmap_deactivate(struct lwp *l) pmap_md_tlb_miss_lock_exit(); kpreempt_enable(); - UVMHIST_LOG(pmaphist, " <-- done", 0, 0, 0, 0); + UVMHIST_LOG(pmaphist, " <-- done (%u:%u)", l->l_proc->p_pid, l->l_lid, 0, 0); } void
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Wed Nov 23 03:30:53 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: fix the start index generation in pmap_segtab_release() to ensure it fits in the actual array. fixes N64 binaries from triggering later panic. move the panic check itself into a common function that is called from a couple of new places too. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.3 src/sys/uvm/pmap/pmap_segtab.c:1.4 --- src/sys/uvm/pmap/pmap_segtab.c:1.3 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/pmap_segtab.c Wed Nov 23 03:30:53 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.3 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.4 2016/11/23 03:30:53 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.3 2016/07/11 16:06:09 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.4 2016/11/23 03:30:53 mrg Exp $"); /* * Manages physical address maps. @@ -130,6 +130,24 @@ struct pmap_segtab_info { kmutex_t pmap_segtab_lock __cacheline_aligned; +static void +pmap_check_stp(pmap_segtab_t *stp, const char *caller, const char *why) +{ +#ifdef DEBUG + for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) { + if (stp->seg_tab[i] != 0) { +#ifdef DEBUG_NOISY + for (size_t j = i; j < PMAP_SEGTABSIZE; j++) +printf("%s: pm_segtab.seg_tab[%zu] = 0x%p\n", + caller, j, stp->seg_tab[j]); +#endif + panic("%s: pm_segtab.seg_tab[%zu] != 0 (0x%p): %s", + caller, i, stp->seg_tab[i], why); + } + } +#endif +} + static inline struct vm_page * pmap_pte_pagealloc(void) { @@ -190,7 +208,9 @@ pmap_segtab_release(pmap_t pmap, pmap_se { pmap_segtab_t *stp = *stp_p; - for (size_t i = va / vinc; i < PMAP_SEGTABSIZE; i++, va += vinc) { + for (size_t i = (va / vinc) & (PMAP_SEGTABSIZE - 1); + i < PMAP_SEGTABSIZE; + i++, va += vinc) { #ifdef _LP64 if (vinc > NBSEG) { if (stp->seg_seg[i] != NULL) { @@ -236,6 +256,8 @@ pmap_segtab_release(pmap_t pmap, pmap_se } if (free_stp) { + pmap_check_stp(stp, __func__, + vinc == NBSEG ? "release seg" : "release xseg"); pmap_segtab_free(stp); *stp_p = NULL; } @@ -257,6 +279,7 @@ static pmap_segtab_t * pmap_segtab_alloc(void) { pmap_segtab_t *stp; + bool found_on_freelist = false; again: mutex_spin_enter(&pmap_segtab_lock); @@ -264,6 +287,7 @@ pmap_segtab_alloc(void) pmap_segtab_info.free_segtab = stp->seg_seg[0]; stp->seg_seg[0] = NULL; SEGTAB_ADD(nget, 1); + found_on_freelist = true; } mutex_spin_exit(&pmap_segtab_lock); @@ -300,12 +324,9 @@ pmap_segtab_alloc(void) } } -#ifdef DEBUG - for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) { - if (stp->seg_tab[i] != 0) - panic("%s: pm_segtab.seg_tab[%zu] != 0", __func__, i); - } -#endif + pmap_check_stp(stp, __func__, + found_on_freelist ? "from free list" : "allocated"); + return stp; } @@ -420,6 +441,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va #ifdef MULTIPROCESSOR pmap_segtab_t *ostp = atomic_cas_ptr(stp_p, NULL, nstp); if (__predict_false(ostp != NULL)) { +pmap_check_stp(nstp, __func__, "reserve"); pmap_segtab_free(nstp); nstp = ostp; }
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: christos Date: Sun Oct 9 14:51:50 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: PR/51540: Henning Petersen: replace , with ; To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.18 src/sys/uvm/pmap/pmap_tlb.c:1.19 --- src/sys/uvm/pmap/pmap_tlb.c:1.18 Sat Jul 23 16:06:25 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Sun Oct 9 10:51:50 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.18 2016/07/23 20:06:25 matt Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.19 2016/10/09 14:51:50 christos Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.18 2016/07/23 20:06:25 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.19 2016/10/09 14:51:50 christos Exp $"); /* * Manages address spaces in a TLB. @@ -338,7 +338,7 @@ pmap_tlb_info_init(struct pmap_tlb_info ti->ti_asid_hint = KERNEL_PID + 1; ti->ti_asid_max = pmap_tlbs[0]->ti_asid_max; ti->ti_asids_free = ti->ti_asid_max - KERNEL_PID; - ti->ti_tlbinvop = TLBINV_NOBODY, + ti->ti_tlbinvop = TLBINV_NOBODY; ti->ti_victim = NULL; kcpuset_create(&ti->ti_kcpuset, true); ti->ti_index = pmap_ntlbs++;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Oct 5 20:50:00 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Move some code before pmap_enter_pv in pmap_enter so that when we are re-mapping a VA to a new PA the old mapping is removed first. This means the cache alias code need to do less work and works better with the last va tracking. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.23 src/sys/uvm/pmap/pmap.c:1.24 --- src/sys/uvm/pmap/pmap.c:1.23 Fri Sep 30 12:10:40 2016 +++ src/sys/uvm/pmap/pmap.c Wed Oct 5 20:50:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.23 2016/09/30 12:10:40 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.24 2016/10/05 20:50:00 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.23 2016/09/30 12:10:40 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.24 2016/10/05 20:50:00 skrll Exp $"); /* * Manages physical address maps. @@ -1254,6 +1254,25 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd return ENOMEM; } const pt_entry_t opte = *ptep; + const bool resident = pte_valid_p(opte); + bool remap = false; + if (resident) { + if (pte_to_paddr(opte) != pa) { + KASSERT(!is_kernel_pmap_p); + const pt_entry_t rpte = pte_nv_entry(false); + + pmap_addr_range_check(pmap, va, va + NBPG, __func__); + pmap_pte_process(pmap, va, va + NBPG, pmap_pte_remove, + rpte); + PMAP_COUNT(user_mappings_changed); + remap = true; + } + update_flags |= PMAP_TLB_NEED_IPI; + } + + if (!resident || remap) { + pmap->pm_stats.resident_count++; + } /* Done after case that may sleep/return. */ if (pg) @@ -1273,20 +1292,6 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd pte_value(npte), pa, 0, 0); KASSERT(pte_valid_p(npte)); - const bool resident = pte_valid_p(opte); - bool remap = false; - if (resident) { - if (pte_to_paddr(opte) != pa) { - pmap_remove(pmap, va, va + NBPG); - PMAP_COUNT(user_mappings_changed); - remap = true; - } - update_flags |= PMAP_TLB_NEED_IPI; - } - - if (!resident || remap) { - pmap->pm_stats.resident_count++; - } pmap_md_tlb_miss_lock_enter(); *ptep = npte;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Fri Sep 30 12:10:41 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Increment resident_count if we're remapping onto new PA as pmap_remove -> pmap_pte_remote will decrement it To generate a diff of this commit: cvs rdiff -u -r1.22 -r1.23 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.22 src/sys/uvm/pmap/pmap.c:1.23 --- src/sys/uvm/pmap/pmap.c:1.22 Fri Sep 16 17:27:09 2016 +++ src/sys/uvm/pmap/pmap.c Fri Sep 30 12:10:40 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.22 2016/09/16 17:27:09 matt Exp $ */ +/* $NetBSD: pmap.c,v 1.23 2016/09/30 12:10:40 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.22 2016/09/16 17:27:09 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.23 2016/09/30 12:10:40 skrll Exp $"); /* * Manages physical address maps. @@ -1272,16 +1272,19 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd UVMHIST_LOG(*histp, "new pte %#"PRIxPTE" (pa %#"PRIxPADDR")", pte_value(npte), pa, 0, 0); - if (pte_valid_p(opte) && pte_to_paddr(opte) != pa) { - pmap_remove(pmap, va, va + NBPG); - PMAP_COUNT(user_mappings_changed); - } - KASSERT(pte_valid_p(npte)); const bool resident = pte_valid_p(opte); + bool remap = false; if (resident) { + if (pte_to_paddr(opte) != pa) { + pmap_remove(pmap, va, va + NBPG); + PMAP_COUNT(user_mappings_changed); + remap = true; + } update_flags |= PMAP_TLB_NEED_IPI; - } else { + } + + if (!resident || remap) { pmap->pm_stats.resident_count++; }
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Fri Sep 16 17:27:10 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: When removing a page, make sure to clear its execness regardless of whether the page is clean or dirty. This fixes the problem of execpages leaking into the freepage lists. To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.21 src/sys/uvm/pmap/pmap.c:1.22 --- src/sys/uvm/pmap/pmap.c:1.21 Sat Aug 20 20:09:47 2016 +++ src/sys/uvm/pmap/pmap.c Fri Sep 16 17:27:09 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.21 2016/08/20 20:09:47 mrg Exp $ */ +/* $NetBSD: pmap.c,v 1.22 2016/09/16 17:27:09 matt Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.21 2016/08/20 20:09:47 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.22 2016/09/16 17:27:09 matt Exp $"); /* * Manages physical address maps. @@ -713,6 +713,15 @@ pmap_page_remove(struct vm_page *pg) UVMHIST_FUNC(__func__); UVMHIST_CALLED(pmaphist); + UVMHIST_LOG(pmapexechist, "pg %p (pa %#"PRIxPADDR")%s: %s", + pg, VM_PAGE_TO_PHYS(pg), " [page removed]", "execpage cleared"); +#ifdef PMAP_VIRTUAL_CACHE_ALIASES + pmap_page_clear_attributes(mdpg, VM_PAGEMD_EXECPAGE|VM_PAGEMD_UNCACHED); +#else + pmap_page_clear_attributes(mdpg, VM_PAGEMD_EXECPAGE); +#endif + PMAP_COUNT(exec_uncached_remove); + pv_entry_t pv = &mdpg->mdpg_first; if (pv->pv_pmap == NULL) { VM_PAGEMD_PVLIST_UNLOCK(mdpg); @@ -800,9 +809,6 @@ pmap_page_remove(struct vm_page *pg) } } -#ifdef PMAP_VIRTUAL_CACHE_ALIASES - pmap_page_clear_attributes(mdpg, VM_PAGEMD_UNCACHED); -#endif pmap_pvlist_check(mdpg); VM_PAGEMD_PVLIST_UNLOCK(mdpg); kpreempt_enable();
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: mrg Date: Sat Aug 20 20:09:47 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: put a variable under the #ifdef it's only used in. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.20 src/sys/uvm/pmap/pmap.c:1.21 --- src/sys/uvm/pmap/pmap.c:1.20 Thu Aug 18 21:42:27 2016 +++ src/sys/uvm/pmap/pmap.c Sat Aug 20 20:09:47 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.20 2016/08/18 21:42:27 matt Exp $ */ +/* $NetBSD: pmap.c,v 1.21 2016/08/20 20:09:47 mrg Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.20 2016/08/18 21:42:27 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.21 2016/08/20 20:09:47 mrg Exp $"); /* * Manages physical address maps. @@ -1411,8 +1411,8 @@ pmap_pte_kremove(pmap_t pmap, vaddr_t sv continue; PMAP_COUNT(kremove_pages); - struct vm_page * const pg = PHYS_TO_VM_PAGE(pte_to_paddr(pte)); #ifdef PMAP_VIRTUAL_CACHE_ALIASES + struct vm_page * const pg = PHYS_TO_VM_PAGE(pte_to_paddr(pte)); if (pg != NULL && pmap_md_virtual_cache_aliasing_p()) { pmap_remove_pv(pmap, sva, pg, !pte_readonly_p(pte)); }
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Thu Aug 18 21:42:27 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Don't track kenter_pa/kremove PVs unless we are worrying about cache aliasing. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.19 src/sys/uvm/pmap/pmap.c:1.20 --- src/sys/uvm/pmap/pmap.c:1.19 Fri Aug 5 20:54:28 2016 +++ src/sys/uvm/pmap/pmap.c Thu Aug 18 21:42:27 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.19 2016/08/05 20:54:28 jakllsch Exp $ */ +/* $NetBSD: pmap.c,v 1.20 2016/08/18 21:42:27 matt Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.19 2016/08/05 20:54:28 jakllsch Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.20 2016/08/18 21:42:27 matt Exp $"); /* * Manages physical address maps. @@ -1358,7 +1358,8 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, v * No need to track non-managed pages or PMAP_KMPAGEs pages for aliases */ #ifdef PMAP_VIRTUAL_CACHE_ALIASES - if (pg != NULL && (flags & PMAP_KMPAGE) == 0) { + if (pg != NULL && (flags & PMAP_KMPAGE) == 0 + && pmap_md_virtual_cache_aliasing_p()) { pmap_enter_pv(pmap, va, pg, &npte, PV_KENTER); } #endif @@ -1411,9 +1412,11 @@ pmap_pte_kremove(pmap_t pmap, vaddr_t sv PMAP_COUNT(kremove_pages); struct vm_page * const pg = PHYS_TO_VM_PAGE(pte_to_paddr(pte)); - if (pg != NULL) { +#ifdef PMAP_VIRTUAL_CACHE_ALIASES + if (pg != NULL && pmap_md_virtual_cache_aliasing_p()) { pmap_remove_pv(pmap, sva, pg, !pte_readonly_p(pte)); } +#endif pmap_md_tlb_miss_lock_enter(); *ptep = new_pte;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: jakllsch Date: Fri Aug 5 20:54:28 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Only include `static inline pmap_asid_check()` if it might be used. Should fix HEAD-llvm evbppc autobuild. To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.18 src/sys/uvm/pmap/pmap.c:1.19 --- src/sys/uvm/pmap/pmap.c:1.18 Thu Jul 14 05:00:51 2016 +++ src/sys/uvm/pmap/pmap.c Fri Aug 5 20:54:28 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.18 2016/07/14 05:00:51 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.19 2016/08/05 20:54:28 jakllsch Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.18 2016/07/14 05:00:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.19 2016/08/05 20:54:28 jakllsch Exp $"); /* * Manages physical address maps. @@ -276,10 +276,10 @@ kmutex_t pmap_pvlist_mutex __cacheline_a * Debug functions. */ +#ifdef DEBUG static inline void pmap_asid_check(pmap_t pm, const char *func) { -#ifdef DEBUG if (!PMAP_IS_ACTIVE(pm)) return; @@ -288,8 +288,8 @@ pmap_asid_check(pmap_t pm, const char *f if (asid != pai->pai_asid) panic("%s: inconsistency for active TLB update: %u <-> %u", func, asid, pai->pai_asid); -#endif } +#endif static void pmap_addr_range_check(pmap_t pmap, vaddr_t sva, vaddr_t eva, const char *func)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Sat Jul 23 20:06:25 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Lock the tlbinfo if it wasn't when doing a pmap_tlb_pai_check To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.17 src/sys/uvm/pmap/pmap_tlb.c:1.18 --- src/sys/uvm/pmap/pmap_tlb.c:1.17 Thu Jul 14 15:50:31 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Sat Jul 23 20:06:25 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.17 2016/07/14 15:50:31 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.18 2016/07/23 20:06:25 matt Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.17 2016/07/14 15:50:31 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.18 2016/07/23 20:06:25 matt Exp $"); /* * Manages address spaces in a TLB. @@ -204,10 +204,12 @@ pmap_tlb_intersecting_onproc_p(pmap_t pm #endif static void -pmap_tlb_pai_check(struct pmap_tlb_info *ti) +pmap_tlb_pai_check(struct pmap_tlb_info *ti, bool locked_p) { #ifdef DIAGNOSTIC struct pmap_asid_info *pai; + if (!locked_p) + TLBINFO_LOCK(ti); LIST_FOREACH(pai, &ti->ti_pais, pai_link) { KASSERT(pai != NULL); KASSERT(PAI_PMAP(pai, ti) != pmap_kernel()); @@ -220,6 +222,8 @@ pmap_tlb_pai_check(struct pmap_tlb_info KASSERT(pmap_tlb_intersecting_active_p(PAI_PMAP(pai, ti), ti)); #endif } + if (!locked_p) + TLBINFO_UNLOCK(ti); #endif } @@ -412,7 +416,7 @@ pmap_tlb_asid_reinitialize(struct pmap_t UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); UVMHIST_LOG(maphist, "(ti=%p, op=%u)", ti, op, 0, 0); - pmap_tlb_pai_check(ti); + pmap_tlb_pai_check(ti, true); ti->ti_evcnt_asid_reinits.ev_count++; @@ -907,7 +911,7 @@ pmap_tlb_asid_acquire(pmap_t pm, struct TLBINFO_LOCK(ti); KASSERT(pai->pai_asid <= KERNEL_PID || pai->pai_link.le_prev != NULL); KASSERT(pai->pai_asid > KERNEL_PID || pai->pai_link.le_prev == NULL); - pmap_tlb_pai_check(ti); + pmap_tlb_pai_check(ti, true); if (__predict_false(!PMAP_PAI_ASIDVALID_P(pai, ti))) { /* * If we've run out ASIDs, reinitialize the ASID space. @@ -925,7 +929,7 @@ pmap_tlb_asid_acquire(pmap_t pm, struct pmap_tlb_asid_alloc(ti, pm, pai); UVMHIST_LOG(maphist, "allocated asid %#x", pai->pai_asid, 0, 0, 0); } - pmap_tlb_pai_check(ti); + pmap_tlb_pai_check(ti, true); #if defined(MULTIPROCESSOR) KASSERT(kcpuset_isset(pm->pm_active, cpu_index(ci))); #endif @@ -981,7 +985,7 @@ pmap_tlb_asid_deactivate(pmap_t pm) curcpu()->ci_pmap_asid_cur = KERNEL_PID; UVMHIST_LOG(maphist, " <-- done (pm=%p)", pm, 0, 0, 0); tlb_set_asid(KERNEL_PID); - pmap_tlb_pai_check(cpu_tlb_info(curcpu())); + pmap_tlb_pai_check(cpu_tlb_info(curcpu()), false); #if defined(DEBUG) pmap_tlb_asid_check(); #endif
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Jul 14 15:50:31 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Use KERNEL_PID instead of 0 To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.16 src/sys/uvm/pmap/pmap_tlb.c:1.17 --- src/sys/uvm/pmap/pmap_tlb.c:1.16 Thu Jul 14 15:49:43 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Thu Jul 14 15:50:31 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.16 2016/07/14 15:49:43 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.17 2016/07/14 15:50:31 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.16 2016/07/14 15:49:43 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.17 2016/07/14 15:50:31 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -978,7 +978,7 @@ pmap_tlb_asid_deactivate(pmap_t pm) kcpuset_atomic_clear(pm->pm_onproc, cpu_index(ci)); } #endif - curcpu()->ci_pmap_asid_cur = 0; + curcpu()->ci_pmap_asid_cur = KERNEL_PID; UVMHIST_LOG(maphist, " <-- done (pm=%p)", pm, 0, 0, 0); tlb_set_asid(KERNEL_PID); pmap_tlb_pai_check(cpu_tlb_info(curcpu()));
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Jul 14 15:49:43 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Fix some comments. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.15 src/sys/uvm/pmap/pmap_tlb.c:1.16 --- src/sys/uvm/pmap/pmap_tlb.c:1.15 Thu Jul 14 04:51:47 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Thu Jul 14 15:49:43 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.15 2016/07/14 04:51:47 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.16 2016/07/14 15:49:43 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.15 2016/07/14 04:51:47 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.16 2016/07/14 15:49:43 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -628,7 +628,7 @@ bool pmap_tlb_shootdown_bystanders(pmap_t pm) { /* - * We don't need to deal our own TLB. + * We don't need to deal with our own TLB. */ UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); @@ -1030,7 +1030,7 @@ pmap_tlb_asid_release_all(struct pmap *p #endif #else /* - * Handle the case of an UP kernel which only has, at most, one ASID. + * Handle the case of an UP kernel which only has, at most, one TLB. * If the pmap has an ASID allocated, free it. */ struct pmap_tlb_info * const ti = &pmap_tlb0_info;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Thu Jul 14 04:51:47 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c pmap_tlb.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.14 -r1.15 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.16 src/sys/uvm/pmap/pmap.c:1.17 --- src/sys/uvm/pmap/pmap.c:1.16 Mon Jul 11 19:16:03 2016 +++ src/sys/uvm/pmap/pmap.c Thu Jul 14 04:51:47 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.16 2016/07/11 19:16:03 maya Exp $ */ +/* $NetBSD: pmap.c,v 1.17 2016/07/14 04:51:47 skrll Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.16 2016/07/11 19:16:03 maya Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.17 2016/07/14 04:51:47 skrll Exp $"); /* * Manages physical address maps. @@ -491,7 +491,7 @@ pmap_steal_memory(vsize_t size, vaddr_t * amount of space left. */ #define VM_PHYSMEM_SPACE(s) ((s)->avail_end - (s)->avail_start) - if (maybe_seg == NULL + if (maybe_seg == NULL || VM_PHYSMEM_SPACE(seg) < VM_PHYSMEM_SPACE(maybe_seg)) { maybe_seg = seg; maybe_bank = bank; Index: src/sys/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.14 src/sys/uvm/pmap/pmap_tlb.c:1.15 --- src/sys/uvm/pmap/pmap_tlb.c:1.14 Tue Jul 12 15:30:46 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Thu Jul 14 04:51:47 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.14 2016/07/12 15:30:46 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.15 2016/07/14 04:51:47 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.14 2016/07/12 15:30:46 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.15 2016/07/14 04:51:47 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -775,7 +775,7 @@ pmap_tlb_invalidate_addr(pmap_t pm, vadd TLBINFO_LOCK(ti); if (pm == pmap_kernel() || PMAP_PAI_ASIDVALID_P(pai, ti)) { pmap_tlb_asid_check(); - UVMHIST_LOG(maphist, " invalidating %#"PRIxVADDR" asid %#x", + UVMHIST_LOG(maphist, " invalidating %#"PRIxVADDR" asid %#x", va, pai->pai_asid, 0, 0); tlb_invalidate_addr(va, pai->pai_asid); pmap_tlb_asid_check();
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Tue Jul 12 15:30:46 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Fix typo for build check To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.13 src/sys/uvm/pmap/pmap_tlb.c:1.14 --- src/sys/uvm/pmap/pmap_tlb.c:1.13 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/pmap_tlb.c Tue Jul 12 15:30:46 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.13 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.14 2016/07/12 15:30:46 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.13 2016/07/11 16:06:09 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.14 2016/07/12 15:30:46 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -521,7 +521,7 @@ pmap_tlb_asid_reinitialize(struct pmap_t } #if defined(MULTIPROCESSOR) && defined(PMAP_TLB_NEED_SHOOTDOWN) -#if PMAP_MAX_TLB == 1 +#if PMAP_TLB_MAX == 1 #error shootdown not required for single TLB systems #endif void
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: maya Date: Mon Jul 11 19:16:03 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Fix build by removing accidential duplicate line. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.15 src/sys/uvm/pmap/pmap.c:1.16 --- src/sys/uvm/pmap/pmap.c:1.15 Mon Jul 11 16:06:09 2016 +++ src/sys/uvm/pmap/pmap.c Mon Jul 11 19:16:03 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.15 2016/07/11 16:06:09 matt Exp $ */ +/* $NetBSD: pmap.c,v 1.16 2016/07/11 19:16:03 maya Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.15 2016/07/11 16:06:09 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.16 2016/07/11 19:16:03 maya Exp $"); /* * Manages physical address maps. @@ -1187,7 +1187,6 @@ pmap_enter(pmap_t pmap, vaddr_t va, padd "(RX)\0 " \ "(WX)\0 " \ "(RWX)\0"[UVM_PROTECTION(prot)*6] - UVMHIST_LOG(*histp, "(pmap=%p, va=%#"PRIxVADDR", pa=%#"PRIxPADDR, UVMHIST_LOG(*histp, "(pmap=%p, va=%#"PRIxVADDR", pa=%#"PRIxPADDR, pmap, va, pa, 0); UVMHIST_LOG(*histp, "prot=%#x%s flags=%#x%s)",
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Mon Jul 11 16:06:09 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap.c pmap.h pmap_segtab.c pmap_synci.c pmap_tlb.c pmap_tlb.h tlb.h vmpagemd.h Added Files: src/sys/uvm/pmap: pmap_synci.h Log Message: Changes so that MIPS can use the common pmap. Change/augment the virtual cache alias callbacks. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.6 -r1.7 src/sys/uvm/pmap/pmap.h cvs rdiff -u -r1.2 -r1.3 src/sys/uvm/pmap/pmap_segtab.c \ src/sys/uvm/pmap/pmap_synci.c src/sys/uvm/pmap/tlb.h \ src/sys/uvm/pmap/vmpagemd.h cvs rdiff -u -r0 -r1.1 src/sys/uvm/pmap/pmap_synci.h cvs rdiff -u -r1.12 -r1.13 src/sys/uvm/pmap/pmap_tlb.c cvs rdiff -u -r1.8 -r1.9 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.14 src/sys/uvm/pmap/pmap.c:1.15 --- src/sys/uvm/pmap/pmap.c:1.14 Thu Jul 7 06:55:44 2016 +++ src/sys/uvm/pmap/pmap.c Mon Jul 11 16:06:09 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.14 2016/07/07 06:55:44 msaitoh Exp $ */ +/* $NetBSD: pmap.c,v 1.15 2016/07/11 16:06:09 matt Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.14 2016/07/07 06:55:44 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.15 2016/07/11 16:06:09 matt Exp $"); /* * Manages physical address maps. @@ -102,22 +102,22 @@ __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.1 #define __PMAP_PRIVATE #include -#include -#include +#include #include +#include +#include #include #include #include #include -#include /* XXX: for sock_loan_thresh */ #include -#define PMAP_COUNT(name) (pmap_evcnt_##name.ev_count++ + 0) -#define PMAP_COUNTER(name, desc) \ -static struct evcnt pmap_evcnt_##name = \ - EVCNT_INITIALIZER(EVCNT_TYPE_MISC, NULL, "pmap", desc); \ -EVCNT_ATTACH_STATIC(pmap_evcnt_##name) +#if defined(MULTIPROCESSOR) && defined(PMAP_VIRTUAL_CACHE_ALIASES) \ +&& !defined(PMAP_NO_PV_UNCACHED) +#error PMAP_VIRTUAL_CACHE_ALIASES with MULTIPROCESSOR requires \ + PMAP_NO_PV_UNCACHED to be defined +#endif PMAP_COUNTER(remove_kernel_calls, "remove kernel calls"); PMAP_COUNTER(remove_kernel_pages, "kernel pages unmapped"); @@ -132,8 +132,6 @@ PMAP_COUNTER(prefer_requests, "prefer re PMAP_COUNTER(prefer_adjustments, "prefer adjustments"); PMAP_COUNTER(idlezeroed_pages, "pages idle zeroed"); -PMAP_COUNTER(zeroed_pages, "pages zeroed"); -PMAP_COUNTER(copied_pages, "pages copied"); PMAP_COUNTER(kenter_pa, "kernel fast mapped pages"); PMAP_COUNTER(kenter_pa_bad, "kernel fast mapped pages (bad color)"); @@ -190,20 +188,22 @@ PMAP_COUNTER(page_protect, "page_protect #define PMAP_ASID_RESERVED 0 CTASSERT(PMAP_ASID_RESERVED == 0); -/* - * Initialize the kernel pmap. - */ -#ifdef MULTIPROCESSOR -#define PMAP_SIZE offsetof(struct pmap, pm_pai[PMAP_TLB_MAX]) -#else -#define PMAP_SIZE sizeof(struct pmap) -kmutex_t pmap_pvlist_mutex __aligned(COHERENCY_UNIT); +#ifndef PMAP_SEGTAB_ALIGN +#define PMAP_SEGTAB_ALIGN /* nothing */ +#endif +#ifdef _LP64 +pmap_segtab_t pmap_kstart_segtab PMAP_SEGTAB_ALIGN; /* first mid-level segtab for kernel */ +#endif +pmap_segtab_t pmap_kern_segtab PMAP_SEGTAB_ALIGN = { /* top level segtab for kernel */ +#ifdef _LP64 + .seg_seg[(VM_MIN_KERNEL_ADDRESS & XSEGOFSET) >> SEGSHIFT] = &pmap_kstart_segtab, #endif +}; struct pmap_kernel kernel_pmap_store = { .kernel_pmap = { .pm_count = 1, - .pm_segtab = PMAP_INVALID_SEGTAB_ADDRESS, + .pm_segtab = &pmap_kern_segtab, .pm_minaddr = VM_MIN_KERNEL_ADDRESS, .pm_maxaddr = VM_MAX_KERNEL_ADDRESS, }, @@ -211,7 +211,7 @@ struct pmap_kernel kernel_pmap_store = { struct pmap * const kernel_pmap_ptr = &kernel_pmap_store.kernel_pmap; -struct pmap_limits pmap_limits = { +struct pmap_limits pmap_limits = { /* VA and PA limits */ .virtual_start = VM_MIN_KERNEL_ADDRESS, }; @@ -231,23 +231,24 @@ struct pool pmap_pv_pool; #ifndef PMAP_PV_LOWAT #define PMAP_PV_LOWAT 16 #endif -int pmap_pv_lowat = PMAP_PV_LOWAT; +int pmap_pv_lowat = PMAP_PV_LOWAT; -bool pmap_initialized = false; +bool pmap_initialized = false; #define PMAP_PAGE_COLOROK_P(a, b) \ int)(a) ^ (int)(b)) & pmap_page_colormask) == 0) -u_int pmap_page_colormask; +u_int pmap_page_colormask; -#define PAGE_IS_MANAGED(pa) \ - (pmap_initialized == true && vm_physseg_find(atop(pa), NULL) != -1) +#define PAGE_IS_MANAGED(pa) (pmap_initialized && uvm_pageismanaged(pa)) #define PMAP_IS_ACTIVE(pm) \ ((pm) == pmap_kernel() || \ (pm) == curlwp->l_proc->p_vmspace->vm_map.pmap) /* Forward function declarations */ +void pmap_page_remove(struct vm_page *); +static void pmap_pvlist_check(struct vm_page_md *); void pmap_remove_pv(pmap_t, vaddr_t, struct vm_page *, b
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: riastradh Date: Sun Feb 7 18:41:25 UTC 2016 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: Use IPL_NONE for pserialized lock. Assert sleepable. (OOPS.) To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.2 src/sys/uvm/pmap/pmap_pvt.c:1.3 --- src/sys/uvm/pmap/pmap_pvt.c:1.2 Wed Nov 11 08:22:36 2015 +++ src/sys/uvm/pmap/pmap_pvt.c Sun Feb 7 18:41:25 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.2 2015/11/11 08:22:36 skrll Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.3 2016/02/07 18:41:25 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.2 2015/11/11 08:22:36 skrll Exp $"); +__RCSID("$NetBSD: pmap_pvt.c,v 1.3 2016/02/07 18:41:25 riastradh Exp $"); #include #include @@ -66,7 +66,7 @@ void pmap_pv_init(void) { - mutex_init(&pv_unmanaged.lock, MUTEX_DEFAULT, IPL_VM); + mutex_init(&pv_unmanaged.lock, MUTEX_DEFAULT, IPL_NONE); pv_unmanaged.psz = pserialize_create(); pv_unmanaged.list = NULL; } @@ -80,6 +80,9 @@ pmap_pv_track(paddr_t start, psize_t siz KASSERT(start == trunc_page(start)); KASSERT(size == trunc_page(size)); + /* We may sleep for allocation. */ + ASSERT_SLEEPABLE(); + npages = size >> PAGE_SHIFT; pvt = kmem_zalloc(offsetof(struct pv_track, pvt_pages[npages]), KM_SLEEP); @@ -102,6 +105,9 @@ pmap_pv_untrack(paddr_t start, psize_t s KASSERT(start == trunc_page(start)); KASSERT(size == trunc_page(size)); + /* We may sleep for pserialize_perform. */ + ASSERT_SLEEPABLE(); + mutex_enter(&pv_unmanaged.lock); for (pvtp = &pv_unmanaged.list; (pvt = *pvtp) != NULL;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: skrll Date: Wed Nov 11 08:22:36 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap_pvt.c Log Message: Remove #if 0 / #endif includes To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/uvm/pmap/pmap_pvt.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/uvm/pmap/pmap_pvt.c diff -u src/sys/uvm/pmap/pmap_pvt.c:1.1 src/sys/uvm/pmap/pmap_pvt.c:1.2 --- src/sys/uvm/pmap/pmap_pvt.c:1.1 Wed Nov 11 08:20:22 2015 +++ src/sys/uvm/pmap/pmap_pvt.c Wed Nov 11 08:22:36 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_pvt.c,v 1.1 2015/11/11 08:20:22 skrll Exp $ */ +/* $NetBSD: pmap_pvt.c,v 1.2 2015/11/11 08:22:36 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,13 +30,7 @@ */ #include -__RCSID("$NetBSD: pmap_pvt.c,v 1.1 2015/11/11 08:20:22 skrll Exp $"); - -#if 0 -#include -#include -#include -#endif +__RCSID("$NetBSD: pmap_pvt.c,v 1.2 2015/11/11 08:22:36 skrll Exp $"); #include #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: pgoyette Date: Thu Nov 5 00:12:28 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Remove unnecessary #include for sys/shm.h - there's nothing here that needs anything from there. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.12 src/sys/uvm/pmap/pmap.c:1.13 --- src/sys/uvm/pmap/pmap.c:1.12 Thu Jun 11 05:27:07 2015 +++ src/sys/uvm/pmap/pmap.c Thu Nov 5 00:12:28 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.12 2015/06/11 05:27:07 matt Exp $ */ +/* $NetBSD: pmap.c,v 1.13 2015/11/05 00:12:28 pgoyette Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.12 2015/06/11 05:27:07 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.13 2015/11/05 00:12:28 pgoyette Exp $"); /* * Manages physical address maps. @@ -109,9 +109,6 @@ __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.1 #include #include #include -#ifdef SYSVSHM -#include -#endif #include /* XXX: for sock_loan_thresh */ #include
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Mon Sep 21 15:50:19 UTC 2015 Modified Files: src/sys/uvm/pmap: tlb.h Log Message: Update multiple inclusion macro To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/uvm/pmap/tlb.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/uvm/pmap/tlb.h diff -u src/sys/uvm/pmap/tlb.h:1.1 src/sys/uvm/pmap/tlb.h:1.2 --- src/sys/uvm/pmap/tlb.h:1.1 Wed Oct 3 00:51:47 2012 +++ src/sys/uvm/pmap/tlb.h Mon Sep 21 15:50:19 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: tlb.h,v 1.1 2012/10/03 00:51:47 christos Exp $ */ +/* $NetBSD: tlb.h,v 1.2 2015/09/21 15:50:19 matt Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -27,8 +27,8 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _COMMON_PMAP_TLB_TLB_H_ -#define _COMMON_PMAP_TLB_TLB_H_ +#ifndef _UVM_PMAP_PMAP_TLB_TLB_H_ +#define _UVM_PMAP_PMAP_TLB_TLB_H_ #if defined(_KERNEL) || defined(_KMEMUSER) @@ -68,4 +68,4 @@ void tlb_dump(void (*)(const char *, ... #endif /* _KERNEL || _KMEMUSER */ -#endif /* !_COMMON_PMAP_TLB_TLB_H_ */ +#endif /* !_UVM_PMAP_PMAP_TLB_TLB_H_ */
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Thu Jun 11 08:04:44 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap_segtab.c Log Message: Use PMAP_MAP_POOLPAGE instead of POOL_PHYSTOV since we use PMAP_UNMAP_POOLPAGE. Use PMAP_ALLOC_POOLPAGE instead of pmap_md_alloc_poolpage. Cleanup some panic messages. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 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/uvm/pmap/pmap_segtab.c diff -u src/sys/uvm/pmap/pmap_segtab.c:1.1 src/sys/uvm/pmap/pmap_segtab.c:1.2 --- src/sys/uvm/pmap/pmap_segtab.c:1.1 Wed Oct 3 00:51:46 2012 +++ src/sys/uvm/pmap/pmap_segtab.c Thu Jun 11 08:04:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_segtab.c,v 1.1 2012/10/03 00:51:46 christos Exp $ */ +/* $NetBSD: pmap_segtab.c,v 1.2 2015/06/11 08:04:44 matt Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.1 2012/10/03 00:51:46 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.2 2015/06/11 08:04:44 matt Exp $"); /* * Manages physical address maps. @@ -135,7 +135,7 @@ pmap_pte_pagealloc(void) { struct vm_page *pg; - pg = pmap_md_alloc_poolpage(UVM_PGA_ZERO|UVM_PGA_USERESERVE); + pg = PMAP_ALLOC_POOLPAGE(UVM_PGA_ZERO|UVM_PGA_USERESERVE); if (pg) { #ifdef UVM_PAGE_TRKOWN pg->owner_tag = NULL; @@ -216,14 +216,14 @@ pmap_segtab_release(pmap_t pmap, pmap_se } #ifdef DEBUG for (size_t j = 0; j < NPTEPG; j++) { - if (pte[j]) -panic("%s: pte entry %p not 0 (%#x)", -__func__, &pte[j], pte[j]); + if (!pte_zero_p(pte[j])) +panic("%s: pte entry %p not 0 (%#"PRIxPTE")", +__func__, &pte[j], pte_value(pte[j])); } #endif + // PMAP_UNMAP_POOLPAGE should handle any VCA issues itself paddr_t pa = PMAP_UNMAP_POOLPAGE((vaddr_t)pte); struct vm_page *pg = PHYS_TO_VM_PAGE(pa); - pmap_md_vca_clean(pg, (vaddr_t)pte, 0); #ifdef PMAP_PTP_CACHE mutex_spin_enter(&pmap_segtab_lock); LIST_INSERT_HEAD(&pmap_segtab_info.ptp_pgflist, pg, listq.list); @@ -300,10 +300,10 @@ pmap_segtab_alloc(void) } } -#ifdef PARANOIADIAG - for (i = 0; i < PMAP_SEGTABSIZE; i++) { +#ifdef DEBUG + for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) { if (stp->seg_tab[i] != 0) - panic("pmap_create: pm_segtab.seg_tab[%zu] != 0"); + panic("%s: pm_segtab.seg_tab[%zu] != 0", __func__, i); } #endif return stp; @@ -448,7 +448,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va } const paddr_t pa = VM_PAGE_TO_PHYS(pg); - pte = (pt_entry_t *)POOL_PHYSTOV(pa); + pte = (pt_entry_t *)PMAP_MAP_POOLPAGE(pa); pt_entry_t ** const pte_p = &stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]; #ifdef MULTIPROCESSOR @@ -464,6 +464,7 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va pg, listq.list); mutex_spin_exit(&pmap_segtab_lock); #else + PMAP_UNMAP_POOLPAGE((vaddr_t)pte); uvm_pagefree(pg); #endif pte = opte; @@ -473,13 +474,14 @@ pmap_pte_reserve(pmap_t pmap, vaddr_t va #endif KASSERT(pte == stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]); - pte += (va >> PGSHIFT) & (NPTEPG - 1); -#ifdef PARANOIADIAG +#ifdef DEBUG for (size_t i = 0; i < NPTEPG; i++) { - if ((pte+i)->pt_entry) -panic("pmap_enter: new segmap not empty"); + if (!pte_zero_p(pte[i])) +panic("%s: new segmap %p not empty @ %zu", +__func__, pte, i); } #endif + pte += (va >> PGSHIFT) & (NPTEPG - 1); } return pte;
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Thu Jun 11 05:28:42 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: Don't call kcpuset_intersecting_p and then kcpuset_ffs_intersecting since that the last will tell use what we need to know. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.11 src/sys/uvm/pmap/pmap_tlb.c:1.12 --- src/sys/uvm/pmap/pmap_tlb.c:1.11 Sat Apr 18 16:58:31 2015 +++ src/sys/uvm/pmap/pmap_tlb.c Thu Jun 11 05:28:42 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.11 2015/04/18 16:58:31 joerg Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.12 2015/06/11 05:28:42 matt Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.11 2015/04/18 16:58:31 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.12 2015/06/11 05:28:42 matt Exp $"); /* * Manages address spaces in a TLB. @@ -635,9 +635,10 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) struct pmap_asid_info * const pai = PMAP_PAI(pm, ti); kcpuset_remove(pm_active, ti->ti_kcpuset); TLBINFO_LOCK(ti); - if (pmap_tlb_intersecting_onproc_p(pm, ti)) { - cpuid_t j = kcpuset_ffs_intersecting(pm->pm_onproc, - ti->ti_kcpuset); + cpuid_t j = kcpuset_ffs_intersecting(pm->pm_onproc, + ti->ti_kcpuset); + // post decrement since ffs returns bit + 1 or 0 if no bit + if (j-- > 0) { if (kernel_p) { ti->ti_tlbinvop = TLBINV_KERNEL_MAP(ti->ti_tlbinvop);
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Thu Jun 11 05:27:07 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap.c pmap.h Log Message: Add virtual_start to pmap_limits. This allows MD to steal address space before pmap_bootstrap. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.4 -r1.5 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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.11 src/sys/uvm/pmap/pmap.c:1.12 --- src/sys/uvm/pmap/pmap.c:1.11 Tue Feb 3 10:25:53 2015 +++ src/sys/uvm/pmap/pmap.c Thu Jun 11 05:27:07 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.11 2015/02/03 10:25:53 nonaka Exp $ */ +/* $NetBSD: pmap.c,v 1.12 2015/06/11 05:27:07 matt Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.11 2015/02/03 10:25:53 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.12 2015/06/11 05:27:07 matt Exp $"); /* * Manages physical address maps. @@ -214,7 +214,9 @@ struct pmap_kernel kernel_pmap_store = { struct pmap * const kernel_pmap_ptr = &kernel_pmap_store.kernel_pmap; -struct pmap_limits pmap_limits; +struct pmap_limits pmap_limits = { + .virtual_start = VM_MIN_KERNEL_ADDRESS, +}; #ifdef UVMHIST static struct kern_history_ent pmapexechistbuf[1]; @@ -351,8 +353,8 @@ void pmap_virtual_space(vaddr_t *vstartp, vaddr_t *vendp) { - *vstartp = VM_MIN_KERNEL_ADDRESS; - *vendp = VM_MAX_KERNEL_ADDRESS; + *vstartp = pmap_limits.virtual_start; + *vendp = pmap_limits.virtual_end; } vaddr_t Index: src/sys/uvm/pmap/pmap.h diff -u src/sys/uvm/pmap/pmap.h:1.4 src/sys/uvm/pmap/pmap.h:1.5 --- src/sys/uvm/pmap/pmap.h:1.4 Tue Mar 18 18:20:44 2014 +++ src/sys/uvm/pmap/pmap.h Thu Jun 11 05:27:07 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.4 2014/03/18 18:20:44 riastradh Exp $ */ +/* $NetBSD: pmap.h,v 1.5 2015/06/11 05:27:07 matt Exp $ */ /* * Copyright (c) 1992, 1993 @@ -148,6 +148,7 @@ struct pmap_kernel { struct pmap_limits { paddr_t avail_start; paddr_t avail_end; + vaddr_t virtual_start; vaddr_t virtual_end; };
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: joerg Date: Sat Apr 18 16:58:31 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: pmap_tlb_intersecting_active_p is not used in some combinations of platform options as seen by recent ARM changes. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.c diff -u src/sys/uvm/pmap/pmap_tlb.c:1.10 src/sys/uvm/pmap/pmap_tlb.c:1.11 --- src/sys/uvm/pmap/pmap_tlb.c:1.10 Wed Oct 29 10:53:41 2014 +++ src/sys/uvm/pmap/pmap_tlb.c Sat Apr 18 16:58:31 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.10 2014/10/29 10:53:41 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.11 2015/04/18 16:58:31 joerg Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.10 2014/10/29 10:53:41 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.11 2015/04/18 16:58:31 joerg Exp $"); /* * Manages address spaces in a TLB. @@ -196,7 +196,7 @@ pmap_pai_check(struct pmap_tlb_info *ti) } #ifdef MULTIPROCESSOR -static inline bool +__unused static inline bool pmap_tlb_intersecting_active_p(pmap_t pm, struct pmap_tlb_info *ti) { #if PMAP_TLB_MAX == 1
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: matt Date: Thu Apr 2 06:17:52 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap_tlb.h Log Message: include To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.7 src/sys/uvm/pmap/pmap_tlb.h:1.8 --- src/sys/uvm/pmap/pmap_tlb.h:1.7 Mon Jan 5 05:35:18 2015 +++ src/sys/uvm/pmap/pmap_tlb.h Thu Apr 2 06:17:52 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.7 2015/01/05 05:35:18 nonaka Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.8 2015/04/02 06:17:52 matt Exp $ */ /* * Copyright (c) 1992, 1993 @@ -74,6 +74,7 @@ #ifndef _COMMON_PMAP_TLB_H_ #define _COMMON_PMAP_TLB_H_ +#include #include #if !defined(PMAP_TLB_MAX)
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: nonaka Date: Tue Feb 3 10:25:53 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: Disable pmap_md_tlb_check_entry, when MP. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.10 src/sys/uvm/pmap/pmap.c:1.11 --- src/sys/uvm/pmap/pmap.c:1.10 Mon Jan 26 04:47:53 2015 +++ src/sys/uvm/pmap/pmap.c Tue Feb 3 10:25:53 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.10 2015/01/26 04:47:53 nonaka Exp $ */ +/* $NetBSD: pmap.c,v 1.11 2015/02/03 10:25:53 nonaka Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.10 2015/01/26 04:47:53 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.11 2015/02/03 10:25:53 nonaka Exp $"); /* * Manages physical address maps. @@ -641,7 +641,7 @@ pmap_update(struct pmap *pmap) PMAP_COUNT(shootdown_ipis); #endif pmap_md_tlb_miss_lock_enter(); -#ifdef DEBUG +#if defined(DEBUG) && !defined(MULTIPROCESSOR) pmap_tlb_check(pmap, pmap_md_tlb_check_entry); #endif /* DEBUG */
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: nonaka Date: Mon Jan 5 05:35:19 UTC 2015 Modified Files: src/sys/uvm/pmap: pmap.c pmap_tlb.h Log Message: Use PMAP_TLB_MAX instead of MAXCPUS. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/uvm/pmap/pmap.c cvs rdiff -u -r1.6 -r1.7 src/sys/uvm/pmap/pmap_tlb.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/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.8 src/sys/uvm/pmap/pmap.c:1.9 --- src/sys/uvm/pmap/pmap.c:1.8 Thu Dec 25 08:11:09 2014 +++ src/sys/uvm/pmap/pmap.c Mon Jan 5 05:35:18 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.8 2014/12/25 08:11:09 nonaka Exp $ */ +/* $NetBSD: pmap.c,v 1.9 2015/01/05 05:35:18 nonaka Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.8 2014/12/25 08:11:09 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.9 2015/01/05 05:35:18 nonaka Exp $"); /* * Manages physical address maps. @@ -197,7 +197,7 @@ CTASSERT(PMAP_ASID_RESERVED == 0); * Initialize the kernel pmap. */ #ifdef MULTIPROCESSOR -#define PMAP_SIZE offsetof(struct pmap, pm_pai[MAXCPUS]) +#define PMAP_SIZE offsetof(struct pmap, pm_pai[PMAP_TLB_MAX]) #else #define PMAP_SIZE sizeof(struct pmap) kmutex_t pmap_pvlist_mutex __aligned(COHERENCY_UNIT); Index: src/sys/uvm/pmap/pmap_tlb.h diff -u src/sys/uvm/pmap/pmap_tlb.h:1.6 src/sys/uvm/pmap/pmap_tlb.h:1.7 --- src/sys/uvm/pmap/pmap_tlb.h:1.6 Thu Apr 3 14:46:25 2014 +++ src/sys/uvm/pmap/pmap_tlb.h Mon Jan 5 05:35:18 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.h,v 1.6 2014/04/03 14:46:25 matt Exp $ */ +/* $NetBSD: pmap_tlb.h,v 1.7 2015/01/05 05:35:18 nonaka Exp $ */ /* * Copyright (c) 1992, 1993 @@ -144,7 +144,7 @@ struct pmap_tlb_info { #ifdef _KERNEL extern struct pmap_tlb_info pmap_tlb0_info; #ifdef MULTIPROCESSOR -extern struct pmap_tlb_info *pmap_tlbs[MAXCPUS]; +extern struct pmap_tlb_info *pmap_tlbs[PMAP_TLB_MAX]; extern u_int pmap_ntlbs; #endif
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: nonaka Date: Thu Dec 25 08:11:09 UTC 2014 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: fix build failure when UVMHIST is defined. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.7 src/sys/uvm/pmap/pmap.c:1.8 --- src/sys/uvm/pmap/pmap.c:1.7 Wed Dec 24 04:03:02 2014 +++ src/sys/uvm/pmap/pmap.c Thu Dec 25 08:11:09 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.7 2014/12/24 04:03:02 nonaka Exp $ */ +/* $NetBSD: pmap.c,v 1.8 2014/12/25 08:11:09 nonaka Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.7 2014/12/24 04:03:02 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.8 2014/12/25 08:11:09 nonaka Exp $"); /* * Manages physical address maps. @@ -219,6 +219,8 @@ struct pmap_limits pmap_limits; #ifdef UVMHIST static struct kern_history_ent pmapexechistbuf[1]; static struct kern_history_ent pmaphistbuf[1]; +UVMHIST_DEFINE(pmapexechist); +UVMHIST_DEFINE(pmaphist); #endif /*
CVS commit: src/sys/uvm/pmap
Module Name:src Committed By: nonaka Date: Wed Dec 24 04:03:02 UTC 2014 Modified Files: src/sys/uvm/pmap: pmap.c Log Message: fix compile failure. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 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/sys/uvm/pmap/pmap.c diff -u src/sys/uvm/pmap/pmap.c:1.6 src/sys/uvm/pmap/pmap.c:1.7 --- src/sys/uvm/pmap/pmap.c:1.6 Mon Dec 22 11:11:34 2014 +++ src/sys/uvm/pmap/pmap.c Wed Dec 24 04:03:02 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.6 2014/12/22 11:11:34 nonaka Exp $ */ +/* $NetBSD: pmap.c,v 1.7 2014/12/24 04:03:02 nonaka Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.6 2014/12/22 11:11:34 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.7 2014/12/24 04:03:02 nonaka Exp $"); /* * Manages physical address maps. @@ -543,8 +543,8 @@ pmap_destroy(pmap_t pmap) pmap_segtab_destroy(pmap, NULL, 0); #ifdef MULTIPROCESSOR - kcpuset_destroy(&pmap->pm_active); - kcpuset_destroy(&pmap->pm_onproc); + kcpuset_destroy(pmap->pm_active); + kcpuset_destroy(pmap->pm_onproc); #endif pool_put(&pmap_pmap_pool, pmap);