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

[pbsd-mg2] Re: yet another virtual alias problem?



Takao Shinohara <shin@sm.sony.co.jp> writes:
> 
> virtual aliasが原因で誤動作していると思しき現象を見つけました。

> physio()の中でvmapbuf()を使ってユーザプロセスのアドレス空間に対応してい
> る物理ページをカーネル仮想空間にマップしているようなのですが、この時に
> virtual aliasに対する配慮がなされていないように思います。

もう少し良くソースを読んでみたのですが、問題の根はもっと深そうです。

vmapbuf()でカーネル空間にユーザプロセスの物理ページをマップする場合でも、
最終的にはpmap_enter()からpmap_enter_pv()が呼ばれてvirtual aliasのチェッ
クとその対処がなされているように見えます。

ところで、pmap_enter_pv()のvirtual aliasのチェックですが、以前修正したよ
うに、mips_CacheAliasMaskの計算式が間違っていて、virtual alias対策は絶対
に実行されないようになっていました。つまり、virtual alias対策はこれまで
テストされたことがなかったということです。

テストされたことのないコードが正しいことはあまり期待できませんが、実際、
cacheの処理を間違っているように思います。

もう少し詳しく調べて、テストプログラムを作って検証してみるつもりです。

篠原