include/linux/sched.h | 8 ++++++++ kernel/sched.c | 13 +++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) Index: linux-2.6.16-ck1/include/linux/sched.h =================================================================== --- linux-2.6.16-ck1.orig/include/linux/sched.h 2006-03-20 20:46:48.000000000 +1100 +++ linux-2.6.16-ck1/include/linux/sched.h 2006-03-20 20:46:49.000000000 +1100 @@ -163,6 +163,14 @@ extern unsigned long weighted_cpuload(co #define SCHED_RR 2 #define SCHED_BATCH 3 +#define SCHED_MIN 0 +#define SCHED_MAX 3 + +#define SCHED_RANGE(policy) ((policy) >= SCHED_MIN && \ + (policy) <= SCHED_MAX) +#define SCHED_RT(policy) ((policy) == SCHED_FIFO || \ + (policy) == SCHED_RR) + struct sched_param { int sched_priority; }; Index: linux-2.6.16-ck1/kernel/sched.c =================================================================== --- linux-2.6.16-ck1.orig/kernel/sched.c 2006-03-20 20:46:48.000000000 +1100 +++ linux-2.6.16-ck1/kernel/sched.c 2006-03-20 20:46:49.000000000 +1100 @@ -3506,7 +3506,7 @@ static void __setscheduler(task_t *p, co BUG_ON(task_queued(p)); p->policy = policy; p->rt_priority = prio; - if (policy != SCHED_NORMAL && policy != SCHED_BATCH) { + if (SCHED_RT(policy)) { p->prio = MAX_RT_PRIO-1 - p->rt_priority; } else p->prio = p->static_prio; @@ -3532,8 +3532,7 @@ recheck: /* double check policy once rq lock held */ if (policy < 0) policy = oldpolicy = p->policy; - else if (policy != SCHED_FIFO && policy != SCHED_RR && - policy != SCHED_NORMAL && policy != SCHED_BATCH) + else if (!SCHED_RANGE(policy)) return -EINVAL; /* * Valid priorities for SCHED_FIFO and SCHED_RR are @@ -3544,8 +3543,7 @@ recheck: (p->mm && param->sched_priority > MAX_USER_RT_PRIO-1) || (!p->mm && param->sched_priority > MAX_RT_PRIO-1)) return -EINVAL; - if ((policy == SCHED_NORMAL || policy == SCHED_BATCH) - != (param->sched_priority == 0)) + if ((!SCHED_RT(policy)) != (param->sched_priority == 0)) return -EINVAL; /* @@ -3556,12 +3554,11 @@ recheck: * can't change policy, except between SCHED_NORMAL * and SCHED_BATCH: */ - if (((policy != SCHED_NORMAL && p->policy != SCHED_BATCH) && - (policy != SCHED_BATCH && p->policy != SCHED_NORMAL)) && + if (SCHED_RT(policy) && policy != p->policy && !p->signal->rlim[RLIMIT_RTPRIO].rlim_cur) return -EPERM; /* can't increase priority */ - if ((policy != SCHED_NORMAL && policy != SCHED_BATCH) && + if (SCHED_RT(policy) && param->sched_priority > p->rt_priority && param->sched_priority > p->signal->rlim[RLIMIT_RTPRIO].rlim_cur)