[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 をコンパイルできました。
# エラーにはならなかったという意味。