Messages in this thread |  | | Date | Mon, 26 Jul 2021 14:56:10 +0100 | From | Quentin Perret <> | Subject | Re: [PATCH v4 2/2] sched: Skip priority checks with SCHED_FLAG_KEEP_PARAMS |
| |
On Thursday 22 Jul 2021 at 10:47:33 (+0200), Dietmar Eggemann wrote: > (*) This changes the behaviour when setting uclamp values on a DL task. > > Before uclamp values could be set but now, because of > > void __getparam_dl(struct task_struct *p, struct sched_attr *attr) > .. > attr->sched_flags = dl_se->flags > > SCHED_FLAG_UTIL_CLAMP gets overwritten and __sched_setscheduler() bails in: > > if (unlikely(policy == p->policy)) { > ... > retval = 0; > goto unlock; > } > change: > > I.e. the: > > if (attr->sched_flags & SCHED_FLAG_UTIL_CLAMP) > goto change; > > can't trigger anymore.
Bah, as you said it doesn't seem to be a big deal, but clearly that was unintentional. Let me try and fix this.
> > + else if (task_has_rt_policy(p)) > > + attr->sched_priority = p->rt_priority; > > + else > > + attr->sched_nice = task_nice(p); > > +} > > + > > /** > > * sys_sched_setscheduler - set/change the scheduler policy and RT priority > > * @pid: the pid in question. > > @@ -7393,6 +7403,8 @@ SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr, > > rcu_read_unlock(); > > > > if (likely(p)) { > > + if (attr.sched_flags & SCHED_FLAG_KEEP_PARAMS) > > + get_params(p, &attr); > > SCHED_FLAG_KEEP_PARAMS is handled here but SCHED_FLAG_KEEP_POLICY > outside (before) the `if (likely(p))`?
Because I need to dereference p while SCHED_FLAG_KEEP_POLICY doesn't :)
> > retval = sched_setattr(p, &attr); > > put_task_struct(p); > > } > > [...]
|  |