diff options
author | Tejun Heo <tj@kernel.org> | 2010-06-08 21:40:37 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-06-08 21:40:37 +0200 |
commit | 21aa9af03d06cb1d19a3738e5cf12acff984e69b (patch) | |
tree | e205a742a4a9baf098b4e3d428c04f4d3a065bca /kernel/workqueue_sched.h | |
parent | 9ed3811a6c0d6b66e6cd47a5d7b9136386dce743 (diff) | |
download | op-kernel-dev-21aa9af03d06cb1d19a3738e5cf12acff984e69b.zip op-kernel-dev-21aa9af03d06cb1d19a3738e5cf12acff984e69b.tar.gz |
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>
Diffstat (limited to 'kernel/workqueue_sched.h')
-rw-r--r-- | kernel/workqueue_sched.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/workqueue_sched.h b/kernel/workqueue_sched.h new file mode 100644 index 0000000..af040ba --- /dev/null +++ b/kernel/workqueue_sched.h @@ -0,0 +1,16 @@ +/* + * kernel/workqueue_sched.h + * + * Scheduler hooks for concurrency managed workqueue. Only to be + * included from sched.c and workqueue.c. + */ +static inline void wq_worker_waking_up(struct task_struct *task, + unsigned int cpu) +{ +} + +static inline struct task_struct *wq_worker_sleeping(struct task_struct *task, + unsigned int cpu) +{ + return NULL; +} |