Re: [PATCH 2/5] sched/topology: Wrappers for sched_domains_mutex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/7/25 4:32 AM, Juri Lelli wrote:
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?

You are right. That change does introduce the need to define the !CONFIG_SMP case. I was looking the existing uses o domains_mutex when making that suggestions.

It is a good catch.

Cheers,
Longman





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [Monitors]

  Powered by Linux