[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:102136] Re: 組込Linuxドライバの作成方法


川辺と申します。

# また、オフトピ気味。

>>>>> "Naoto" == Naoto Shimazaki <igy@xxxxxxxx> writes:

Naoto> interruptible_sleep_on() を、任意の割り込み禁止レベルで
Naoto> 呼び出して良い仕様にすれば良かっただけのことなんです。
Naoto> つーか BSD の tsleep() はそうだし。

それって、schedule()の中でspin_lock_irq()/spin_unlock_irq()してるとこ
ろをspin_lock_irqsave()/spin_unlock_irqrestore()に変えて、コンテキスト
スイッチの前後(same taskでも)save_flags()とrestore_flags()をする様に改
造する必要があるわけですよね。

ただ、それだけでは色々と問題があるんでしょうね。

なんで、Linuxって抽象化されてる気がしない生のsti()やらcli()なのかしら
と疑問に思うところがありました。それに、save_flags(); cli();と
restore_flags()として使わせるのもださいとは思います。
後、cli()やsti()って設定するだけで前の状態無視ってのも、どうかと思いま
す。

昔のBSD(最近の観てないので ....)やUnixって、割り込みの制御って splXX()
とsplx()でしたよね。

x86にはCPUの中での割り込みレベルなんて無かったとは言え、以降に多種のアー
キに移植された際に割り込みレベルの概念は入れる必要が無いと思われたんで
すかねぇ。確かに、ほとんどの局面では、splhi()しかいらなかったけど、非
常に稀にspl3()だとかspl6()だとか使うと有効だったんですけどね。応答性能
とか考えるときこういう制御が可能かどうかは重要だと思うのですが。

Naoto> いまさら変えられないんでマクロなんか使うハメになったのでしょう。

まぁ、今変更すると影響範囲が予測不能になりそうですからね。

でも、2.2.x/2.4.x/2.6.xで schedule() 辺りってかなり変わっている(まぁ、
O(1)スケジューラやら、SMP対応やら当たり前ですけど)気がします。今後大き
くメスが入ってもいい気がします。
--------
  Kawabe,Yoshihiro <ripula@xxxxxxxxxxxxxxx>
  Who is calling me from where?
  Knock on my shell and my mind? from Pearl song.

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: