lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 6 Mar 2014 21:43:50 +0100 (CET) From: Thomas Gleixner <tglx@...utronix.de> To: Steven Rostedt <rostedt@...dmis.org> cc: Juri Lelli <juri.lelli@...il.com>, Peter Zijlstra <peterz@...radead.org>, LKML <linux-kernel@...r.kernel.org>, Sebastian Andrzej Siewior <bigeasy@...utronix.de>, Ingo Molnar <mingo@...nel.org> Subject: Re: [PATCH v2] sched: Fix broken setscheduler() On Thu, 6 Mar 2014, Steven Rostedt wrote: > On Thu, 6 Mar 2014 13:20:40 +0100 > Juri Lelli <juri.lelli@...il.com> wrote: > > > Yes. I think you can go with > > > > p->prio = p->normal_prio > > > > and save a few checks in rt_mutex_getprio(). > > > > You're right! Thanks. > > ----- > > I decided to run my tests on linux-next, and my wakeup_rt tracer was > broken. After running a bisect, I found that the problem commit was: > > linux-next commit c365c292d059 > "sched: Consider pi boosting in setscheduler()" > > And the reason the wake_rt tracer test was failing, was because it had > no RT task to trace. I first noticed this when running with > sched_switch event and saw that my RT task still had normal SCHED_OTHER > priority. Looking at the problem commit, I found: > > - p->normal_prio = normal_prio(p); > - p->prio = rt_mutex_getprio(p); > > With no > > + p->normal_prio = normal_prio(p); > + p->prio = rt_mutex_getprio(p); > > Reading what the commit is suppose to do, I realize that the p->prio > can't be set if the task is boosted with a higher prio, but the > p->normal_prio still needs to be set regardless, otherwise, when the > task is deboosted, it wont get the new priority. Indeed. > The p->prio has to be set before "check_class_changed()" is called, > otherwise the class wont be changed. > > Link: http://lkml.kernel.org/r/20140305232931.449eef8c@gandalf.local.home > > Signed-off-by: Steven Rostedt <rostedt@...dmis.org> > --- > kernel/sched/core.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 4600bca..3134756 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -3198,6 +3198,7 @@ static void __setscheduler_params(struct task_struct *p, > * getparam()/getattr() don't report silly values for !rt tasks. > */ > p->rt_priority = attr->sched_priority; > + p->normal_prio = normal_prio(p); > set_load_weight(p); > } > > @@ -3207,6 +3208,12 @@ static void __setscheduler(struct rq *rq, struct task_struct *p, > { > __setscheduler_params(p, attr); > > + /* > + * If we get here, there was no pi waiters boosting the > + * task. It is safe to use the normal prio. > + */ > + p->prio = normal_prio(p); > + > if (dl_prio(p->prio)) > p->sched_class = &dl_sched_class; > else if (rt_prio(p->prio)) > -- > 1.8.1.4 > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists