On Mon, Jul 22, 2024 at 03:16:20PM +0200, Frederic Weisbecker wrote: > diff --git a/kernel/time/timer_migration.c b/kernel/time/timer_migration.c > index fae04950487f..8d57f7686bb0 100644 > --- a/kernel/time/timer_migration.c > +++ b/kernel/time/timer_migration.c > @@ -1673,6 +1673,15 @@ static int tmigr_setup_groups(unsigned int cpu, unsigned int node) > > lvllist = &tmigr_level_list[top]; > if (group->num_children == 1 && list_is_singular(lvllist)) { > + /* > + * The target CPU must never do the prepare work, except > + * on early boot when the boot CPU is the target. Otherwise > + * it may spuriously activate the old top level group inside > + * the new one (nevertheless whether old top level group is > + * active or not) and/or release an uninitialized childmask. > + */ > + WARN_ON_ONCE(cpu == raw_smp_processor_id()); > + > lvllist = &tmigr_level_list[top - 1]; > list_for_each_entry(child, lvllist, list) { > if (child->parent) > @@ -1705,14 +1714,6 @@ static int tmigr_cpu_prepare(unsigned int cpu) > struct tmigr_cpu *tmc = per_cpu_ptr(&tmigr_cpu, cpu); > int ret = 0; > > - /* > - * The target CPU must never do the prepare work. Otherwise it may > - * spuriously activate the old top level group inside the new one > - * (nevertheless whether old top level group is active or not) and/or > - * release an uninitialized childmask. > - */ > - WARN_ON_ONCE(cpu == raw_smp_processor_id()); > - > /* Not first online attempt? */ > if (tmc->tmgroup) > return ret; That fixes the issue as confirmed by Narasimhan. Thx. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette