[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Cross compile (gcc-2.95.2 & binutils-2.9.1)
> 最初、port-mipsのソースと同じようにして、vr_intrに入れたんですが、ど
> うもVRがやばい感じがしたので、あまり変更せずに旧来のtrap.cと同様の構成
> にしておきました。
なるほど。arc も、とりあえずは そうしておこうかな…
旧来の trap.c も全然問題なかったわけではなくて、たぶん、次のような点を
直す必要があるんじゃないかと思ってます。ただ、ハングアップを起こすほど
critical な問題ではないと思うんですよね…
・hardclock() を呼ぶ前に SR_INT_IE ビットを立てる必要があるのに、
やってない。このため、hardclock() の中での spllowersoftclock() が正
しく動かず、 割り込み禁止の状態で softclock() が走る可能性がある。
→ 割り込みが無駄に遅延する。時計が遅れる?
・MIPS3_CLKF_BASEPRI() が、timer interrupt を抑制している MIPS3 プラッ
トフォームでは正しく動かない。MIPS_INT_MASK を MIPS3_HARD_INT_MASK
に変更してやると、(ちょっと tricky だけど) 動くようになる筈。
→ hardclock() の中から直接 softclock() を呼び出す最適化が
うまく動かず、ちょっと遅くなる。ただし、上の SR_INT_IE の
問題があるので、現状では、このバグのおかげで、かえって
時計が遅れる可能性が減っている...
・(mask & INT_MASK_REAL_DEV) == 0 の場合に、_splset() が行われない
ために、割り込み禁止の状態で softnet() と softclock() が走る。
→ 割り込みが無駄に遅延する。時計が遅れる?
・「isr = netisr; netisr = 0;」は splnet() で保護しないと、
race condition の危険がある。また、clearsoftnet(); は、この行の前に
持ってこないと、同じく race condition の危険がある。
→ softnet() ソフトウェア割り込みを落とす。
・「sisr = softisr; softisr = 0;」も同じく、softisr を設定する割り込み
ハンドラに対応する spl××() で保護する必要がある。
→ (*mips_software_interrtupt)() ソフトウェア割り込みを落とす。
(これらの問題は、interrupt → cpu_intr の変更後でも、残ってます。)
あと、下記は 3 月末のソースでの話です。
最近のソースは、まだ試してません。
>>> # arc で出ているハングアップは、タイミングに依存しているようで、
>>> # マルチユーザーモードで数分〜数十分くらい使ってないと起きません。
--
soda@pending 事項が溜りすぎ…