Module Name: src Committed By: skrll Date: Sat Apr 22 10:22:43 UTC 2023
Modified Files: src/sys/uvm/pmap: pmap_tlb.c Log Message: KASSERT(kpreempt_disabled()) before accessing curcpu() To generate a diff of this commit: cvs rdiff -u -r1.56 -r1.57 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.56 src/sys/uvm/pmap/pmap_tlb.c:1.57 --- src/sys/uvm/pmap/pmap_tlb.c:1.56 Sun Feb 19 07:20:44 2023 +++ src/sys/uvm/pmap/pmap_tlb.c Sat Apr 22 10:22:43 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_tlb.c,v 1.56 2023/02/19 07:20:44 skrll Exp $ */ +/* $NetBSD: pmap_tlb.c,v 1.57 2023/04/22 10:22:43 skrll Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.56 2023/02/19 07:20:44 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.57 2023/04/22 10:22:43 skrll Exp $"); /* * Manages address spaces in a TLB. @@ -655,7 +655,10 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) UVMHIST_FUNC(__func__); UVMHIST_CALLARGS(maphist, "pm %#jx", (uintptr_t)pm, 0, 0, 0); + KASSERT(kpreempt_disabled()); + const struct cpu_info * const ci = curcpu(); + kcpuset_t *pm_active = ci->ci_shootdowncpus; kcpuset_copy(pm_active, pm->pm_active); kcpuset_remove(pm_active, cpu_tlb_info(curcpu())->ti_kcpuset); @@ -745,6 +748,8 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) int pmap_tlb_update_addr(pmap_t pm, vaddr_t va, pt_entry_t pte, u_int flags) { + KASSERT(kpreempt_disabled()); + struct pmap_tlb_info * const ti = cpu_tlb_info(curcpu()); struct pmap_asid_info * const pai = PMAP_PAI(pm, ti); int rv = -1; @@ -753,8 +758,6 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t UVMHIST_CALLARGS(maphist, " (pm=%#jx va=%#jx, pte=%#jx flags=%#jx)", (uintptr_t)pm, va, pte_value(pte), flags); - KASSERT(kpreempt_disabled()); - KASSERTMSG(pte_valid_p(pte), "va %#"PRIxVADDR" %#"PRIxPTE, va, pte_value(pte)); @@ -785,6 +788,8 @@ pmap_tlb_update_addr(pmap_t pm, vaddr_t void pmap_tlb_invalidate_addr(pmap_t pm, vaddr_t va) { + KASSERT(kpreempt_disabled()); + struct pmap_tlb_info * const ti = cpu_tlb_info(curcpu()); struct pmap_asid_info * const pai = PMAP_PAI(pm, ti); @@ -792,8 +797,6 @@ pmap_tlb_invalidate_addr(pmap_t pm, vadd UVMHIST_CALLARGS(maphist, " (pm=%#jx va=%#jx) ti=%#jx asid=%#jx", (uintptr_t)pm, va, (uintptr_t)ti, pai->pai_asid); - KASSERT(kpreempt_disabled()); - TLBINFO_LOCK(ti); if (pm == pmap_kernel() || PMAP_PAI_ASIDVALID_P(pai, ti)) { pmap_tlb_asid_check(); @@ -908,6 +911,8 @@ pmap_tlb_asid_alloc(struct pmap_tlb_info void pmap_tlb_asid_acquire(pmap_t pm, struct lwp *l) { + KASSERT(kpreempt_disabled()); + struct cpu_info * const ci = l->l_cpu; struct pmap_tlb_info * const ti = cpu_tlb_info(ci); struct pmap_asid_info * const pai = PMAP_PAI(pm, ti); @@ -916,8 +921,6 @@ pmap_tlb_asid_acquire(pmap_t pm, struct UVMHIST_CALLARGS(maphist, "(pm=%#jx, l=%#jx, ti=%#jx)", (uintptr_t)pm, (uintptr_t)l, (uintptr_t)ti, 0); - KASSERT(kpreempt_disabled()); - /* * Kernels use a fixed ASID and thus doesn't need to acquire one. */