[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: options DIAGNOSTIC



> > iMac DV で 1.5H ですが,単純に
> > #options         DIAGNOSTIC      # cheap kernel consistency checks
> > とコメントアウトして作ったものについては特に問題ありませんでした.
> 
> 了解です。書き忘れてましたがこちらは 1.5_BETA で
> さらに serial console です。なのでもう少し条件を
> 絞り込んでみます。

すいません、どうも DIAGNOSTIC が悪いと思ったのは勘違いで
私の書き換えた pmap.c が悪かったようです。失礼しました。

で、本題というか原因の pmap structures に pool(9) を
使うようにする件ですが、他の arch のように単純に
pmap_init() で pool_init() して malloc()/free() を
pool_get()/pool_put() に置き換えただけなんですが、
これでは上記のとおり macppc ではダメなようです。

対策としては pool_init() の位置を変えるくらいしか
思いつかないんですが、 powerpc 特有の事情って
なにかあるんでしょうか。
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp

--- pmap.c.orig	Sat Oct 28 02:52:12 2000
+++ pmap.c	Sun Oct 29 06:18:21 2000
@@ -33,6 +33,7 @@
 
 #include <sys/param.h>
 #include <sys/malloc.h>
+#include <sys/pool.h>
 #include <sys/proc.h>
 #include <sys/user.h>
 #include <sys/queue.h>
@@ -125,6 +126,8 @@
 
 static int pmap_initialized;
 
+struct pool	pmap_pmap_pool;		/* memory pool for pmap structures */
+
 /*
  * These small routines may have to be replaced,
  * if/when we support processors other that the 604.
@@ -572,6 +575,12 @@
 		attr += sz;
 	}
 
+	/*
+	 * Initialize the pmap pool.
+	 */
+	pool_init(&pmap_pmap_pool, sizeof(struct pmap), 0, 0, 0, "pmappl",
+	    0, pool_page_alloc_nointr, pool_page_free_nointr, M_VMPMAP);
+
 	pmap_initialized = 1;
 	splx(s);
 }
@@ -598,7 +607,7 @@
 {
 	struct pmap *pm;
 	
-	pm = (struct pmap *)malloc(sizeof *pm, M_VMPMAP, M_WAITOK);
+	pm = pool_get(&pmap_pmap_pool, PR_WAITOK);
 	bzero((caddr_t)pm, sizeof *pm);
 	pmap_pinit(pm);
 	return pm;
@@ -649,7 +658,7 @@
 {
 	if (--pm->pm_refs == 0) {
 		pmap_release(pm);
-		free((caddr_t)pm, M_VMPMAP);
+		pool_put(&pmap_pmap_pool, pm);
 	}
 }