Introduce core to struct cfs_rq, indicates the corresponding cfs_rq of
rq->core.
Signed-off-by: Cruz Zhao <CruzZhao@linux.alibaba.com>
---
kernel/sched/core.c | 4 ++++
kernel/sched/fair.c | 11 +++++++++++
kernel/sched/sched.h | 1 +
3 files changed, 16 insertions(+)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 7a685fae73c4..647a12af9172 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6432,6 +6432,7 @@ static void sched_core_cpu_starting(unsigned int cpu)
if (t == cpu) {
rq->core = core_rq;
rq->core_id = core_id;
+ rq->cfs.core = &core_rq->cfs;
}
WARN_ON_ONCE(rq->core != core_rq);
@@ -6488,6 +6489,7 @@ static void sched_core_cpu_deactivate(unsigned int cpu)
rq = cpu_rq(t);
rq->core = core_rq;
rq->core_id = core_id;
+ rq->cfs.core = &core_rq->cfs;
}
}
@@ -6498,6 +6500,7 @@ static inline void sched_core_cpu_dying(unsigned int cpu)
if (rq->core != rq) {
rq->core = rq;
rq->core_id = cpu;
+ rq->cfs.core = &rq->cfs;
}
}
@@ -10016,6 +10019,7 @@ void __init sched_init(void)
#ifdef CONFIG_SCHED_CORE
rq->core = rq;
rq->core_id = i;
+ rq->cfs.core = &rq->cfs;
rq->core_pick = NULL;
rq->core_enabled = 0;
rq->core_tree = RB_ROOT;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 2048138ce54b..61cbaa3cc385 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -12420,6 +12420,16 @@ bool cfs_prio_less(const struct task_struct *a, const struct task_struct *b,
return delta > 0;
}
+void sched_core_init_cfs_rq(struct task_group *tg, struct cfs_rq *cfs_rq)
+{
+#ifdef CONFIG_FAIR_GROUP_SCHED
+ struct rq *rq = rq_of(cfs_rq);
+ int core_id = rq->core_id;
+
+ cfs_rq->core = tg->cfs_rq[core_id];
+#endif
+}
+
static int task_is_throttled_fair(struct task_struct *p, int cpu)
{
struct cfs_rq *cfs_rq;
@@ -12715,6 +12725,7 @@ int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
init_cfs_rq(cfs_rq);
init_tg_cfs_entry(tg, cfs_rq, se, i, parent->se[i]);
+ sched_core_init_cfs_rq(tg, cfs_rq);
init_entity_runnable_average(se);
}
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 1b62165fc840..62fca54223a1 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -547,6 +547,7 @@ struct cfs_rq {
#ifdef CONFIG_SCHED_CORE
unsigned int forceidle_seq;
u64 min_vruntime_fi;
+ struct cfs_rq *core;
#endif
#ifndef CONFIG_64BIT
--
2.39.3
Hi Cruz,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on v6.7-rc1 next-20231117]
[cannot apply to tip/sched/core]
[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/Cruz-Zhao/sched-core-introduce-core_id-to-struct-rq/20231115-193559
base: linus/master
patch link: https://lore.kernel.org/r/20231115113341.13261-3-CruzZhao%40linux.alibaba.com
patch subject: [PATCH 2/4] sched/core: introduce core to struct cfs_rq
config: x86_64-randconfig-123-20231118 (https://download.01.org/0day-ci/archive/20231118/202311181807.OhNGAYXK-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231118/202311181807.OhNGAYXK-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/202311181807.OhNGAYXK-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
kernel/sched/fair.c:1178:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_entity const *se @@ got struct sched_entity [noderef] __rcu * @@
kernel/sched/fair.c:1178:34: sparse: expected struct sched_entity const *se
kernel/sched/fair.c:1178:34: sparse: got struct sched_entity [noderef] __rcu *
kernel/sched/fair.c:2949:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu * @@
kernel/sched/fair.c:2949:13: sparse: expected struct task_struct *tsk
kernel/sched/fair.c:2949:13: sparse: got struct task_struct [noderef] __rcu *
kernel/sched/fair.c:12185: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/fair.c:12185:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:12185:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:7801:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/fair.c:7801:20: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:7801:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:8006:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/fair.c:8006:9: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/fair.c:8006:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:8105:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/fair.c:8105:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:8105:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/fair.c:8385:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/fair.c:8385:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:8385:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/fair.c:9376:40: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *child @@ got struct sched_domain [noderef] __rcu *child @@
kernel/sched/fair.c:9376:40: sparse: expected struct sched_domain *child
kernel/sched/fair.c:9376:40: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/fair.c:10013:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/fair.c:10013:22: sparse: struct task_struct [noderef] __rcu *
kernel/sched/fair.c:10013:22: sparse: struct task_struct *
kernel/sched/fair.c:11445: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/fair.c:11445:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:11445:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:11102:44: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *sd_parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/fair.c:11102:44: sparse: expected struct sched_domain *sd_parent
kernel/sched/fair.c:11102:44: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:11541: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/fair.c:11541:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:11541:9: sparse: got struct sched_domain [noderef] __rcu *parent
>> kernel/sched/fair.c:12423:6: sparse: sparse: symbol 'sched_core_init_cfs_rq' was not declared. Should it be static?
kernel/sched/fair.c:6418:35: sparse: sparse: marked inline, but without a definition
kernel/sched/fair.c: note: in included file:
kernel/sched/sched.h:2283:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2283:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2283:9: sparse: struct task_struct *
kernel/sched/sched.h:2119:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2119:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2119:25: sparse: struct task_struct *
kernel/sched/sched.h:2119:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2119:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2119:25: sparse: struct task_struct *
vim +/sched_core_init_cfs_rq +12423 kernel/sched/fair.c
12422
12423 void sched_core_init_cfs_rq(struct task_group *tg, struct cfs_rq *cfs_rq)
12424 {
12425 #ifdef CONFIG_FAIR_GROUP_SCHED
12426 struct rq *rq = rq_of(cfs_rq);
12427 int core_id = rq->core_id;
12428
12429 cfs_rq->core = tg->cfs_rq[core_id];
12430 #endif
12431 }
12432
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Cruz,
kernel test robot noticed the following build errors:
[auto build test ERROR on linus/master]
[also build test ERROR on v6.7-rc1 next-20231115]
[cannot apply to tip/sched/core]
[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/Cruz-Zhao/sched-core-introduce-core_id-to-struct-rq/20231115-193559
base: linus/master
patch link: https://lore.kernel.org/r/20231115113341.13261-3-CruzZhao%40linux.alibaba.com
patch subject: [PATCH 2/4] sched/core: introduce core to struct cfs_rq
config: x86_64-buildonly-randconfig-004-20231116 (https://download.01.org/0day-ci/archive/20231116/202311160408.5eq3Ye68-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231116/202311160408.5eq3Ye68-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/202311160408.5eq3Ye68-lkp@intel.com/
All errors (new ones prefixed by >>):
kernel/sched/fair.c: In function 'alloc_fair_sched_group':
>> kernel/sched/fair.c:12728:17: error: implicit declaration of function 'sched_core_init_cfs_rq'; did you mean 'sched_core_idle_cpu'? [-Werror=implicit-function-declaration]
12728 | sched_core_init_cfs_rq(tg, cfs_rq);
| ^~~~~~~~~~~~~~~~~~~~~~
| sched_core_idle_cpu
cc1: some warnings being treated as errors
vim +12728 kernel/sched/fair.c
12697
12698 int alloc_fair_sched_group(struct task_group *tg, struct task_group *parent)
12699 {
12700 struct sched_entity *se;
12701 struct cfs_rq *cfs_rq;
12702 int i;
12703
12704 tg->cfs_rq = kcalloc(nr_cpu_ids, sizeof(cfs_rq), GFP_KERNEL);
12705 if (!tg->cfs_rq)
12706 goto err;
12707 tg->se = kcalloc(nr_cpu_ids, sizeof(se), GFP_KERNEL);
12708 if (!tg->se)
12709 goto err;
12710
12711 tg->shares = NICE_0_LOAD;
12712
12713 init_cfs_bandwidth(tg_cfs_bandwidth(tg), tg_cfs_bandwidth(parent));
12714
12715 for_each_possible_cpu(i) {
12716 cfs_rq = kzalloc_node(sizeof(struct cfs_rq),
12717 GFP_KERNEL, cpu_to_node(i));
12718 if (!cfs_rq)
12719 goto err;
12720
12721 se = kzalloc_node(sizeof(struct sched_entity_stats),
12722 GFP_KERNEL, cpu_to_node(i));
12723 if (!se)
12724 goto err_free_rq;
12725
12726 init_cfs_rq(cfs_rq);
12727 init_tg_cfs_entry(tg, cfs_rq, se, i, parent->se[i]);
12728 sched_core_init_cfs_rq(tg, cfs_rq);
12729 init_entity_runnable_average(se);
12730 }
12731
12732 return 1;
12733
12734 err_free_rq:
12735 kfree(cfs_rq);
12736 err:
12737 return 0;
12738 }
12739
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Cruz,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on v6.7-rc1 next-20231115]
[cannot apply to tip/sched/core]
[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/Cruz-Zhao/sched-core-introduce-core_id-to-struct-rq/20231115-193559
base: linus/master
patch link: https://lore.kernel.org/r/20231115113341.13261-3-CruzZhao%40linux.alibaba.com
patch subject: [PATCH 2/4] sched/core: introduce core to struct cfs_rq
config: x86_64-buildonly-randconfig-003-20231116 (https://download.01.org/0day-ci/archive/20231116/202311160433.4Jcpw1My-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231116/202311160433.4Jcpw1My-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/202311160433.4Jcpw1My-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> kernel/sched/fair.c:12423:6: warning: no previous prototype for 'sched_core_init_cfs_rq' [-Wmissing-prototypes]
12423 | void sched_core_init_cfs_rq(struct task_group *tg, struct cfs_rq *cfs_rq)
| ^~~~~~~~~~~~~~~~~~~~~~
vim +/sched_core_init_cfs_rq +12423 kernel/sched/fair.c
12422
12423 void sched_core_init_cfs_rq(struct task_group *tg, struct cfs_rq *cfs_rq)
12424 {
12425 #ifdef CONFIG_FAIR_GROUP_SCHED
12426 struct rq *rq = rq_of(cfs_rq);
12427 int core_id = rq->core_id;
12428
12429 cfs_rq->core = tg->cfs_rq[core_id];
12430 #endif
12431 }
12432
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2025 Red Hat, Inc.