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

Re: NetBSD/powerpc pmap.c



>pa_to_attr()内の DIAGNOSTIC blockを削るというのはどうでしょう。

やっぱりそれが素直でしょうかねえ…。ここの panic で(通常は)落ちた
ことはないので、もうなくてもいいかもしれません。

> > 原理的には pa_to_attr(pa) の直前に
> > 	if (vm_physseg_find(atop(pa), NULL) == -1)
> > 		return;

ここ調べたいことは pa が実メモリーかどうか(正確には managed か)で、
思想としては直後の pa_to_attr とは独立の話です。alpha では

#define	PAGE_IS_MANAGED(pa)	(vm_physseg_find(atop(pa), NULL) != -1)

なんて定義があります。さらに 

pa_to_pvh(pa)
	paddr_t pa;
{
	int bank, pg;

	bank = vm_physseg_find(atop(pa), &pg);
	return (&vm_physmem[bank].pmseg.pvhead[pg]);
}

こうなっていて、vm_physseg_find が -1 を返すときは呼んではいけない
ことになっています。つまり managed であることを確認してから
pa_to_*() するのが正しいと。でもやっぱり明らかなムダは嫌だ。:-)
で悩んでいるわけです。

しかし、見直してみると if (pa_to_pv() == NULL) があちこちにあり
ますね。ってことはここだけ拘ってもしかたがないってことですね。
じゃあ panic() を削りましょうか。

P.S.
  egcs-1.1 ではちゃんと X11 をコンパイルできました。
  # エラーにはならなかったという意味。