On 15/10/2019 11:58, Valentin Schneider wrote: > On 15/10/2019 11:40, Quentin Perret wrote: >>> @@ -2124,8 +2124,17 @@ static void detach_destroy_domains(const struct cpumask *cpu_map) >>> int i; >>> >>> rcu_read_lock(); >>> + >>> + if (static_key_enabled(&sched_asym_cpucapacity)) { >>> + unsigned int cpu = cpumask_any(cpu_map); >>> + >>> + if (rcu_dereference(per_cpu(sd_asym_cpucapacity, cpu))) >>> + static_branch_dec_cpuslocked(&sched_asym_cpucapacity); >> >> Lockdep should scream for this :) > > Bleh, yes indeed... > Urgh, I forgot about the funny hotplug lock scenario at boot time. rebuild_sched_domains() takes the lock but sched_init_domains() doesn't, so we don't get the might_sleep warn at boot time. So if we want to flip the key post boot time we probably need to separately count our asymmetric root domains and flip the key after all the rebuilds, outside of the hotplug lock.