On Tue, 23 May 2023 at 12:59, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > On Tue, Oct 05, 2021 at 02:12:02PM -0000, tip-bot2 for Ricardo Neri wrote: > > > index 4e8698e..c56faae 100644 > > --- a/kernel/sched/topology.c > > +++ b/kernel/sched/topology.c > > @@ -716,8 +716,20 @@ cpu_attach_domain(struct sched_domain *sd, struct root_domain *rd, int cpu) > > tmp = sd; > > sd = sd->parent; > > destroy_sched_domain(tmp); > > - if (sd) > > + if (sd) { > > + struct sched_group *sg = sd->groups; > > + > > + /* > > + * sched groups hold the flags of the child sched > > + * domain for convenience. Clear such flags since > > + * the child is being destroyed. > > + */ > > + do { > > + sg->flags = 0; > > + } while (sg != sd->groups); > > > I happened to be reading this here code and aren't we missing: > > sg = sg->next; > > somewhere in that loop? 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