2009-09-23 02:03:58

by Peter Williams

[permalink] [raw]
Subject: [PATCH] sched: Make sure task has correct sched_class after policy change

>From the code in rt_mutex_setprio(), it is evident that the intention
is that task's with a RT 'prio' value as a consequence of receiving a PI
boost also have their 'sched_class' field set to '&rt_sched_class'.
However, the code in __setscheduler() could result in this intention
being frustrated.

This patch fixes this problem.

Signed-off-by: Peter Williams <[email protected]>

diff --git a/kernel/sched.c b/kernel/sched.c
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -6159,6 +6159,8 @@ __setscheduler(struct rq *rq, struct tas
p->normal_prio = normal_prio(p);
/* we are holding p->pi_lock already */
p->prio = rt_mutex_getprio(p);
+ if (rt_prio(prio))
+ p->sched_class = &rt_sched_class;
set_load_weight(p);
}