aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorGregory Haskins <ghaskins@novell.com>2008-12-29 09:39:52 -0500
committerGregory Haskins <ghaskins@novell.com>2008-12-29 09:39:52 -0500
commit967fc04671feea4dbf780c9e55a0bc8fcf68a14e (patch)
tree223f2bb8c59138cc70fbb0e438ae27819ebe1a92 /include/linux
parent8f45e2b516201d1bf681e6026fa5276385def565 (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.h1
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