[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20191210103656.637xilg2egtdwv5b@e107158-lin.cambridge.arm.com>
Date: Tue, 10 Dec 2019 10:36:57 +0000
From: Qais Yousef <qais.yousef@....com>
To: Vincent Guittot <vincent.guittot@...aro.org>
Cc: mingo@...hat.com, peterz@...radead.org, juri.lelli@...hat.com,
dietmar.eggemann@....com, rostedt@...dmis.org, bsegall@...gle.com,
mgorman@...e.de, linux-kernel@...r.kernel.org,
john.stultz@...aro.org, valentin.schneider@....com
Subject: Re: [PATCH] sched/fair: fix find_idlest_group() to handle CPU
affinity
On 12/04/19 19:21, Vincent Guittot wrote:
> Because of CPU affinity, the local group can be skipped which breaks the
> assumption that statistics are always collected for local group. With
> uninitialized local_sgs, the comparison is meaningless and the behavior
> unpredictable. This can even end up to use local pointer which is to
> NULL in this case.
For the record; I think this is safe and I can't see how the local_sgs can be
used uninitialized, but experience shows that if this happened once it's likely
to happen again when things change. So I think it'd be safer to always
initialize local_sgs to something sensible and avoid future trouble. I don't
see any cost to initializing it.
My 2p :-) The change is good for me as-is otherwise.
Cheers
--
Qais Yousef
>
> If the local group has been skipped because of CPU affinity, we return
> the idlest group.
>
> Fixes: 57abff067a08 ("sched/fair: Rework find_idlest_group()")
> Reported-by: John Stultz <john.stultz@...aro.org>
> Signed-off-by: Vincent Guittot <vincent.guittot@...aro.org>
> Tested-by: John Stultz <john.stultz@...aro.org>
> ---
> kernel/sched/fair.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 08a233e..146b6c8 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -8417,6 +8417,10 @@ find_idlest_group(struct sched_domain *sd, struct task_struct *p,
> if (!idlest)
> return NULL;
>
> + /* The local group has been skipped because of CPU affinity */
> + if (!local)
> + return idlest;
> +
> /*
> * If the local group is idler than the selected idlest group
> * don't try and push the task.
> --
> 2.7.4
>
Powered by blists - more mailing lists