diff -urN oldtree/include/linux/sched.h newtree/include/linux/sched.h --- oldtree/include/linux/sched.h 2006-09-29 14:38:11.000000000 -0400 +++ newtree/include/linux/sched.h 2006-09-29 14:38:24.000000000 -0400 @@ -35,6 +35,11 @@ #ifdef __KERNEL__ +#define SCHED_MAX SCHED_BATCH +#define SCHED_RANGE(policy) ((policy) <= SCHED_MAX) +#define SCHED_RT(policy) ((policy) == SCHED_FIFO || \ + (policy) == SCHED_RR) + struct sched_param { int sched_priority; }; @@ -509,7 +514,12 @@ #define rt_task(p) rt_prio((p)->prio) #define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) #define is_rt_policy(p) ((p) != SCHED_NORMAL && (p) != SCHED_BATCH) -#define has_rt_policy(p) unlikely(is_rt_policy((p)->policy)) +#ifdef CONFIG_INGOSCHED +#define has_rt_policy(p) unlikely(is_rt_policy((p)->policy)) +#endif +#ifdef CONFIG_STAIRCASE +#define has_rt_policy(p) unlikely(is_rt_policy((p)->policy) && SCHED_RT((p)->policy)) +#endif /* Must be high prio: stop_machine expects to yield to it. */ #define MIGRATION_THREAD_PRIO (MAX_RT_PRIO-20) diff -urN oldtree/kernel/sched_staircase.c newtree/kernel/sched_staircase.c --- oldtree/kernel/sched_staircase.c 2006-09-29 14:38:11.000000000 -0400 +++ newtree/kernel/sched_staircase.c 2006-09-29 14:38:24.000000000 -0400 @@ -3876,8 +3876,7 @@ /* 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 @@ -3888,7 +3887,7 @@ (p->mm && param->sched_priority > MAX_USER_RT_PRIO-1) || (!p->mm && param->sched_priority > MAX_RT_PRIO-1)) return -EINVAL; - if (is_rt_policy(policy) != (param->sched_priority != 0)) + if ((!SCHED_RT(policy)) && is_rt_policy(policy) != (param->sched_priority == 0)) return -EINVAL; /* @@ -3905,7 +3904,7 @@ unlock_task_sighand(p, &flags); /* can't set/change the rt policy */ - if (policy != p->policy && !rlim_rtprio) + if (SCHED_RT(policy) && policy != p->policy && !rlim_rtprio) return -EPERM; /* can't increase priority */