Driver/スリープの基本

Last-modified: 2007-10-11 (木) 11:04:00

スリープのルール

- スリープをさせてはいけないタイミングがある
- スリープの最中に外で何があったかは仮定できない
- スリープを誰が起こしてくれるのかを確認する

1. スリープをさせてはいけないタイミング

アトミックなコンテクストの実行中
割り込みを無効にしているとき

2. スリープの最中に何があったかは仮定できない

すべての待っていた条件(起きる条件)は起きた時点でチェックすること

3. スリープを誰が起こしてくれるのかを確認する

誰も起こしてくれなければ寝たまま

スリープの手順
1. 待ち列の初期化

DECLARE_WAIT_QUEUE_HEAD(name);

2. スリープ

wait_event_xxx(上記で指定した待ち列)

3. 起床

wake_up(上記で指定した待ち列)