* [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES
@ 2026-09-11 2:28 Aaron Tomlin
2026-09-11 20:45 ` kernel test robot
0 siblings, 1 reply; 3+ messages in thread
From: Aaron Tomlin @ 2026-09-11 2:28 UTC (permalink / raw)
To: akpm, mingo, peterz, juri.lelli, vincent.guittot
Cc: dietmar.eggemann, rostedt, bsegall, mgorman, vschneid, feng.tang,
pmladek, kprateek.nayak, atomlin, linux-kernel
When investigating kernel panics, inspectability of per-CPU runqueues
and runnable task states is valuable for diagnosing CPU starvation
priority inversion, etc.
While debugfs (/sys/kernel/debug/sched/debug) exposes runqueue metrics
to userspace, these details are not captured during an automated kernel
panic or crash dump. Capturing per-CPU runqueue state directly into
log_buf fills this diagnostic gap for post-mortem crash analysis.
Introduce SYS_INFO_CPU_RUNQUEUES and its corresponding string token
"cpu_runqueues" to panic_sys_info. Add sched_show_runqueues(), modelled
on print_rq(), to emit per-CPU scheduler diagnostics to the kernel log.
Unlike /sys/kernel/debug/sched/debug which dumps all threads assigned to
a CPU, sched_show_runqueues() only emits threads that are actively
running or queued on the runqueue (via task_on_rq_queued() and
task_current()). This keeps the panic log concise, reflects the true
runqueue depth, and prevents overflowing the printk ring buffer on
systems with high thread counts.
Additionally, to guarantee deadlock and memory safety in panic context:
- Acquire the runqueue lock using raw_spin_rq_trylock() with
READ_ONCE() fallback, marking contended queues with
" (contended)"
- Wrap the per-CPU inspection in rcu_read_lock() to protect the
sampled current task (comm and PID) against premature release
during pr_info() across other callers
- Omit cgroup group-path printing in print_rq() to avoid acquiring
cgroup_mutex and traversing kernfs dentries
Suggested-by: Rishil Sandip Shah <rishil1999@outlook.com>
Signed-off-by: Aaron Tomlin <atomlin@atomlin.com>
---
Documentation/admin-guide/sysctl/kernel.rst | 1 +
include/linux/sched/debug.h | 1 +
include/linux/sys_info.h | 1 +
kernel/sched/debug.c | 76 +++++++++++++++++----
lib/sys_info.c | 4 ++
5 files changed, 70 insertions(+), 13 deletions(-)
diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst
index b6328cd0f43e..0962b031e035 100644
--- a/Documentation/admin-guide/sysctl/kernel.rst
+++ b/Documentation/admin-guide/sysctl/kernel.rst
@@ -939,6 +939,7 @@ locks print locks info if CONFIG_LOCKDEP is on
ftrace print ftrace buffer
all_bt print all CPUs backtrace (if available in the arch)
blocked_tasks print only tasks in uninterruptible (blocked) state
+cpu_runqueues print per-CPU runqueue depth and runnable tasks
============= ===================================================
diff --git a/include/linux/sched/debug.h b/include/linux/sched/debug.h
index 35ed4577a6cc..d4276d8ead29 100644
--- a/include/linux/sched/debug.h
+++ b/include/linux/sched/debug.h
@@ -39,6 +39,7 @@ struct seq_file;
extern void proc_sched_show_task(struct task_struct *p,
struct pid_namespace *ns, struct seq_file *m);
extern void proc_sched_set_task(struct task_struct *p);
+extern void sched_show_runqueues(void);
/* Attach to any functions which should be ignored in wchan output. */
#define __sched __section(".sched.text")
diff --git a/include/linux/sys_info.h b/include/linux/sys_info.h
index a5bc3ea3d44b..c571aad1e178 100644
--- a/include/linux/sys_info.h
+++ b/include/linux/sys_info.h
@@ -16,6 +16,7 @@
#define SYS_INFO_PANIC_CONSOLE_REPLAY 0x00000020
#define SYS_INFO_ALL_BT 0x00000040
#define SYS_INFO_BLOCKED_TASKS 0x00000080
+#define SYS_INFO_CPU_RUNQUEUES 0x00000100
void sys_info(unsigned long si_mask);
unsigned long sys_info_parse_param(char *str);
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 72236db67983..d510a23b625d 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -968,7 +968,8 @@ static void task_group_path(struct task_group *tg, char *path, int plen)
#endif
static void
-print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
+print_task(struct seq_file *m, struct rq *rq, struct task_struct *p,
+ bool show_cgroup_path)
{
if (task_current(rq, p))
SEQ_printf(m, ">R");
@@ -996,13 +997,15 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
SEQ_printf(m, " %d %d", task_node(p), task_numa_group_id(p));
#endif
#ifdef CONFIG_CGROUP_SCHED
- SEQ_printf_task_group_path(m, task_group(p), " %s")
+ if (show_cgroup_path)
+ SEQ_printf_task_group_path(m, task_group(p), " %s")
#endif
SEQ_printf(m, "\n");
}
-static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
+static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu,
+ bool show_cgroup_path, bool queued_only)
{
struct task_struct *g, *p;
@@ -1010,31 +1013,36 @@ static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
SEQ_printf(m, "runnable tasks:\n");
SEQ_printf(m, " S task PID weight vruntime eligible "
"deadline slice sum-exec switches "
- "prio wait-time sum-sleep sum-block"
+ "prio wait-time sum-sleep sum-block");
#ifdef CONFIG_NUMA_BALANCING
- " node group-id"
+ SEQ_printf(m, " node group-id");
#endif
#ifdef CONFIG_CGROUP_SCHED
- " group-path"
+ if (show_cgroup_path)
+ SEQ_printf(m, " group-path");
#endif
- "\n");
+ SEQ_printf(m, "\n");
SEQ_printf(m, "-------------------------------------------------------"
"------------------------------------------------------"
- "------------------------------------------------------"
+ "------------------------------------------------------");
#ifdef CONFIG_NUMA_BALANCING
- "--------------"
+ SEQ_printf(m, "--------------");
#endif
#ifdef CONFIG_CGROUP_SCHED
- "--------------"
+ if (show_cgroup_path)
+ SEQ_printf(m, "--------------");
#endif
- "\n");
+ SEQ_printf(m, "\n");
rcu_read_lock();
for_each_process_thread(g, p) {
if (task_cpu(p) != rq_cpu)
continue;
- print_task(m, rq, p);
+ if (queued_only && !task_current(rq, p) && !task_on_rq_queued(p))
+ continue;
+
+ print_task(m, rq, p, show_cgroup_path);
}
rcu_read_unlock();
}
@@ -1234,7 +1242,7 @@ do { \
print_rt_stats(m, cpu);
print_dl_stats(m, cpu);
- print_rq(m, rq, cpu);
+ print_rq(m, rq, cpu, true, false);
SEQ_printf(m, "\n");
}
@@ -1322,6 +1330,48 @@ void sysrq_sched_debug_show(void)
}
}
+void sched_show_runqueues(void)
+{
+ int cpu;
+
+ pr_info("CPU Runqueues:\n");
+ for_each_online_cpu(cpu) {
+ struct rq *rq = cpu_rq(cpu);
+ struct task_struct *curr;
+ unsigned int nr_running;
+ u64 nr_switches;
+ unsigned long flags;
+ bool locked;
+
+ touch_nmi_watchdog();
+ touch_all_softlockup_watchdogs();
+
+ rcu_read_lock();
+ local_irq_save(flags);
+ locked = raw_spin_rq_trylock(rq);
+ if (locked) {
+ nr_running = rq->nr_running;
+ nr_switches = rq->nr_switches;
+ curr = rq->curr;
+ raw_spin_rq_unlock(rq);
+ } else {
+ nr_running = READ_ONCE(rq->nr_running);
+ nr_switches = READ_ONCE(rq->nr_switches);
+ curr = READ_ONCE(rq->curr);
+ }
+ local_irq_restore(flags);
+
+ pr_info("cpu#%d: nr_running:%u switches:%llu curr:%s[%d]%s\n",
+ cpu, nr_running, nr_switches,
+ curr ? curr->comm : "<none>",
+ curr ? task_pid_nr(curr) : -1,
+ locked ? "" : " (contended)");
+
+ print_rq(NULL, rq, cpu, false, true);
+ rcu_read_unlock();
+ }
+}
+
/*
* This iterator needs some explanation.
* It returns 1 for the header position.
diff --git a/lib/sys_info.c b/lib/sys_info.c
index f32a06ec9ed4..fc5bfcc121de 100644
--- a/lib/sys_info.c
+++ b/lib/sys_info.c
@@ -22,6 +22,7 @@ static const char * const si_names[] = {
[ilog2(SYS_INFO_PANIC_CONSOLE_REPLAY)] = "",
[ilog2(SYS_INFO_ALL_BT)] = "all_bt",
[ilog2(SYS_INFO_BLOCKED_TASKS)] = "blocked_tasks",
+ [ilog2(SYS_INFO_CPU_RUNQUEUES)] = "cpu_runqueues",
};
/*
@@ -158,6 +159,9 @@ static void __sys_info(unsigned long si_mask)
if (si_mask & SYS_INFO_BLOCKED_TASKS)
show_state_filter(TASK_UNINTERRUPTIBLE);
+
+ if (si_mask & SYS_INFO_CPU_RUNQUEUES)
+ sched_show_runqueues();
}
void sys_info(unsigned long si_mask)
--
2.55.0
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES
2026-09-11 2:28 [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES Aaron Tomlin
@ 2026-09-11 20:45 ` kernel test robot
2026-09-12 1:00 ` Aaron Tomlin
0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2026-09-11 20:45 UTC (permalink / raw)
To: Aaron Tomlin, akpm, mingo, peterz, juri.lelli, vincent.guittot
Cc: oe-kbuild-all, dietmar.eggemann, rostedt, bsegall, mgorman,
vschneid, feng.tang, pmladek, kprateek.nayak, atomlin,
linux-kernel
Hi Aaron,
kernel test robot noticed the following build warnings:
[auto build test WARNING on akpm-mm/mm-everything]
[also build test WARNING on tip/sched/core akpm-mm/mm-nonmm-unstable linus/master v7.3-rc2 next-20260909]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Aaron-Tomlin/sched-debug-sys_info-Introduce-SYS_INFO_CPU_RUNQUEUES/20260910-222844
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link: https://lore.kernel.org/r/20260911022844.521413-1-atomlin%40atomlin.com
patch subject: [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES
config: microblaze-randconfig-r132-20260911 (https://download.01.org/0day-ci/archive/20260912/202609120421.J3jtss6v-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 8.5.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260912/202609120421.J3jtss6v-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202609120421.J3jtss6v-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
kernel/sched/build_utility.c: note: in included file:
kernel/sched/debug.c:868:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/debug.c:868:17: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/debug.c:868:17: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/debug.c:1220:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/debug.c:1220:9: sparse: expected struct task_struct *tsk
kernel/sched/debug.c:1220:9: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/debug.c:1220:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/debug.c:1220:9: sparse: expected struct task_struct *tsk
kernel/sched/debug.c:1220:9: sparse: got struct task_struct [noderef] __rcu *curr
>> kernel/sched/debug.c:1355:30: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/debug.c:1355:30: sparse: expected struct task_struct *curr
kernel/sched/debug.c:1355:30: sparse: got struct task_struct [noderef] __rcu *curr
>> kernel/sched/debug.c:1360:30: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu * @@
kernel/sched/debug.c:1360:30: sparse: expected struct task_struct *curr
kernel/sched/debug.c:1360:30: sparse: got struct task_struct [noderef] __rcu *
kernel/sched/build_utility.c: note: in included file:
kernel/sched/topology.c:118:56: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:118:56: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:118:56: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:137:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:137:60: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:137:60: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:160:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:160:20: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:160:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:470:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct perf_domain *pd @@ got struct perf_domain [noderef] __rcu *pd @@
kernel/sched/topology.c:470:19: sparse: expected struct perf_domain *pd
kernel/sched/topology.c:470:19: sparse: got struct perf_domain [noderef] __rcu *pd
kernel/sched/topology.c:654:49: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:654:49: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:654:49: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:753:50: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:753:50: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:753:50: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:775:55: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain [noderef] __rcu *[noderef] __rcu child @@ got struct sched_domain *[assigned] tmp @@
kernel/sched/topology.c:775:55: sparse: expected struct sched_domain [noderef] __rcu *[noderef] __rcu child
kernel/sched/topology.c:775:55: sparse: got struct sched_domain *[assigned] tmp
kernel/sched/topology.c:788:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:788:29: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:788:29: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:793:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:793:20: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:793:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:826:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *sd @@
kernel/sched/topology.c:826:13: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:826:13: sparse: got struct sched_domain [noderef] __rcu *sd
kernel/sched/topology.c:1069:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *sdp @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:1069:38: sparse: expected struct sched_domain *sdp
kernel/sched/topology.c:1069:38: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1076:21: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sdp @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:1076:21: sparse: expected struct sched_domain *sdp
kernel/sched/topology.c:1076:21: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1223:70: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1223:70: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1223:70: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1252:59: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1252:59: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1252:59: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1298:57: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1298:57: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1298:57: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1300:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sibling @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1300:25: sparse: expected struct sched_domain *sibling
kernel/sched/topology.c:1300:25: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1308:55: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1308:55: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1308:55: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1310:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sibling @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1310:25: sparse: expected struct sched_domain *sibling
kernel/sched/topology.c:1310:25: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1380:62: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1380:62: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1380:62: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1484:40: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *child @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/topology.c:1484:40: sparse: expected struct sched_domain *child
kernel/sched/topology.c:1484:40: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1620:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:1620:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:1620:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1877:52: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:1877:52: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:1877:52: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1987:43: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain [noderef] __rcu *child @@ got struct sched_domain *child @@
kernel/sched/topology.c:1987:43: sparse: expected struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1987:43: sparse: got struct sched_domain *child
kernel/sched/topology.c:2791:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain [noderef] __rcu *parent @@ got struct sched_domain *sd @@
kernel/sched/topology.c:2791:31: sparse: expected struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2791:31: sparse: got struct sched_domain *sd
kernel/sched/topology.c:2919:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *[noderef] __rcu parent @@
kernel/sched/topology.c:2919:16: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2919:16: sparse: got struct sched_domain [noderef] __rcu *[noderef] __rcu parent
kernel/sched/topology.c:2921:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:2921:24: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2921:24: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2926:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:2926:16: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2926:16: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2931:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:2931:24: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2931:24: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:3008:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd_asym @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:3008:25: sparse: expected struct sched_domain *[assigned] sd_asym
kernel/sched/topology.c:3008:25: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:3143:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:3143:57: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:3143:57: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:3165:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:3165:28: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:3165:28: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:3191:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:3191:57: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:3191:57: sparse: got struct sched_domain [noderef] __rcu *parent
vim +1355 kernel/sched/debug.c
1212
1213 #define PN(x) \
1214 SEQ_printf(m, " .%-30s: %Ld.%06ld\n", #x, SPLIT_NS(rq->x))
1215
1216 P(nr_running);
1217 P(nr_switches);
1218 P(nr_uninterruptible);
1219 PN(next_balance);
> 1220 SEQ_printf(m, " .%-30s: %ld\n", "curr->pid", (long)(task_pid_nr(rq->curr)));
1221 PN(clock);
1222 PN(clock_task);
1223 #undef P
1224 #undef PN
1225
1226 #define P64(n) SEQ_printf(m, " .%-30s: %Ld\n", #n, rq->n);
1227 P64(avg_idle);
1228 P64(max_idle_balance_cost);
1229 #undef P64
1230
1231 #define P(n) SEQ_printf(m, " .%-30s: %d\n", #n, schedstat_val(rq->n));
1232 if (schedstat_enabled()) {
1233 P(yld_count);
1234 P(sched_count);
1235 P(sched_goidle);
1236 P(ttwu_count);
1237 P(ttwu_local);
1238 }
1239 #undef P
1240
1241 print_cfs_stats(m, cpu);
1242 print_rt_stats(m, cpu);
1243 print_dl_stats(m, cpu);
1244
1245 print_rq(m, rq, cpu, true, false);
1246 SEQ_printf(m, "\n");
1247 }
1248
1249 static const char *sched_tunable_scaling_names[] = {
1250 "none",
1251 "logarithmic",
1252 "linear"
1253 };
1254
1255 static void sched_debug_header(struct seq_file *m)
1256 {
1257 u64 ktime, sched_clk, cpu_clk;
1258 unsigned long flags;
1259
1260 local_irq_save(flags);
1261 ktime = ktime_to_ns(ktime_get());
1262 sched_clk = sched_clock();
1263 cpu_clk = local_clock();
1264 local_irq_restore(flags);
1265
1266 SEQ_printf(m, "Sched Debug Version: v0.11, %s %.*s\n",
1267 init_utsname()->release,
1268 (int)strcspn(init_utsname()->version, " "),
1269 init_utsname()->version);
1270
1271 #define P(x) \
1272 SEQ_printf(m, "%-40s: %Ld\n", #x, (long long)(x))
1273 #define PN(x) \
1274 SEQ_printf(m, "%-40s: %Ld.%06ld\n", #x, SPLIT_NS(x))
1275 PN(ktime);
1276 PN(sched_clk);
1277 PN(cpu_clk);
1278 P(jiffies);
1279 #ifdef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
1280 P(sched_clock_stable());
1281 #endif
1282 #undef PN
1283 #undef P
1284
1285 SEQ_printf(m, "\n");
1286 SEQ_printf(m, "sysctl_sched\n");
1287
1288 #define P(x) \
1289 SEQ_printf(m, " .%-40s: %Ld\n", #x, (long long)(x))
1290 #define PN(x) \
1291 SEQ_printf(m, " .%-40s: %Ld.%06ld\n", #x, SPLIT_NS(x))
1292 PN(sysctl_sched_base_slice);
1293 P(sysctl_sched_features);
1294 #undef PN
1295 #undef P
1296
1297 SEQ_printf(m, " .%-40s: %d (%s)\n",
1298 "sysctl_sched_tunable_scaling",
1299 sysctl_sched_tunable_scaling,
1300 sched_tunable_scaling_names[sysctl_sched_tunable_scaling]);
1301 SEQ_printf(m, "\n");
1302 }
1303
1304 static int sched_debug_show(struct seq_file *m, void *v)
1305 {
1306 int cpu = (unsigned long)(v - 2);
1307
1308 if (cpu != -1)
1309 print_cpu(m, cpu);
1310 else
1311 sched_debug_header(m);
1312
1313 return 0;
1314 }
1315
1316 void sysrq_sched_debug_show(void)
1317 {
1318 int cpu;
1319
1320 sched_debug_header(NULL);
1321 for_each_online_cpu(cpu) {
1322 /*
1323 * Need to reset softlockup watchdogs on all CPUs, because
1324 * another CPU might be blocked waiting for us to process
1325 * an IPI or stop_machine.
1326 */
1327 touch_nmi_watchdog();
1328 touch_all_softlockup_watchdogs();
1329 print_cpu(NULL, cpu);
1330 }
1331 }
1332
1333 void sched_show_runqueues(void)
1334 {
1335 int cpu;
1336
1337 pr_info("CPU Runqueues:\n");
1338 for_each_online_cpu(cpu) {
1339 struct rq *rq = cpu_rq(cpu);
1340 struct task_struct *curr;
1341 unsigned int nr_running;
1342 u64 nr_switches;
1343 unsigned long flags;
1344 bool locked;
1345
1346 touch_nmi_watchdog();
1347 touch_all_softlockup_watchdogs();
1348
1349 rcu_read_lock();
1350 local_irq_save(flags);
1351 locked = raw_spin_rq_trylock(rq);
1352 if (locked) {
1353 nr_running = rq->nr_running;
1354 nr_switches = rq->nr_switches;
> 1355 curr = rq->curr;
1356 raw_spin_rq_unlock(rq);
1357 } else {
1358 nr_running = READ_ONCE(rq->nr_running);
1359 nr_switches = READ_ONCE(rq->nr_switches);
> 1360 curr = READ_ONCE(rq->curr);
1361 }
1362 local_irq_restore(flags);
1363
1364 pr_info("cpu#%d: nr_running:%u switches:%llu curr:%s[%d]%s\n",
1365 cpu, nr_running, nr_switches,
1366 curr ? curr->comm : "<none>",
1367 curr ? task_pid_nr(curr) : -1,
1368 locked ? "" : " (contended)");
1369
1370 print_rq(NULL, rq, cpu, false, true);
1371 rcu_read_unlock();
1372 }
1373 }
1374
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES
2026-09-11 20:45 ` kernel test robot
@ 2026-09-12 1:00 ` Aaron Tomlin
0 siblings, 0 replies; 3+ messages in thread
From: Aaron Tomlin @ 2026-09-12 1:00 UTC (permalink / raw)
To: kernel test robot, peterz, akpm
Cc: akpm, mingo, peterz, juri.lelli, vincent.guittot, oe-kbuild-all,
dietmar.eggemann, rostedt, bsegall, mgorman, vschneid, feng.tang,
pmladek, kprateek.nayak, linux-kernel, rishil1999
On Sat, Sep 12, 2026 at 04:45:18AM +0800, kernel test robot wrote:
> Hi Aaron,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on akpm-mm/mm-everything]
> [also build test WARNING on tip/sched/core akpm-mm/mm-nonmm-unstable linus/master v7.3-rc2 next-20260909]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Aaron-Tomlin/sched-debug-sys_info-Introduce-SYS_INFO_CPU_RUNQUEUES/20260910-222844
> base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link: https://lore.kernel.org/r/20260911022844.521413-1-atomlin%40atomlin.com
> patch subject: [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES
> config: microblaze-randconfig-r132-20260911 (https://download.01.org/0day-ci/archive/20260912/202609120421.J3jtss6v-lkp@intel.com/config)
> compiler: microblaze-linux-gcc (GCC) 8.5.0
> sparse: v0.6.5-rc1
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260912/202609120421.J3jtss6v-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202609120421.J3jtss6v-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
> kernel/sched/build_utility.c: note: in included file:
> kernel/sched/debug.c:868:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/debug.c:868:17: sparse: expected struct sched_domain *[assigned] sd
> kernel/sched/debug.c:868:17: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/debug.c:1220:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
> kernel/sched/debug.c:1220:9: sparse: expected struct task_struct *tsk
> kernel/sched/debug.c:1220:9: sparse: got struct task_struct [noderef] __rcu *curr
> kernel/sched/debug.c:1220:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
> kernel/sched/debug.c:1220:9: sparse: expected struct task_struct *tsk
> kernel/sched/debug.c:1220:9: sparse: got struct task_struct [noderef] __rcu *curr
> >> kernel/sched/debug.c:1355:30: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@
> kernel/sched/debug.c:1355:30: sparse: expected struct task_struct *curr
> kernel/sched/debug.c:1355:30: sparse: got struct task_struct [noderef] __rcu *curr
> >> kernel/sched/debug.c:1360:30: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu * @@
> kernel/sched/debug.c:1360:30: sparse: expected struct task_struct *curr
> kernel/sched/debug.c:1360:30: sparse: got struct task_struct [noderef] __rcu *
> kernel/sched/build_utility.c: note: in included file:
> kernel/sched/topology.c:118:56: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:118:56: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:118:56: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:137:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:137:60: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:137:60: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:160:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:160:20: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:160:20: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:470:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct perf_domain *pd @@ got struct perf_domain [noderef] __rcu *pd @@
> kernel/sched/topology.c:470:19: sparse: expected struct perf_domain *pd
> kernel/sched/topology.c:470:19: sparse: got struct perf_domain [noderef] __rcu *pd
> kernel/sched/topology.c:654:49: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:654:49: sparse: expected struct sched_domain *parent
> kernel/sched/topology.c:654:49: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:753:50: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:753:50: sparse: expected struct sched_domain *parent
> kernel/sched/topology.c:753:50: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:775:55: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain [noderef] __rcu *[noderef] __rcu child @@ got struct sched_domain *[assigned] tmp @@
> kernel/sched/topology.c:775:55: sparse: expected struct sched_domain [noderef] __rcu *[noderef] __rcu child
> kernel/sched/topology.c:775:55: sparse: got struct sched_domain *[assigned] tmp
> kernel/sched/topology.c:788:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:788:29: sparse: expected struct sched_domain *[assigned] tmp
> kernel/sched/topology.c:788:29: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:793:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:793:20: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:793:20: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:826:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *sd @@
> kernel/sched/topology.c:826:13: sparse: expected struct sched_domain *[assigned] tmp
> kernel/sched/topology.c:826:13: sparse: got struct sched_domain [noderef] __rcu *sd
> kernel/sched/topology.c:1069:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *sdp @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:1069:38: sparse: expected struct sched_domain *sdp
> kernel/sched/topology.c:1069:38: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:1076:21: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sdp @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:1076:21: sparse: expected struct sched_domain *sdp
> kernel/sched/topology.c:1076:21: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:1223:70: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1223:70: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:1223:70: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1252:59: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1252:59: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:1252:59: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1298:57: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1298:57: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:1298:57: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1300:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sibling @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1300:25: sparse: expected struct sched_domain *sibling
> kernel/sched/topology.c:1300:25: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1308:55: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1308:55: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:1308:55: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1310:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *sibling @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1310:25: sparse: expected struct sched_domain *sibling
> kernel/sched/topology.c:1310:25: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1380:62: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1380:62: sparse: expected struct sched_domain *sd
> kernel/sched/topology.c:1380:62: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1484:40: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *child @@ got struct sched_domain [noderef] __rcu *child @@
> kernel/sched/topology.c:1484:40: sparse: expected struct sched_domain *child
> kernel/sched/topology.c:1484:40: sparse: got struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1620:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:1620:9: sparse: expected struct sched_domain *[assigned] sd
> kernel/sched/topology.c:1620:9: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:1877:52: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:1877:52: sparse: expected struct sched_domain *[assigned] sd
> kernel/sched/topology.c:1877:52: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:1987:43: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain [noderef] __rcu *child @@ got struct sched_domain *child @@
> kernel/sched/topology.c:1987:43: sparse: expected struct sched_domain [noderef] __rcu *child
> kernel/sched/topology.c:1987:43: sparse: got struct sched_domain *child
> kernel/sched/topology.c:2791:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain [noderef] __rcu *parent @@ got struct sched_domain *sd @@
> kernel/sched/topology.c:2791:31: sparse: expected struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:2791:31: sparse: got struct sched_domain *sd
> kernel/sched/topology.c:2919:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *[noderef] __rcu parent @@
> kernel/sched/topology.c:2919:16: sparse: expected struct sched_domain *parent
> kernel/sched/topology.c:2919:16: sparse: got struct sched_domain [noderef] __rcu *[noderef] __rcu parent
> kernel/sched/topology.c:2921:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:2921:24: sparse: expected struct sched_domain *parent
> kernel/sched/topology.c:2921:24: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:2926:16: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:2926:16: sparse: expected struct sched_domain *parent
> kernel/sched/topology.c:2926:16: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:2931:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *parent @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:2931:24: sparse: expected struct sched_domain *parent
> kernel/sched/topology.c:2931:24: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:3008:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd_asym @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:3008:25: sparse: expected struct sched_domain *[assigned] sd_asym
> kernel/sched/topology.c:3008:25: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:3143:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:3143:57: sparse: expected struct sched_domain *[assigned] sd
> kernel/sched/topology.c:3143:57: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:3165:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:3165:28: sparse: expected struct sched_domain *[assigned] sd
> kernel/sched/topology.c:3165:28: sparse: got struct sched_domain [noderef] __rcu *parent
> kernel/sched/topology.c:3191:57: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
> kernel/sched/topology.c:3191:57: sparse: expected struct sched_domain *[assigned] sd
> kernel/sched/topology.c:3191:57: sparse: got struct sched_domain [noderef] __rcu *parent
Hi Andrew, Peter,
Thanks test robot! I will fix these __rcu Sparse warnings
(make C=2 kernel/sched/) on rq->curr using rcu_dereference() and send a
version 2.
Kind regards,
--
Aaron Tomlin
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-12 1:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-11 2:28 [PATCH] sched/debug, sys_info: Introduce SYS_INFO_CPU_RUNQUEUES Aaron Tomlin
2026-09-11 20:45 ` kernel test robot
2026-09-12 1:00 ` Aaron Tomlin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®