http://www.linuxjournal.com/article/8144を読んで、次の状況について考えています。
4253 /* Wait for kthread_stop */
4254 set_current_state(TASK_INTERRUPTIBLE);
4255 while (!kthread_should_stop()) {
4256 schedule();
4257 set_current_state(TASK_INTERRUPTIBLE);
4258 }
4259 set_current_state(TASK_RUNNING);
4260 return 0;
では、プロセスをスリープ状態に設定する 4254 行目の直前に kthread_stop が呼び出され、その行の直後に実際にプリエンプト/スケジュールが設定され、プロセスも実際にスリープ状態に移行した場合はどうなるでしょうか。
この場合、ウェイクアップ コールは状態を変更する直前に受信され (したがって影響はありません)、オペレーティング システムの通常の動作では、実際に何かを確認する前にスリープ状態になります。
おそらく、次の 2 つのオプションのいずれかが欠けていると思います。 set_current_state 呼び出しの後、schedule() 呼び出しの前。
ご協力ありがとうございます。