[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20211204094349.GP16608@worktop.programming.kicks-ass.net>
Date: Sat, 4 Dec 2021 10:43:49 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: Qais Yousef <qais.yousef@....com>
Cc: Ingo Molnar <mingo@...nel.org>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Vincent Guittot <vincent.guittot@...aro.org>,
Valentin Schneider <valentin.schneider@....com>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] sched/uclamp: Fix rq->uclamp_max not set on first
enqueue
On Thu, Dec 02, 2021 at 11:20:33AM +0000, Qais Yousef wrote:
> Commit d81ae8aac85c ("sched/uclamp: Fix initialization of struct
> uclamp_rq") introduced a bug where uclamp_max of the rq is not reset to
> match the woken up task's uclamp_max when the rq is idle.
>
> The code was relying on rq->uclamp_max initialized to zero, so on first
> enqueue
>
> static inline void uclamp_rq_inc_id(struct rq *rq, struct task_struct *p,
> enum uclamp_id clamp_id)
> {
> ...
>
> if (uc_se->value > READ_ONCE(uc_rq->value))
> WRITE_ONCE(uc_rq->value, uc_se->value);
> }
>
> was actually resetting it. But since commit d81ae8aac85c changed the
> default to 1024, this no longer works. And since rq->uclamp_flags is
> also initialized to 0, neither above code path nor uclamp_idle_reset()
> update the rq->uclamp_max on first wake up from idle.
>
> This is only visible from first wake up(s) until the first dequeue to
> idle after enabling the static key. And it only matters if the
> uclamp_max of this task is < 1024 since only then its uclamp_max will be
> effectively ignored.
>
> Fix it by properly initializing rq->uclamp_flags = UCLAMP_FLAG_IDLE to
> ensure uclamp_idle_reset() is called which then will update the rq
> uclamp_max value as expected.
>
> Fixes: d81ae8aac85c ("sched/uclamp: Fix initialization of struct uclamp_rq")
> Signed-off-by: Qais Yousef <qais.yousef@....com>
> Reviewed-by: Valentin Schneider <Valentin.Schneider@....com>
> Tested-by: Dietmar Eggemann <dietmar.eggemann@....com>
Thanks!
Powered by blists - more mailing lists