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

Re: CASSIOPEIA report



鈴木(康)です。
<200005160511.OAA02078@ninja.hpc.bs1.fc.nec.co.jp>の記事において
suz@hpc.bs1.fc.nec.co.jpさんは書きました。


  | 割り込みエントリの vrpmu_intr() から直接 call 関係で処理が
  | 続いていくみたいですね。(config_hook_call() も含めて)
  | 
  | ということは、この間ずっと、ハイレベルな割り込み処理として実行されますね。
  | このレベルでは、sleep することはもとより 同種の割り込みが入るように
  | マスクを開く(eni ?) こともまずそうです。
  | 
  | このレベルでも printf はできるようなので、同じようにして
  | 割り込み処理を一旦 抜けてから、(キューイングされた)実際の処理を行う
  | という構造を導入しないといけないと思います。
  | 
  | 切口としては、やっぱり config_hook_call ではないでしょうか?

ちょっと考えてみたんですが、やっぱり サスペンド/リジュームを
おこなうレベルは、ドライバの probe などを行うのと同じレベルでないと
いけなさそうです。(= sleep ができるレベル)

ということは、割り込み処理じゃなくて カーネルスレッドで動くように
なっていないといけない。

callout は割り込み処理 と同じレベルで動くので、
pcmcia のカーネルスレッドのような実装じゃないといけないんではない
でしょうか?

# もしくは、btnデーモン にいったんイベントを渡して、そこから機能を
# 呼び出す形? 

----

callout をちょっと見ましたが、次のような構造みたいです。

kern_clock.c の hardclock() から setsoftclock() を呼び出し、
低レベルの ソフトウェア割り込みを登録する。(最適化が入っていて
直接呼び出すこともできる。)

本来どうあるべきかということはおいておいて...

config_hook_call が、 低レベルの ソフトウェア割り込みから呼ばれるような
構造をいれるだけで、実験はできそうな気がします。


--
					鈴木 康司 @NECソリューションズ
					suz@hpc.bs1.fc.nec.co.jp
					TEL 042-333-6465