On Tue, Jan 15, 2019 at 10:15:07AM +0000, Patrick Bellasi wrote: > +static __always_inline > +unsigned int uclamp_util_with(struct rq *rq, unsigned int util, > + struct task_struct *p) > { > unsigned int min_util = READ_ONCE(rq->uclamp[UCLAMP_MIN].value); > unsigned int max_util = READ_ONCE(rq->uclamp[UCLAMP_MAX].value); > > + if (p) { > + min_util = max(min_util, uclamp_effective_value(p, UCLAMP_MIN)); > + max_util = max(max_util, uclamp_effective_value(p, UCLAMP_MAX)); > + } > + Like I think you mentioned earlier; this doesn't look right at all. Should that not be something like: lo = READ_ONCE(rq->uclamp[UCLAMP_MIN].value); hi = READ_ONCE(rq->uclamp[UCLAMP_MAX].value); min_util = clamp(uclamp_effective(p, UCLAMP_MIN), lo, hi); max_util = clamp(uclamp_effective(p, UCLAMP_MAX), lo, hi);