Re: [PATCH 2/5] sched: Split out kernel/sched/fair_balance.c from kernel/sched/fair.c

From: kernel test robot
Date: Sun Apr 07 2024 - 16:22:42 EST


Hi Ingo,

kernel test robot noticed the following build warnings:

[auto build test WARNING on tip/sched/core]
[also build test WARNING on next-20240405]
[cannot apply to linux/master linus/master peterz-queue/sched/core v6.9-rc2]
[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/Ingo-Molnar/sched-Split-out-kernel-sched-syscalls-c-from-kernel-sched-core-c/20240407-164646
base: tip/sched/core
patch link: https://lore.kernel.org/r/20240407084319.1462211-3-mingo%40kernel.org
patch subject: [PATCH 2/5] sched: Split out kernel/sched/fair_balance.c from kernel/sched/fair.c
config: i386-randconfig-061-20240408 (https://download.01.org/0day-ci/archive/20240408/202404080450.8XHvarcZ-lkp@xxxxxxxxx/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240408/202404080450.8XHvarcZ-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202404080450.8XHvarcZ-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> kernel/sched/fair_balance.c:2171: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_balance.c:2171:40: sparse: expected struct sched_domain *child
kernel/sched/fair_balance.c:2171:40: sparse: got struct sched_domain [noderef] __rcu *child
>> kernel/sched/fair_balance.c:2793:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/fair_balance.c:2793:22: sparse: struct task_struct [noderef] __rcu *
kernel/sched/fair_balance.c:2793:22: sparse: struct task_struct *
>> kernel/sched/fair_balance.c:4218: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_balance.c:4218:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair_balance.c:4218:9: sparse: got struct sched_domain [noderef] __rcu *parent
>> kernel/sched/fair_balance.c:3866: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_balance.c:3866:44: sparse: expected struct sched_domain *sd_parent
kernel/sched/fair_balance.c:3866:44: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair_balance.c:4327: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_balance.c:4327:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair_balance.c:4327:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair_balance.c:4972: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_balance.c:4972:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair_balance.c:4972:9: sparse: got struct sched_domain [noderef] __rcu *parent
>> kernel/sched/fair_balance.c:1921:24: sparse: sparse: dereference of noderef expression
kernel/sched/fair_balance.c:4050:64: sparse: sparse: dereference of noderef expression
kernel/sched/fair_balance.c:4050:64: sparse: sparse: dereference of noderef expression

vim +2171 kernel/sched/fair_balance.c

2168
2169 void update_group_capacity(struct sched_domain *sd, int cpu)
2170 {
> 2171 struct sched_domain *child = sd->child;
2172 struct sched_group *group, *sdg = sd->groups;
2173 unsigned long capacity, min_capacity, max_capacity;
2174 unsigned long interval;
2175
2176 interval = msecs_to_jiffies(sd->balance_interval);
2177 interval = clamp(interval, 1UL, max_load_balance_interval);
2178 sdg->sgc->next_update = jiffies + interval;
2179
2180 if (!child) {
2181 update_cpu_capacity(sd, cpu);
2182 return;
2183 }
2184
2185 capacity = 0;
2186 min_capacity = ULONG_MAX;
2187 max_capacity = 0;
2188
2189 if (child->flags & SD_OVERLAP) {
2190 /*
2191 * SD_OVERLAP domains cannot assume that child groups
2192 * span the current group.
2193 */
2194
2195 for_each_cpu(cpu, sched_group_span(sdg)) {
2196 unsigned long cpu_cap = capacity_of(cpu);
2197
2198 capacity += cpu_cap;
2199 min_capacity = min(cpu_cap, min_capacity);
2200 max_capacity = max(cpu_cap, max_capacity);
2201 }
2202 } else {
2203 /*
2204 * !SD_OVERLAP domains can assume that child groups
2205 * span the current group.
2206 */
2207
2208 group = child->groups;
2209 do {
2210 struct sched_group_capacity *sgc = group->sgc;
2211
2212 capacity += sgc->capacity;
2213 min_capacity = min(sgc->min_capacity, min_capacity);
2214 max_capacity = max(sgc->max_capacity, max_capacity);
2215 group = group->next;
2216 } while (group != child->groups);
2217 }
2218
2219 sdg->sgc->capacity = capacity;
2220 sdg->sgc->min_capacity = min_capacity;
2221 sdg->sgc->max_capacity = max_capacity;
2222 }
2223

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki