*参照元 [#v825bc70]
#backlinks

*説明 [#u521d1fc]
-パス: [[linux-2.6.33/kernel/workqueue.c]]

-ワークキューの仕事を処理するカーネルスレッドの main 関数。
--[[linux-2.6/ワークキュー]]


**引数 [#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS