[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CASSIOPEIA report
鈴木(康)です。
<200005160203.LAA01822@ninja.hpc.bs1.fc.nec.co.jp>の記事において
suz@hpc.bs1.fc.nec.co.jpさんは書きました。
| | > | 肝心のサスペンドの実験は、なんだかうまくいっていません。
| | > |
| | > | vrpmu.c で 次のようにしてみたんですが、
| | > | power ボタン押したら、それでハングアップするみたい。
| |
| | cpu_reset() のコードはちゃんと動作しているので、違いといえば、
| | power ボタンを押した時に実行されるコードは割り込みルーチンで
| | あるということです。
| | すでに割り込みが禁止されている状態で suspend してしまって、
| | 戻れなくなっているのではないでしょうか。
| | コプロセッサの割り込みマスクレジスタの値を調べてみて下さい。
|
| あ、なるほど...
| 了解です。
|
|
| | #Windows NT ならこんな時 DPC を使うんですが、
| | #NetBSD なら callout_ を使えばいいっすか?(だめっすか?)
ソースを追ってみましたが、
割り込みエントリの vrpmu_intr() から直接 call 関係で処理が
続いていくみたいですね。(config_hook_call() も含めて)
ということは、この間ずっと、ハイレベルな割り込み処理として実行されますね。
このレベルでは、sleep することはもとより 同種の割り込みが入るように
マスクを開く(eni ?) こともまずそうです。
このレベルでも printf はできるようなので、同じようにして
割り込み処理を一旦 抜けてから、(キューイングされた)実際の処理を行う
という構造を導入しないといけないと思います。
切口としては、やっぱり config_hook_call ではないでしょうか?
--
鈴木 康司 @NECソリューションズ
suz@hpc.bs1.fc.nec.co.jp
TEL 042-333-6465