Module Name: src Committed By: skrll Date: Tue Apr 22 14:00:45 UTC 2014
Modified Files: src/sys/arch/arm/arm32: pmap.c Log Message: Call pmap_free_l2_bucket for the kernel pmap so that l2b_occupancy is updated. pmap_free_l2_bucket already deals with the kernel pmap properly. ok matt@ Should fix the panic: kernel debugging assertion "mappings <= l2b->l2b_occupancy" failed: file "/usr/src/sys/arch/arm/arm32/pmap.c", line 3838 problem reported on port-arm by Joachim Thiemann To generate a diff of this commit: cvs rdiff -u -r1.289 -r1.290 src/sys/arch/arm/arm32/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/arch/arm/arm32/pmap.c diff -u src/sys/arch/arm/arm32/pmap.c:1.289 src/sys/arch/arm/arm32/pmap.c:1.290 --- src/sys/arch/arm/arm32/pmap.c:1.289 Tue Apr 22 12:13:09 2014 +++ src/sys/arch/arm/arm32/pmap.c Tue Apr 22 14:00:45 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.289 2014/04/22 12:13:09 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.290 2014/04/22 14:00:45 skrll Exp $ */ /* * Copyright 2003 Wasabi Systems, Inc. @@ -216,7 +216,7 @@ #include <arm/locore.h> //#include <arm/arm32/katelib.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.289 2014/04/22 12:13:09 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.290 2014/04/22 14:00:45 skrll Exp $"); //#define PMAP_DEBUG #ifdef PMAP_DEBUG @@ -1582,7 +1582,6 @@ pmap_alloc_l2_bucket(pmap_t pm, vaddr_t static void pmap_free_l2_bucket(pmap_t pm, struct l2_bucket *l2b, u_int count) { - KASSERT(pm != pmap_kernel()); KDASSERT(count <= l2b->l2b_occupancy); /* @@ -2918,9 +2917,7 @@ pmap_page_remove(struct vm_page_md *md, */ l2pte_reset(ptep); PTE_SYNC_CURRENT(pm, ptep); - if (pm != pmap_kernel()) { - pmap_free_l2_bucket(pm, l2b, PAGE_SIZE / L2_S_SIZE); - } + pmap_free_l2_bucket(pm, l2b, PAGE_SIZE / L2_S_SIZE); pmap_release_pmap_lock(pm); pool_put(&pmap_pv_pool, pv); @@ -3226,8 +3223,7 @@ pmap_enter(pmap_t pm, vaddr_t va, paddr_ panic("pmap_enter: " "no pv entries"); - if (pm != pmap_kernel()) - pmap_free_l2_bucket(pm, l2b, 0); + pmap_free_l2_bucket(pm, l2b, 0); /* XXX Why? */ UVMHIST_LOG(maphist, " <-- done (ENOMEM)", 0, 0, 0, 0); return (ENOMEM); @@ -3581,8 +3577,8 @@ pmap_remove(pmap_t pm, vaddr_t sva, vadd } } - if (pm != pmap_kernel()) - pmap_free_l2_bucket(pm, l2b, mappings); + + pmap_free_l2_bucket(pm, l2b, mappings); pm->pm_stats.resident_count -= mappings / (PAGE_SIZE/L2_S_SIZE); }