setscheduler resched bug
PATCH 1/1 setscheduler resched bug
setscheduler is not forcing a reschedule when needed like set_user_nice does. It should.
Joe
kernel/sched.c renamed from kernel/sched.c.orig +10 -1
@@ -1716,6 +1716,7 @@unsigned long flags;runqueue_t *rq;task_t *p; +int oldprio;if (!param || pid <0 ) goto out_nounlock;
@@ -1778,12 +1779,20 @@ retval =0 ; p->policy = policy; p->rt_priority = lp.sched_priority; + oldprio = p->prio;if (policy !=SCHED_NORMAL ) p->prio =MAX_USER_RT_PRIO -1 - p->rt_priority;else p->prio = p->static_prio; -if (array) +if (array) {__activate_task (p,task_rq (p)); +/* +* Reschedule if on a CPU and the priority dropped, or not on +* a CPU and the priority rose above the currently running task. +*/ +if ((rq->curr == p) ? (p->prio > oldprio) : (p->prio < rq->curr->prio)) +resched_task (rq->curr); + } out_unlock:task_rq_unlock (rq, &flags);