diff options
author | Gregory Haskins <ghaskins@novell.com> | 2008-12-29 09:39:52 -0500 |
---|---|---|
committer | Gregory Haskins <ghaskins@novell.com> | 2008-12-29 09:39:52 -0500 |
commit | 967fc04671feea4dbf780c9e55a0bc8fcf68a14e (patch) | |
tree | 223f2bb8c59138cc70fbb0e438ae27819ebe1a92 /include/linux | |
parent | 8f45e2b516201d1bf681e6026fa5276385def565 (diff) |
sched: add sched_class->needs_post_schedule() member
We currently run class->post_schedule() outside of the rq->lock, which
means that we need to test for the need to post_schedule outside of
the lock to avoid a forced reacquistion. This is currently not a problem
as we only look at rq->rt.overloaded. However, we want to enhance this
going forward to look at more state to reduce the need to post_schedule to
a bare minimum set. Therefore, we introduce a new member-func called
needs_post_schedule() which tests for the post_schedule condtion without
actually performing the work. Therefore it is safe to call this
function before the rq->lock is released, because we are guaranteed not
to drop the lock at an intermediate point (such as what post_schedule()
may do).
We will use this later in the series
[ rostedt: removed paranoid BUG_ON ]
Signed-off-by: Gregory Haskins <ghaskins@novell.com>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/sched.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index e5f928a079e8..836a86c32a65 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1012,6 +1012,7 @@ struct sched_class { | |||
1012 | struct rq *busiest, struct sched_domain *sd, | 1012 | struct rq *busiest, struct sched_domain *sd, |
1013 | enum cpu_idle_type idle); | 1013 | enum cpu_idle_type idle); |
1014 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); | 1014 | void (*pre_schedule) (struct rq *this_rq, struct task_struct *task); |
1015 | int (*needs_post_schedule) (struct rq *this_rq); | ||
1015 | void (*post_schedule) (struct rq *this_rq); | 1016 | void (*post_schedule) (struct rq *this_rq); |
1016 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); | 1017 | void (*task_wake_up) (struct rq *this_rq, struct task_struct *task); |
1017 | 1018 | ||