All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] sched/topology: Add a cpus_read_lock to rebuild_sched_domains()
@ 2026-08-13  7:38 Sebastian Andrzej Siewior
  2026-08-13  7:48 ` Sebastian Andrzej Siewior
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-08-13  7:38 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ben Segall, Dietmar Eggemann, Ingo Molnar, Juri Lelli,
	K Prateek Nayak, Mel Gorman, Peter Zijlstra, Steven Rostedt,
	Tim Chen, Valentin Schneider, Vincent Guittot, chen.yu@linux.dev,
	Chen, Yu C

A read from /proc/sys/kernel/sched_rt_runtime_us leads to backtrace due
to missing cpu_hotplug_lock with CONFIG_CPUSETS=n. The callchain is
sched_rt_handler() -> partition_sched_domains() -> sched_cache_set() ->
static_key_enable_cpuslocked(&sched_cache_present).

sched_cache_set() itself is also invoked from sched_init_domains() which
is early during the boot, holding just the sched_domains_mutex_lock().
Here is no warning because it happens before user space is running (and
hotplug operations are not possible).

There is also sched_cache_active_set() which acquires the hotplug lock
before invoking any of the _cpuslocked() functions.

This is only a problem with CONFIG_CPUSETS=n because in the =y case the
other implementation of rebuild_sched_domains acquires the CPU-hotplug
lock.

Acquire CPU hotplug lock before in rebuild_sched_domains(), before
partition_sched_domains() is invoked for the CONFIG_CPUSETS=n case.

Fixes: a7660ce1590fc ("sched/cache: Fix has_multi_llcs iff at least one partition has multiple LLCs")
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
v1…v2: https://lore.kernel.org/all/20260812095800.gl06ANul@linutronix.de/
  - Move the lock from partition_sched_domains() to
    rebuild_sched_domains() in the CONFIG_CPUSETS=n since this is the
    only affected case. Noticed by Yu C Chen and Tim Chen.

 include/linux/cpuset.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
index 65d76a38974ba..bf3999daa080a 100644
--- a/include/linux/cpuset.h
+++ b/include/linux/cpuset.h
@@ -273,6 +273,7 @@ static inline void dl_rebuild_rd_accounting(void)
 
 static inline void rebuild_sched_domains(void)
 {
+	guard(cpus_read_lock)();
 	partition_sched_domains(1, NULL, NULL);
 }
 
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-08-20  9:10 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13  7:38 [PATCH v2] sched/topology: Add a cpus_read_lock to rebuild_sched_domains() Sebastian Andrzej Siewior
2026-08-13  7:48 ` Sebastian Andrzej Siewior
2026-08-13  9:20   ` Chen Yu
2026-08-13  9:43   ` Ridong Chen
2026-08-19 17:14     ` Tim Chen
2026-08-19 18:52   ` Waiman Long
2026-08-14 14:46 ` Valentin Schneider
2026-08-19 10:19 ` Dietmar Eggemann
2026-08-19 17:54 ` Shrikanth Hegde
2026-08-19 18:22   ` Shrikanth Hegde
2026-08-19 21:29 ` Aaron Tomlin
2026-08-20  9:10 ` [tip: sched/urgent] " tip-bot2 for Sebastian Andrzej Siewior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.