On 05/03/25 10:52, Juri Lelli wrote: > On 04/03/25 11:01, Waiman Long wrote: > > On 3/4/25 10:05 AM, Waiman Long wrote: > > > > --- a/kernel/sched/topology.c > > > > +++ b/kernel/sched/topology.c > > > > @@ -6,6 +6,19 @@ > > > > #include <linux/bsearch.h> > > > > DEFINE_MUTEX(sched_domains_mutex); > > > > +#ifdef CONFIG_SMP > > > > +void sched_domains_mutex_lock(void) > > > > +{ > > > > + mutex_lock(&sched_domains_mutex); > > > > +} > > > > +void sched_domains_mutex_unlock(void) > > > > +{ > > > > + mutex_unlock(&sched_domains_mutex); > > > > +} > > > > +#else > > > > +void sched_domains_mutex_lock(void) { } > > > > +void sched_domains_mutex_unlock(void) { } > > > > +#endif > > > > /* Protected by sched_domains_mutex: */ > > > > static cpumask_var_t sched_domains_tmpmask; > > > > @@ -2791,7 +2804,7 @@ void partition_sched_domains_locked(int > > > > ndoms_new, cpumask_var_t doms_new[], > > > > void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], > > > > struct sched_domain_attr *dattr_new) > > > > { > > > > - mutex_lock(&sched_domains_mutex); > > > > + sched_domains_mutex_lock(); > > > > partition_sched_domains_locked(ndoms_new, doms_new, dattr_new); > > > > - mutex_unlock(&sched_domains_mutex); > > > > + sched_domains_mutex_unlock(); > > > > } > > > > > > There are two "lockdep_assert_held(&sched_domains_mutex);" statements in > > > topology.c file and one in cpuset.c. That can be problematic in the > > > non-SMP case. Maybe another wrapper to do the assert? > > > > Ignore that as both topology.c and cpuset.c will only be compiled if > > CONFIG_SMP is defined. IOW, you don't need the the "#ifdef CONFIG_SMP" > > above. > > Indeed! Ah, actually I believe next patch (3/5) introduce usage for the !SMP case in sched_rt_handler() diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 4b8e33c615b1..8cebe71d2bb1 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -2910,6 +2910,7 @@ static int sched_rt_handler(const struct ctl_table *table, int write, void *buff int ret; mutex_lock(&mutex); + sched_domains_mutex_lock(); old_period = sysctl_sched_rt_period; old_runtime = sysctl_sched_rt_runtime; @@ -2936,6 +2937,7 @@ static int sched_rt_handler(const struct ctl_table *table, int write, void *buff sysctl_sched_rt_period = old_period; sysctl_sched_rt_runtime = old_runtime; } + sched_domains_mutex_unlock(); mutex_unlock(&mutex); return ret; So, I will need to add the ifdef back I guess (I removed it on v2). Do you agree? Thanks, Juri