sched: add hooks for workqueue
authorTejun Heo <tj@kernel.org>
Tue, 8 Jun 2010 19:40:37 +0000 (21:40 +0200)
committerTejun Heo <tj@kernel.org>
Tue, 8 Jun 2010 19:40:37 +0000 (21:40 +0200)
commit21aa9af03d06cb1d19a3738e5cf12acff984e69b
treee205a742a4a9baf098b4e3d428c04f4d3a065bca
parent9ed3811a6c0d6b66e6cd47a5d7b9136386dce743
sched: add hooks for workqueue

Concurrency managed workqueue needs to know when workers are going to
sleep and waking up.  Using these two hooks, cmwq keeps track of the
current concurrency level and throttles execution of new works if it's
too high and wakes up another worker from the sleep hook if it becomes
too low.

This patch introduces PF_WQ_WORKER to identify workqueue workers and
adds the following two hooks.

* wq_worker_waking_up(): called when a worker is woken up.

* wq_worker_sleeping(): called when a worker is going to sleep and may
  return a pointer to a local task which should be woken up.  The
  returned task is woken up using try_to_wake_up_local() which is
  simplified ttwu which is called under rq lock and can only wake up
  local tasks.

Both hooks are currently defined as noop in kernel/workqueue_sched.h.
Later cmwq implementation will replace them with proper
implementation.

These hooks are hard coded as they'll always be enabled.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Ingo Molnar <mingo@elte.hu>
include/linux/sched.h
kernel/fork.c
kernel/sched.c
kernel/workqueue_sched.h [new file with mode: 0644]