5124 case SCHED_FIFO:
5125 case SCHED_RR:
5126 p->sched_class = &rt_sched_class;
5127 break;
5128 }
5129
5130 p->rt_priority = prio;
5131 p->normal_prio = normal_prio(p);
5132
5133 p->prio = rt_mutex_getprio(p);
5134 set_load_weight(p);
5135}
5136
5137static int __sched_setscheduler(struct task_struct *p, int policy,
5138 struct sched_param *param, bool user)
5139{
5140 int retval, oldprio, oldpolicy = -1, on_rq, running;
5141 unsigned long flags;
5142 const struct sched_class *prev_class = p->sched_class;
5143 struct rq *rq;
5144
5145
5146 BUG_ON(in_interrupt());
5147recheck:
5148
5149 if (policy < 0)
5150 policy = oldpolicy = p->policy;
5151 else if (policy != SCHED_FIFO && policy != SCHED_RR &&
5152 policy != SCHED_NORMAL && policy != SCHED_BATCH &&
5153 policy != SCHED_IDLE)
5154 return -EINVAL;
5155
5156
5157
5158
5159
5160 if (param->sched_priority < 0 ||
5161 (p->mm && param->sched_priority > MAX_USER_RT_PRIO-1) ||
5162 (!p->mm && param->sched_priority > MAX_RT_PRIO-1))
5163 return -EINVAL;
5164 if (rt_policy(policy) != (param->sched_priority != 0))