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);
 	}
 

Reply via email to