[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 事項が溜りすぎ…