Re: [PATCH] sched/topology: remove unneeded do while loop in cpu_attach_domain()

From: Ricardo Neri
Date: Wed Jun 21 2023 - 09:09:21 EST


On Wed, Jun 21, 2023 at 10:53:57AM +0800, Miaohe Lin wrote:
> On 2023/6/20 22:11, Peter Zijlstra wrote:
> > On Sat, Jun 17, 2023 at 04:19:26PM +0800, Miaohe Lin wrote:
> >> When sg != sd->groups, the do while loop would cause deadloop here. But
> >> that won't occur because sg is always equal to sd->groups now. Remove
> >> this unneeded do while loop.
> >
> > This Changelog makes no sense to me.. Yes, as is the do {} while loop is
> > dead code, but it *should* have read like:
> >
> > do {
> > sg->flags = 0;
> > sg = sg->next;
> > } while (sg != sd->groups);

Yes, I agree that this is the correct solution.

> >
> > as I noted here:
> >
> > https://lore.kernel.org/all/20230523105935.GN83892@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/T/#u

I apologize. I missed this e-mail.

>
> [1]
>
> >
> > So what this changelog should argue is how there cannot be multiple
> > groups here -- or if there can be, add the missing iteration.
>
> [1] said:
> "
> Yes, I missed that.
>
> That being said, the only reason for sd to be degenerate is that there
> is only 1 group. Otherwise we will keep it and degenerate parents
> instead
> "

In the section of the code in question ,`sd` now points to the parent of the
sched group being degenerated. Thus, it may have more than one group, and we should
iterate over them to clear the flags.

>
> IOW, "sg = sg->next;" is missed intentionally in the do while{} loop to show that
> there's only 1 sched group. This looks weird to me but no persist on change the code.

Not having `sg = sg->next;` is a bug, IMO.

Thanks and BR,
Ricardo