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

Re: [Tohru Nishimura: CVS commit: syssrc]



"TAKEMURA Shin" <takemura@netbsd.org> writes:
> でも、その 2 つの手続きは、'invalidate TLB entry' です。
> 一見問題なさそうなのに、ヘンですね。

私も実は問題がないのかなと思ったこともあったのですが、実際にはそうではあ
りませんでした。

> どこかで PG_MASK を設定し忘れているのですね。

pagemaskレジスタを設定せずにTLBに書き込んでいるのはmips3_TLBMiss()や
mips3_TLBMissException()です。

したがって、mips3_TBIAP()が呼ばれた後に、mips3_TLBUpdate()などでpagemask
レジスタが再設定される前にTLB missが発生するとTLBのpagemaskに不正な値が
書き込まれます。

pagemaskレジスタの初期化についてですが、異なるページサイズを混在させたり
しない限り、初期化後は二度と変更する必要はありません。pagemaskレジスタは、
明示的に書き込むか、あるいはtlbr命令でTLBの内容を読み出したりしない限り、
勝手に書き変わったりはしないからです。

したがって、CPUの種類(R4000, VR4100, etc.)に応じて適切な値で初期化した後、
TLBのエントリ全部を初期化すれば十分です。

篠原