*参照元 [#v825bc70] #backlinks *説明 [#u521d1fc] -パス: [[linux-2.6.33/kernel/workqueue.c]] -ワークキューの仕事を処理するカーネルスレッドの main 関数。 **引数 [#af311ac9] -void *__cwq --create_workqueue_thread() により、 struct cpu_workqueue_struct のポインタが渡される。 --[[linux-2.6.33/create_workqueue_thread()]] --[[linux-2.6.33/cpu_workqueue_struct]] **返り値 [#uab57ae0] -int --常に 0 を返す? **参考 [#m7cd8ff8] *実装 [#o54080c0] static int worker_thread(void *__cwq) { struct cpu_workqueue_struct *cwq = __cwq; DEFINE_WAIT(wait); - --[[linux-2.6.33/cpu_workqueue_struct]] - --[[linux-2.6.33/DEFINE_WAIT()]] if (cwq->wq->freezeable) set_freezable(); - --[[linux-2.6.33/set_freezable()]] for (;;) { prepare_to_wait(&cwq->more_work, &wait, TASK_INTERRUPTIBLE); - --[[linux-2.6.33/TASK_INTERRUPTIBLE()]] - --[[linux-2.6.33/prepare_to_wait()]] if (!freezing(current) && !kthread_should_stop() && list_empty(&cwq->worklist)) schedule(); finish_wait(&cwq->more_work, &wait); - --[[linux-2.6.33/current(global)]] - --[[linux-2.6.33/freezing()]] - --[[linux-2.6.33/kthread_should_stop()]] - --[[linux-2.6.33/list_empty()]] - --[[linux-2.6.33/shedule()]] - --[[linux-2.6.33/finish_wait()]] try_to_freeze(); - --[[linux-2.6.33/try_to_freeze()]] if (kthread_should_stop()) break; run_workqueue(cwq); - --[[linux-2.6.33/run_workqueue()]] } return 0; } *コメント [#v7205051]