When running a multi-instance FFmpeg workload on HCC system, significant
contention is observed on root_domain `rto_count` and `overloaded` fields.
The SUT is a 2-socket machine with 240 physical cores and 480 logical
CPUs. 60 FFmpeg instances are launched, each pinned to 4 physical cores
(8 logical CPUs) for transcoding tasks. Sub-threads use RT priority 99
with FIFO scheduling. FPS is used as score.
perf c2c tool reveals:
root_domain cache line 1:
- `rto_count` (0x4) is frequently loaded/stored
- `overloaded` (0x28) is heavily loaded
- cycles per load: ~2.8K to 44K:
A separate patch rearranges root_domain to place `overloaded` on a
different cache line, but this alone is insufficient to resolve the
contention on `rto_count`. As a complementary, this patch splits
`rto_count` into per-numa-node counters to reduce the contention.
With this change:
- FPS improves by ~4%
- Kernel cycles% drops from ~20% to ~18.6%
- The cache line no longer appears in perf-c2c report
Appendix:
1. Perf c2c report of root_domain cache line 1:
------- ------- ------ ------ ------ ------ ------------------------
Rmt Lcl Store Data Load Total Symbol
Hitm% Hitm% L1 Hit% offset cycles records
------- ------- ------ ------ ------ ------ ------------------------
231 43 48 0xff14d42c400e3800
------- ------- ------ ------ ------ ------ ------------------------
22.51% 18.60% 0.00% 0x4 5041 247 pull_rt_task
5.63% 2.33% 45.83% 0x4 6995 315 dequeue_pushable_task
3.90% 4.65% 54.17% 0x4 6587 370 enqueue_pushable_task
0.43% 0.00% 0.00% 0x4 17111 4 enqueue_pushable_task
0.43% 0.00% 0.00% 0x4 44062 4 dequeue_pushable_task
32.03% 27.91% 0.00% 0x28 6393 285 enqueue_task_rt
16.45% 27.91% 0.00% 0x28 5534 139 sched_balance_newidle
14.72% 18.60% 0.00% 0x28 5287 110 dequeue_task_rt
3.46% 0.00% 0.00% 0x28 2820 25 enqueue_task_fair
0.43% 0.00% 0.00% 0x28 220 3 enqueue_task_stop
Signed-off-by: Pan Deng <pan.deng@intel.com>
Reviewed-by: Tianyou Li <tianyou.li@intel.com>
Reviewed-by: Chen Yu <yu.c.chen@intel.com>
---
kernel/sched/rt.c | 65 +++++++++++++++++++++++++++++++++++++++--
kernel/sched/sched.h | 9 +++++-
kernel/sched/topology.c | 7 +++++
3 files changed, 77 insertions(+), 4 deletions(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index e40422c37033..cc820dbde6d6 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -337,9 +337,58 @@ static inline bool need_pull_rt_task(struct rq *rq, struct task_struct *prev)
return rq->online && rq->rt.highest_prio.curr > prev->prio;
}
+int rto_counts_init(atomic_tp **rto_counts)
+{
+ int i;
+ atomic_tp *counts = kzalloc(nr_node_ids * sizeof(atomic_tp), GFP_KERNEL);
+
+ if (!counts)
+ return -ENOMEM;
+
+ for (i = 0; i < nr_node_ids; i++) {
+ counts[i] = kzalloc_node(sizeof(atomic_t), GFP_KERNEL, i);
+
+ if (!counts[i])
+ goto cleanup;
+ }
+
+ *rto_counts = counts;
+ return 0;
+
+cleanup:
+ while (i--)
+ kfree(counts[i]);
+
+ kfree(counts);
+ return -ENOMEM;
+}
+
+void rto_counts_cleanup(atomic_tp *rto_counts)
+{
+ for (int i = 0; i < nr_node_ids; i++)
+ kfree(rto_counts[i]);
+
+ kfree(rto_counts);
+}
+
static inline int rt_overloaded(struct rq *rq)
{
- return atomic_read(&rq->rd->rto_count);
+ int count = 0;
+ int cur_node, nid;
+
+ cur_node = numa_node_id();
+
+ for (int i = 0; i < nr_node_ids; i++) {
+ nid = (cur_node + i) % nr_node_ids;
+ count += atomic_read(rq->rd->rto_counts[nid]);
+
+ // The caller only checks if it is 0
+ // or 1, so that return once > 1
+ if (count > 1)
+ return count;
+ }
+
+ return count;
}
static inline void rt_set_overload(struct rq *rq)
@@ -358,7 +407,7 @@ static inline void rt_set_overload(struct rq *rq)
* Matched by the barrier in pull_rt_task().
*/
smp_wmb();
- atomic_inc(&rq->rd->rto_count);
+ atomic_inc(rq->rd->rto_counts[cpu_to_node(rq->cpu)]);
}
static inline void rt_clear_overload(struct rq *rq)
@@ -367,7 +416,7 @@ static inline void rt_clear_overload(struct rq *rq)
return;
/* the order here really doesn't matter */
- atomic_dec(&rq->rd->rto_count);
+ atomic_dec(rq->rd->rto_counts[cpu_to_node(rq->cpu)]);
cpumask_clear_cpu(rq->cpu, rq->rd->rto_mask);
}
@@ -443,6 +492,16 @@ static inline void dequeue_pushable_task(struct rq *rq, struct task_struct *p)
static inline void rt_queue_push_tasks(struct rq *rq)
{
}
+
+int rto_counts_init(atomic_tp **rto_counts)
+{
+ return 0;
+}
+
+void rto_counts_cleanup(atomic_tp *rto_counts)
+{
+}
+
#endif /* CONFIG_SMP */
static void enqueue_top_rt_rq(struct rt_rq *rt_rq);
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index dd3c79470bfc..f80968724dd6 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -953,6 +953,8 @@ struct perf_domain {
struct rcu_head rcu;
};
+typedef atomic_t *atomic_tp;
+
/*
* We add the notion of a root-domain which will be used to define per-domain
* variables. Each exclusive cpuset essentially defines an island domain by
@@ -963,12 +965,15 @@ struct perf_domain {
*/
struct root_domain {
atomic_t refcount;
- atomic_t rto_count;
struct rcu_head rcu;
cpumask_var_t span;
cpumask_var_t online;
atomic_t dlo_count;
+
+ /* rto_count per node */
+ atomic_tp *rto_counts;
+
struct dl_bw dl_bw;
struct cpudl cpudl;
@@ -1030,6 +1035,8 @@ extern int sched_init_domains(const struct cpumask *cpu_map);
extern void rq_attach_root(struct rq *rq, struct root_domain *rd);
extern void sched_get_rd(struct root_domain *rd);
extern void sched_put_rd(struct root_domain *rd);
+extern int rto_counts_init(atomic_tp **rto_counts);
+extern void rto_counts_cleanup(atomic_tp *rto_counts);
static inline int get_rd_overloaded(struct root_domain *rd)
{
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index b958fe48e020..166dc8177a44 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -457,6 +457,7 @@ static void free_rootdomain(struct rcu_head *rcu)
{
struct root_domain *rd = container_of(rcu, struct root_domain, rcu);
+ rto_counts_cleanup(rd->rto_counts);
cpupri_cleanup(&rd->cpupri);
cpudl_cleanup(&rd->cpudl);
free_cpumask_var(rd->dlo_mask);
@@ -549,8 +550,14 @@ static int init_rootdomain(struct root_domain *rd)
if (cpupri_init(&rd->cpupri) != 0)
goto free_cpudl;
+
+ if (rto_counts_init(&rd->rto_counts) != 0)
+ goto free_cpupri;
+
return 0;
+free_cpupri:
+ cpupri_cleanup(&rd->cpupri);
free_cpudl:
cpudl_cleanup(&rd->cpudl);
free_rto_mask:
--
2.43.5
Hi Pan, kernel test robot noticed the following build warnings: [auto build test WARNING on v6.16-rc5] [also build test WARNING on linus/master] [cannot apply to tip/sched/core peterz-queue/sched/core tip/master tip/auto-latest next-20250704] [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/Pan-Deng/sched-rt-Optimize-cpupri_vec-layout-to-mitigate-cache-line-contention/20250707-131831 base: v6.16-rc5 patch link: https://lore.kernel.org/r/2c1e1dbacaddd881f3cca340ece1f9268029b620.1751852370.git.pan.deng%40intel.com patch subject: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per-NUMA-node counters config: loongarch-randconfig-r112-20250708 (https://download.01.org/0day-ci/archive/20250708/202507081317.4IdE2euZ-lkp@intel.com/config) compiler: loongarch64-linux-gcc (GCC) 15.1.0 reproduce: (https://download.01.org/0day-ci/archive/20250708/202507081317.4IdE2euZ-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/202507081317.4IdE2euZ-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) kernel/sched/rt.c:1679:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/rt.c:1679:45: sparse: expected struct task_struct *p kernel/sched/rt.c:1679:45: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/rt.c:1722:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/rt.c:1722:39: sparse: expected struct task_struct *donor kernel/sched/rt.c:1722:39: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/rt.c:1742:64: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/rt.c:1742:64: sparse: expected struct task_struct *tsk kernel/sched/rt.c:1742:64: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/rt.c:2084:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *task @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/rt.c:2084:40: sparse: expected struct task_struct *task kernel/sched/rt.c:2084:40: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/rt.c:2107:13: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/rt.c:2107:13: sparse: struct task_struct * kernel/sched/rt.c:2107:13: sparse: struct task_struct [noderef] __rcu * kernel/sched/rt.c:2453:54: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/rt.c:2453:54: sparse: expected struct task_struct *tsk kernel/sched/rt.c:2453:54: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/rt.c:2455:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/rt.c:2455:40: sparse: expected struct task_struct *p kernel/sched/rt.c:2455:40: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/rt.c:2455:62: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/rt.c:2455:62: sparse: expected struct task_struct *p kernel/sched/rt.c:2455:62: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/build_policy.c: note: in included file: kernel/sched/deadline.c:2717:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/deadline.c:2717:23: sparse: expected struct task_struct *p kernel/sched/deadline.c:2717:23: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/deadline.c:2727:13: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/deadline.c:2727:13: sparse: struct task_struct * kernel/sched/deadline.c:2727:13: sparse: struct task_struct [noderef] __rcu * kernel/sched/deadline.c:2833:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/deadline.c:2833:25: sparse: struct task_struct * kernel/sched/deadline.c:2833:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/deadline.c:2357:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@ kernel/sched/deadline.c:2357:42: sparse: expected struct sched_dl_entity const *b kernel/sched/deadline.c:2357:42: sparse: got struct sched_dl_entity [noderef] __rcu * kernel/sched/deadline.c:2368:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/deadline.c:2368:38: sparse: expected struct task_struct *tsk kernel/sched/deadline.c:2368:38: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/deadline.c:1262:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/deadline.c:1262:39: sparse: expected struct task_struct *p kernel/sched/deadline.c:1262:39: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/deadline.c:1262:85: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@ kernel/sched/deadline.c:1262:85: sparse: expected struct sched_dl_entity const *b kernel/sched/deadline.c:1262:85: sparse: got struct sched_dl_entity [noderef] __rcu * kernel/sched/deadline.c:1362:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/deadline.c:1362:23: sparse: expected struct task_struct *p kernel/sched/deadline.c:1362:23: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/deadline.c:1671:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/deadline.c:1671:31: sparse: expected struct task_struct *p kernel/sched/deadline.c:1671:31: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/deadline.c:1671:70: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@ kernel/sched/deadline.c:1671:70: sparse: expected struct sched_dl_entity const *b kernel/sched/deadline.c:1671:70: sparse: got struct sched_dl_entity [noderef] __rcu * kernel/sched/deadline.c:1760:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/deadline.c:1760:39: sparse: expected struct task_struct *donor kernel/sched/deadline.c:1760:39: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/deadline.c:2578: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/deadline.c:2578:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/deadline.c:2578:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/deadline.c:2242:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu * @@ kernel/sched/deadline.c:2242:14: sparse: expected struct task_struct *curr kernel/sched/deadline.c:2242:14: sparse: got struct task_struct [noderef] __rcu * kernel/sched/deadline.c:2243:15: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu * @@ kernel/sched/deadline.c:2243:15: sparse: expected struct task_struct *donor kernel/sched/deadline.c:2243:15: sparse: got struct task_struct [noderef] __rcu * kernel/sched/deadline.c:2318:43: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/deadline.c:2318:43: sparse: expected struct task_struct *p kernel/sched/deadline.c:2318:43: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/deadline.c:2878:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/deadline.c:2878:38: sparse: expected struct task_struct *tsk kernel/sched/deadline.c:2878:38: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/deadline.c:2880:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/deadline.c:2880:23: sparse: expected struct task_struct *p kernel/sched/deadline.c:2880:23: sparse: got struct task_struct [noderef] __rcu *donor kernel/sched/deadline.c:2882:44: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@ kernel/sched/deadline.c:2882:44: sparse: expected struct sched_dl_entity const *b kernel/sched/deadline.c:2882:44: sparse: got struct sched_dl_entity [noderef] __rcu * kernel/sched/deadline.c:3071:23: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/deadline.c:3071:23: sparse: struct task_struct [noderef] __rcu * kernel/sched/deadline.c:3071:23: sparse: struct task_struct * kernel/sched/deadline.c:3120:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/build_policy.c: note: in included file: kernel/sched/syscalls.c:206:22: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/syscalls.c:206:22: sparse: struct task_struct [noderef] __rcu * kernel/sched/syscalls.c:206:22: sparse: struct task_struct * kernel/sched/build_policy.c: note: in included file: kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2276:25: sparse: struct task_struct * kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2276:25: sparse: struct task_struct * kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2287:26: sparse: struct task_struct * kernel/sched/build_policy.c: note: in included file: kernel/sched/rt.c:2413:45: sparse: sparse: dereference of noderef expression kernel/sched/build_policy.c: note: in included file: >> kernel/sched/sched.h:2627:35: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@ kernel/sched/build_policy.c: note: in included file: kernel/sched/rt.c:2456:32: sparse: sparse: dereference of noderef expression kernel/sched/rt.c:2457:32: sparse: sparse: dereference of noderef expression kernel/sched/build_policy.c: note: in included file: kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2276:25: sparse: struct task_struct * kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2287:26: sparse: struct task_struct * kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2276:25: sparse: struct task_struct * kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2276:25: sparse: struct task_struct * kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2287:26: sparse: struct task_struct * kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2287:26: sparse: struct task_struct * kernel/sched/sched.h:2476:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2476:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2476:9: sparse: struct task_struct * kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2287:26: sparse: struct task_struct * kernel/sched/sched.h:2476:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2476:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2476:9: sparse: struct task_struct * kernel/sched/build_policy.c: note: in included file: kernel/sched/syscalls.c:1296:6: sparse: sparse: context imbalance in 'sched_getaffinity' - different lock contexts for basic block kernel/sched/build_policy.c: note: in included file: kernel/sched/rt.c:1767:15: sparse: sparse: dereference of noderef expression vim +2627 kernel/sched/sched.h 04746ed80bcf31 Ingo Molnar 2024-04-07 2624 a7c81556ec4d34 Peter Zijlstra 2020-09-28 2625 static inline struct task_struct *get_push_task(struct rq *rq) a7c81556ec4d34 Peter Zijlstra 2020-09-28 2626 { af0c8b2bf67b25 Peter Zijlstra 2024-10-09 @2627 struct task_struct *p = rq->donor; a7c81556ec4d34 Peter Zijlstra 2020-09-28 2628 5cb9eaa3d274f7 Peter Zijlstra 2020-11-17 2629 lockdep_assert_rq_held(rq); a7c81556ec4d34 Peter Zijlstra 2020-09-28 2630 a7c81556ec4d34 Peter Zijlstra 2020-09-28 2631 if (rq->push_busy) a7c81556ec4d34 Peter Zijlstra 2020-09-28 2632 return NULL; a7c81556ec4d34 Peter Zijlstra 2020-09-28 2633 a7c81556ec4d34 Peter Zijlstra 2020-09-28 2634 if (p->nr_cpus_allowed == 1) a7c81556ec4d34 Peter Zijlstra 2020-09-28 2635 return NULL; a7c81556ec4d34 Peter Zijlstra 2020-09-28 2636 e681dcbaa4b284 Sebastian Andrzej Siewior 2021-08-26 2637 if (p->migration_disabled) e681dcbaa4b284 Sebastian Andrzej Siewior 2021-08-26 2638 return NULL; e681dcbaa4b284 Sebastian Andrzej Siewior 2021-08-26 2639 a7c81556ec4d34 Peter Zijlstra 2020-09-28 2640 rq->push_busy = true; a7c81556ec4d34 Peter Zijlstra 2020-09-28 2641 return get_task_struct(p); a7c81556ec4d34 Peter Zijlstra 2020-09-28 2642 } a7c81556ec4d34 Peter Zijlstra 2020-09-28 2643 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
> -----Original Message----- > From: lkp <lkp@intel.com> > Sent: Tuesday, July 8, 2025 1:34 PM > To: Deng, Pan <pan.deng@intel.com>; peterz@infradead.org; mingo@kernel.org > Cc: oe-kbuild-all@lists.linux.dev; linux-kernel@vger.kernel.org; Li, Tianyou > <tianyou.li@intel.com>; tim.c.chen@linux.intel.com; Chen, Yu C > <yu.c.chen@intel.com>; Deng, Pan <pan.deng@intel.com> > Subject: Re: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per-NUMA- > node counters > > Hi Pan, > > kernel test robot noticed the following build warnings: > > [auto build test WARNING on v6.16-rc5] > [also build test WARNING on linus/master] [cannot apply to tip/sched/core > peterz-queue/sched/core tip/master tip/auto-latest next-20250704] [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/Pan-Deng/sched-rt- > Optimize-cpupri_vec-layout-to-mitigate-cache-line-contention/20250707-131831 > base: v6.16-rc5 > patch link: > https://lore.kernel.org/r/2c1e1dbacaddd881f3cca340ece1f9268029b620.175185 > 2370.git.pan.deng%40intel.com > patch subject: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per-NUMA- > node counters > config: loongarch-randconfig-r112-20250708 (https://download.01.org/0day- > ci/archive/20250708/202507081317.4IdE2euZ-lkp@intel.com/config) > compiler: loongarch64-linux-gcc (GCC) 15.1.0 > reproduce: (https://download.01.org/0day- > ci/archive/20250708/202507081317.4IdE2euZ-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/202507081317.4IdE2euZ-lkp@intel. > | com/ > > sparse warnings: (new ones prefixed by >>) > kernel/sched/rt.c:1679:45: sparse: sparse: incorrect type in argument 2 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/rt.c:1679:45: sparse: expected struct task_struct *p > kernel/sched/rt.c:1679:45: sparse: got struct task_struct [noderef] __rcu > *donor > kernel/sched/rt.c:1722:39: sparse: sparse: incorrect type in initializer (different > address spaces) @@ expected struct task_struct *donor @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/rt.c:1722:39: sparse: expected struct task_struct *donor > kernel/sched/rt.c:1722:39: sparse: got struct task_struct [noderef] __rcu > *donor > kernel/sched/rt.c:1742:64: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *tsk @@ got > struct task_struct [noderef] __rcu *curr @@ > kernel/sched/rt.c:1742:64: sparse: expected struct task_struct *tsk > kernel/sched/rt.c:1742:64: sparse: got struct task_struct [noderef] __rcu > *curr > kernel/sched/rt.c:2084:40: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *task @@ got > struct task_struct [noderef] __rcu *curr @@ > kernel/sched/rt.c:2084:40: sparse: expected struct task_struct *task > kernel/sched/rt.c:2084:40: sparse: got struct task_struct [noderef] __rcu > *curr > kernel/sched/rt.c:2107:13: sparse: sparse: incompatible types in comparison > expression (different address spaces): > kernel/sched/rt.c:2107:13: sparse: struct task_struct * > kernel/sched/rt.c:2107:13: sparse: struct task_struct [noderef] __rcu * > kernel/sched/rt.c:2453:54: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *tsk @@ got > struct task_struct [noderef] __rcu *curr @@ > kernel/sched/rt.c:2453:54: sparse: expected struct task_struct *tsk > kernel/sched/rt.c:2453:54: sparse: got struct task_struct [noderef] __rcu > *curr > kernel/sched/rt.c:2455:40: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/rt.c:2455:40: sparse: expected struct task_struct *p > kernel/sched/rt.c:2455:40: sparse: got struct task_struct [noderef] __rcu > *donor > kernel/sched/rt.c:2455:62: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/rt.c:2455:62: sparse: expected struct task_struct *p > kernel/sched/rt.c:2455:62: sparse: got struct task_struct [noderef] __rcu > *donor > kernel/sched/build_policy.c: note: in included file: > kernel/sched/deadline.c:2717:23: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/deadline.c:2717:23: sparse: expected struct task_struct *p > kernel/sched/deadline.c:2717:23: sparse: got struct task_struct [noderef] > __rcu *donor > kernel/sched/deadline.c:2727:13: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/deadline.c:2727:13: sparse: struct task_struct * > kernel/sched/deadline.c:2727:13: sparse: struct task_struct [noderef] __rcu * > kernel/sched/deadline.c:2833:25: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/deadline.c:2833:25: sparse: struct task_struct * > kernel/sched/deadline.c:2833:25: sparse: struct task_struct [noderef] __rcu * > kernel/sched/deadline.c:2357:42: sparse: sparse: incorrect type in argument 2 > (different address spaces) @@ expected struct sched_dl_entity const *b @@ > got struct sched_dl_entity [noderef] __rcu * @@ > kernel/sched/deadline.c:2357:42: sparse: expected struct sched_dl_entity > const *b > kernel/sched/deadline.c:2357:42: sparse: got struct sched_dl_entity > [noderef] __rcu * > kernel/sched/deadline.c:2368:38: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *tsk @@ got > struct task_struct [noderef] __rcu *curr @@ > kernel/sched/deadline.c:2368:38: sparse: expected struct task_struct *tsk > kernel/sched/deadline.c:2368:38: sparse: got struct task_struct [noderef] > __rcu *curr > kernel/sched/deadline.c:1262:39: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *curr @@ > kernel/sched/deadline.c:1262:39: sparse: expected struct task_struct *p > kernel/sched/deadline.c:1262:39: sparse: got struct task_struct [noderef] > __rcu *curr > kernel/sched/deadline.c:1262:85: sparse: sparse: incorrect type in argument 2 > (different address spaces) @@ expected struct sched_dl_entity const *b @@ > got struct sched_dl_entity [noderef] __rcu * @@ > kernel/sched/deadline.c:1262:85: sparse: expected struct sched_dl_entity > const *b > kernel/sched/deadline.c:1262:85: sparse: got struct sched_dl_entity > [noderef] __rcu * > kernel/sched/deadline.c:1362:23: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/deadline.c:1362:23: sparse: expected struct task_struct *p > kernel/sched/deadline.c:1362:23: sparse: got struct task_struct [noderef] > __rcu *donor > kernel/sched/deadline.c:1671:31: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *curr @@ > kernel/sched/deadline.c:1671:31: sparse: expected struct task_struct *p > kernel/sched/deadline.c:1671:31: sparse: got struct task_struct [noderef] > __rcu *curr > kernel/sched/deadline.c:1671:70: sparse: sparse: incorrect type in argument 2 > (different address spaces) @@ expected struct sched_dl_entity const *b @@ > got struct sched_dl_entity [noderef] __rcu * @@ > kernel/sched/deadline.c:1671:70: sparse: expected struct sched_dl_entity > const *b > kernel/sched/deadline.c:1671:70: sparse: got struct sched_dl_entity > [noderef] __rcu * > kernel/sched/deadline.c:1760:39: sparse: sparse: incorrect type in initializer > (different address spaces) @@ expected struct task_struct *donor @@ got > struct task_struct [noderef] __rcu *donor @@ > kernel/sched/deadline.c:1760:39: sparse: expected struct task_struct *donor > kernel/sched/deadline.c:1760:39: sparse: got struct task_struct [noderef] > __rcu *donor > kernel/sched/deadline.c:2578: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/deadline.c:2578:9: sparse: expected struct sched_domain > *[assigned] sd > kernel/sched/deadline.c:2578:9: sparse: got struct sched_domain [noderef] > __rcu *parent > kernel/sched/deadline.c:2242:14: sparse: sparse: incorrect type in assignment > (different address spaces) @@ expected struct task_struct *curr @@ got > struct task_struct [noderef] __rcu * @@ > kernel/sched/deadline.c:2242:14: sparse: expected struct task_struct *curr > kernel/sched/deadline.c:2242:14: sparse: got struct task_struct [noderef] > __rcu * > kernel/sched/deadline.c:2243:15: sparse: sparse: incorrect type in assignment > (different address spaces) @@ expected struct task_struct *donor @@ got > struct task_struct [noderef] __rcu * @@ > kernel/sched/deadline.c:2243:15: sparse: expected struct task_struct *donor > kernel/sched/deadline.c:2243:15: sparse: got struct task_struct [noderef] > __rcu * > kernel/sched/deadline.c:2318:43: sparse: sparse: incorrect type in argument 2 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/deadline.c:2318:43: sparse: expected struct task_struct *p > kernel/sched/deadline.c:2318:43: sparse: got struct task_struct [noderef] > __rcu *donor > kernel/sched/deadline.c:2878:38: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *tsk @@ got > struct task_struct [noderef] __rcu *curr @@ > kernel/sched/deadline.c:2878:38: sparse: expected struct task_struct *tsk > kernel/sched/deadline.c:2878:38: sparse: got struct task_struct [noderef] > __rcu *curr > kernel/sched/deadline.c:2880:23: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/deadline.c:2880:23: sparse: expected struct task_struct *p > kernel/sched/deadline.c:2880:23: sparse: got struct task_struct [noderef] > __rcu *donor > kernel/sched/deadline.c:2882:44: sparse: sparse: incorrect type in argument 2 > (different address spaces) @@ expected struct sched_dl_entity const *b @@ > got struct sched_dl_entity [noderef] __rcu * @@ > kernel/sched/deadline.c:2882:44: sparse: expected struct sched_dl_entity > const *b > kernel/sched/deadline.c:2882:44: sparse: got struct sched_dl_entity > [noderef] __rcu * > kernel/sched/deadline.c:3071:23: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/deadline.c:3071:23: sparse: struct task_struct [noderef] __rcu * > kernel/sched/deadline.c:3071:23: sparse: struct task_struct * > kernel/sched/deadline.c:3120:32: sparse: sparse: incorrect type in argument 1 > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *curr @@ > kernel/sched/build_policy.c: note: in included file: > kernel/sched/syscalls.c:206:22: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/syscalls.c:206:22: sparse: struct task_struct [noderef] __rcu * > kernel/sched/syscalls.c:206:22: sparse: struct task_struct * > kernel/sched/build_policy.c: note: in included file: > kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2287:26: sparse: struct task_struct * > kernel/sched/build_policy.c: note: in included file: > kernel/sched/rt.c:2413:45: sparse: sparse: dereference of noderef expression > kernel/sched/build_policy.c: note: in included file: > >> kernel/sched/sched.h:2627:35: sparse: sparse: incorrect type in initializer This warning is not about the change we made, @lkp, could you please check it? > (different address spaces) @@ expected struct task_struct *p @@ got struct > task_struct [noderef] __rcu *donor @@ > kernel/sched/build_policy.c: note: in included file: > kernel/sched/rt.c:2456:32: sparse: sparse: dereference of noderef expression > kernel/sched/rt.c:2457:32: sparse: sparse: dereference of noderef expression > kernel/sched/build_policy.c: note: in included file: > kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2287:26: sparse: struct task_struct * > kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2287:26: sparse: struct task_struct * > kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2287:26: sparse: struct task_struct * > kernel/sched/sched.h:2476:9: sparse: sparse: incompatible types in comparison > expression (different address spaces): > kernel/sched/sched.h:2476:9: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2476:9: sparse: struct task_struct * > kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in > comparison expression (different address spaces): > kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2287:26: sparse: struct task_struct * > kernel/sched/sched.h:2476:9: sparse: sparse: incompatible types in comparison > expression (different address spaces): > kernel/sched/sched.h:2476:9: sparse: struct task_struct [noderef] __rcu * > kernel/sched/sched.h:2476:9: sparse: struct task_struct * > kernel/sched/build_policy.c: note: in included file: > kernel/sched/syscalls.c:1296:6: sparse: sparse: context imbalance in > 'sched_getaffinity' - different lock contexts for basic block > kernel/sched/build_policy.c: note: in included file: > kernel/sched/rt.c:1767:15: sparse: sparse: dereference of noderef expression > > vim +2627 kernel/sched/sched.h > > 04746ed80bcf31 Ingo Molnar 2024-04-07 2624 > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2625 static inline struct > task_struct *get_push_task(struct rq *rq) > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2626 { > af0c8b2bf67b25 Peter Zijlstra 2024-10-09 @2627 struct task_struct *p = > rq->donor; > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2628 > 5cb9eaa3d274f7 Peter Zijlstra 2020-11-17 2629 > lockdep_assert_rq_held(rq); > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2630 > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2631 if (rq->push_busy) > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2632 return NULL; > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2633 > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2634 if (p->nr_cpus_allowed > == 1) > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2635 return NULL; > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2636 > e681dcbaa4b284 Sebastian Andrzej Siewior 2021-08-26 2637 if (p- > >migration_disabled) > e681dcbaa4b284 Sebastian Andrzej Siewior 2021-08-26 2638 return > NULL; > e681dcbaa4b284 Sebastian Andrzej Siewior 2021-08-26 2639 > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2640 rq->push_busy = true; > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2641 return > get_task_struct(p); > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2642 } > a7c81556ec4d34 Peter Zijlstra 2020-09-28 2643 > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests/wiki
> > comparison expression (different address spaces): > > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > > kernel/sched/sched.h:2276:25: sparse: sparse: incompatible types in > > comparison expression (different address spaces): > > kernel/sched/sched.h:2276:25: sparse: struct task_struct [noderef] __rcu * > > kernel/sched/sched.h:2276:25: sparse: struct task_struct * > > kernel/sched/sched.h:2287:26: sparse: sparse: incompatible types in > > comparison expression (different address spaces): > > kernel/sched/sched.h:2287:26: sparse: struct task_struct [noderef] __rcu * > > kernel/sched/sched.h:2287:26: sparse: struct task_struct * > > kernel/sched/build_policy.c: note: in included file: > > kernel/sched/rt.c:2413:45: sparse: sparse: dereference of noderef expression > > kernel/sched/build_policy.c: note: in included file: > > >> kernel/sched/sched.h:2627:35: sparse: sparse: incorrect type in initializer > This warning is not about the change we made, @lkp, could you please check it? Sorry for this false report, it should not be related to your changes. We will follow up to figure out what is wrong during the bisections. Sorry for wasting your time.
Hi Pan, kernel test robot noticed the following build errors: [auto build test ERROR on v6.16-rc5] [also build test ERROR on linus/master] [cannot apply to tip/sched/core peterz-queue/sched/core tip/master tip/auto-latest next-20250704] [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/Pan-Deng/sched-rt-Optimize-cpupri_vec-layout-to-mitigate-cache-line-contention/20250707-131831 base: v6.16-rc5 patch link: https://lore.kernel.org/r/2c1e1dbacaddd881f3cca340ece1f9268029b620.1751852370.git.pan.deng%40intel.com patch subject: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per-NUMA-node counters config: arm-randconfig-002-20250707 (https://download.01.org/0day-ci/archive/20250707/202507071453.DYRB711b-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250707/202507071453.DYRB711b-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/202507071453.DYRB711b-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from kernel/sched/build_policy.c:52: >> kernel/sched/rt.c:496:21: error: unknown type name 'atomic_tp'; did you mean 'atomic_t'? 496 | int rto_counts_init(atomic_tp **rto_counts) | ^~~~~~~~~ | atomic_t kernel/sched/rt.c:501:25: error: unknown type name 'atomic_tp'; did you mean 'atomic_t'? 501 | void rto_counts_cleanup(atomic_tp *rto_counts) | ^~~~~~~~~ | atomic_t vim +496 kernel/sched/rt.c 495 > 496 int rto_counts_init(atomic_tp **rto_counts) 497 { 498 return 0; 499 } 500 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Hi Pan, kernel test robot noticed the following build warnings: [auto build test WARNING on v6.16-rc5] [also build test WARNING on linus/master] [cannot apply to tip/sched/core peterz-queue/sched/core tip/master tip/auto-latest next-20250704] [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/Pan-Deng/sched-rt-Optimize-cpupri_vec-layout-to-mitigate-cache-line-contention/20250707-131831 base: v6.16-rc5 patch link: https://lore.kernel.org/r/2c1e1dbacaddd881f3cca340ece1f9268029b620.1751852370.git.pan.deng%40intel.com patch subject: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per-NUMA-node counters config: arm-allnoconfig (https://download.01.org/0day-ci/archive/20250707/202507071418.sFa0bilv-lkp@intel.com/config) compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 01c97b4953e87ae455bd4c41e3de3f0f0f29c61c) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250707/202507071418.sFa0bilv-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/202507071418.sFa0bilv-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from kernel/sched/build_policy.c:52: kernel/sched/rt.c:496:21: error: unknown type name 'atomic_tp'; did you mean 'atomic_t'? 496 | int rto_counts_init(atomic_tp **rto_counts) | ^~~~~~~~~ | atomic_t include/linux/types.h:183:3: note: 'atomic_t' declared here 183 | } atomic_t; | ^ In file included from kernel/sched/build_policy.c:52: >> kernel/sched/rt.c:496:5: warning: no previous prototype for function 'rto_counts_init' [-Wmissing-prototypes] 496 | int rto_counts_init(atomic_tp **rto_counts) | ^ kernel/sched/rt.c:496:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 496 | int rto_counts_init(atomic_tp **rto_counts) | ^ | static kernel/sched/rt.c:501:25: error: unknown type name 'atomic_tp'; did you mean 'atomic_t'? 501 | void rto_counts_cleanup(atomic_tp *rto_counts) | ^~~~~~~~~ | atomic_t include/linux/types.h:183:3: note: 'atomic_t' declared here 183 | } atomic_t; | ^ In file included from kernel/sched/build_policy.c:52: >> kernel/sched/rt.c:501:6: warning: no previous prototype for function 'rto_counts_cleanup' [-Wmissing-prototypes] 501 | void rto_counts_cleanup(atomic_tp *rto_counts) | ^ kernel/sched/rt.c:501:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 501 | void rto_counts_cleanup(atomic_tp *rto_counts) | ^ | static 2 warnings and 2 errors generated. vim +/rto_counts_init +496 kernel/sched/rt.c 495 > 496 int rto_counts_init(atomic_tp **rto_counts) 497 { 498 return 0; 499 } 500 > 501 void rto_counts_cleanup(atomic_tp *rto_counts) 502 { 503 } 504 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
The issue arises from redundant functions when CONFIG_SMP is disabled, it will be addressed along with other feedback in the next version. Best Regards Pan > -----Original Message----- > From: lkp <lkp@intel.com> > Sent: Monday, July 7, 2025 2:53 PM > To: Deng, Pan <pan.deng@intel.com>; mingo@kernel.org > Cc: llvm@lists.linux.dev; oe-kbuild-all@lists.linux.dev; linux- > kernel@vger.kernel.org; Li, Tianyou <tianyou.li@intel.com>; > tim.c.chen@linux.intel.com; Chen, Yu C <yu.c.chen@intel.com>; Deng, Pan > <pan.deng@intel.com> > Subject: Re: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per-NUMA- > node counters > > Hi Pan, > > kernel test robot noticed the following build warnings: > > [auto build test WARNING on v6.16-rc5] > [also build test WARNING on linus/master] [cannot apply to tip/sched/core > peterz-queue/sched/core tip/master tip/auto-latest next-20250704] [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/Pan-Deng/sched-rt- > Optimize-cpupri_vec-layout-to-mitigate-cache-line-contention/20250707- > 131831 > base: v6.16-rc5 > patch link: > https://lore.kernel.org/r/2c1e1dbacaddd881f3cca340ece1f9268029b620.1751 > 852370.git.pan.deng%40intel.com > patch subject: [PATCH 3/4] sched/rt: Split root_domain->rto_count to per- > NUMA-node counters > config: arm-allnoconfig (https://download.01.org/0day- > ci/archive/20250707/202507071418.sFa0bilv-lkp@intel.com/config) > compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project > 01c97b4953e87ae455bd4c41e3de3f0f0f29c61c) > reproduce (this is a W=1 build): (https://download.01.org/0day- > ci/archive/20250707/202507071418.sFa0bilv-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/202507071418.sFa0bilv-lkp@intel. > | com/ > > All warnings (new ones prefixed by >>): > > In file included from kernel/sched/build_policy.c:52: > kernel/sched/rt.c:496:21: error: unknown type name 'atomic_tp'; did you > mean 'atomic_t'? > 496 | int rto_counts_init(atomic_tp **rto_counts) > | ^~~~~~~~~ > | atomic_t > include/linux/types.h:183:3: note: 'atomic_t' declared here > 183 | } atomic_t; > | ^ > In file included from kernel/sched/build_policy.c:52: > >> kernel/sched/rt.c:496:5: warning: no previous prototype for function > >> 'rto_counts_init' [-Wmissing-prototypes] > 496 | int rto_counts_init(atomic_tp **rto_counts) > | ^ > kernel/sched/rt.c:496:1: note: declare 'static' if the function is not intended to > be used outside of this translation unit > 496 | int rto_counts_init(atomic_tp **rto_counts) > | ^ > | static > kernel/sched/rt.c:501:25: error: unknown type name 'atomic_tp'; did you > mean 'atomic_t'? > 501 | void rto_counts_cleanup(atomic_tp *rto_counts) > | ^~~~~~~~~ > | atomic_t > include/linux/types.h:183:3: note: 'atomic_t' declared here > 183 | } atomic_t; > | ^ > In file included from kernel/sched/build_policy.c:52: > >> kernel/sched/rt.c:501:6: warning: no previous prototype for function > >> 'rto_counts_cleanup' [-Wmissing-prototypes] > 501 | void rto_counts_cleanup(atomic_tp *rto_counts) > | ^ > kernel/sched/rt.c:501:1: note: declare 'static' if the function is not intended to > be used outside of this translation unit > 501 | void rto_counts_cleanup(atomic_tp *rto_counts) > | ^ > | static > 2 warnings and 2 errors generated. > > > vim +/rto_counts_init +496 kernel/sched/rt.c > > 495 > > 496 int rto_counts_init(atomic_tp **rto_counts) > 497 { > 498 return 0; > 499 } > 500 > > 501 void rto_counts_cleanup(atomic_tp *rto_counts) > 502 { > 503 } > 504 > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests/wiki
© 2016 - 2025 Red Hat, Inc.