Re: [PATCH v4 2/9] sched/topology: Extract "imb_numa_nr" calculation into a separate helper
From: kernel test robot
Date: Thu Mar 12 2026 - 09:42:23 EST
Hi Prateek,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 54a66e431eeacf23e1dc47cb3507f2d0c068aaf0]
url: https://github.com/intel-lab-lkp/linux/commits/K-Prateek-Nayak/sched-topology-Compute-sd_weight-considering-cpuset-partitions/20260312-125021
base: 54a66e431eeacf23e1dc47cb3507f2d0c068aaf0
patch link: https://lore.kernel.org/r/20260312044434.1974-3-kprateek.nayak%40amd.com
patch subject: [PATCH v4 2/9] sched/topology: Extract "imb_numa_nr" calculation into a separate helper
config: nios2-randconfig-r131-20260312 (https://download.01.org/0day-ci/archive/20260312/202603122149.xyvcIkPY-lkp@xxxxxxxxx/config)
compiler: nios2-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/20260312/202603122149.xyvcIkPY-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/202603122149.xyvcIkPY-lkp@xxxxxxxxx/
sparse warnings: (new ones prefixed by >>)
kernel/sched/build_utility.c: note: in included file:
kernel/sched/debug.c:730: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:730:17: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/debug.c:730:17: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/debug.c:1069: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:1069:9: sparse: expected struct task_struct *tsk
kernel/sched/debug.c:1069:9: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/debug.c:1069: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:1069:9: sparse: expected struct task_struct *tsk
kernel/sched/debug.c:1069:9: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/build_utility.c: note: in included file:
kernel/sched/stats.c:136: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/stats.c:136:17: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/stats.c:136:17: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/build_utility.c: note: in included file:
kernel/sched/topology.c:116: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:116:56: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:116:56: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:135: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:135:60: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:135:60: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:158: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:158:20: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:158:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:469: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:469:19: sparse: expected struct perf_domain *pd
kernel/sched/topology.c:469:19: sparse: got struct perf_domain [noderef] __rcu *pd
kernel/sched/topology.c:644: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:644:49: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:644:49: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:729: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:729:50: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:729:50: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:737: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:737:55: sparse: expected struct sched_domain [noderef] __rcu *[noderef] __rcu child
kernel/sched/topology.c:737:55: sparse: got struct sched_domain *[assigned] tmp
kernel/sched/topology.c:750: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:750:29: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:750:29: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:755: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:755:20: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:755:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:776: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:776:13: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:776:13: sparse: got struct sched_domain [noderef] __rcu *sd
kernel/sched/topology.c:938: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:938:70: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:938:70: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:967: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:967:59: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:967:59: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1013: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:1013:57: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1013:57: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1015: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:1015:25: sparse: expected struct sched_domain *sibling
kernel/sched/topology.c:1015:25: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1023: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:1023:55: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1023:55: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1025: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:1025:25: sparse: expected struct sched_domain *sibling
kernel/sched/topology.c:1025:25: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1095: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:1095:62: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:1095:62: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1199: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:1199:40: sparse: expected struct sched_domain *child
kernel/sched/topology.c:1199:40: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1337: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:1337:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:1337:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1683: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:1683:43: sparse: expected struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1683:43: sparse: got struct sched_domain *child
kernel/sched/topology.c:2478: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:2478:31: sparse: expected struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2478:31: sparse: got struct sched_domain *sd
>> kernel/sched/topology.c:2606: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:2606:16: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2606:16: sparse: got struct sched_domain [noderef] __rcu *[noderef] __rcu parent
>> kernel/sched/topology.c:2608: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:2608:24: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2608:24: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2613: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:2613:16: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2613:16: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2618: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:2618:24: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:2618:24: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2667: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:2667:57: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:2667:57: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2686: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:2686:28: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:2686:28: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2701: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:2701:57: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:2701:57: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/build_utility.c: note: in included file:
kernel/sched/build_utility.c: note: in included file:
kernel/sched/sched.h:2367:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2367:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2367:25: sparse: struct task_struct *
vim +2606 kernel/sched/topology.c
2553
2554 /*
2555 * Calculate an allowed NUMA imbalance such that LLCs do not get
2556 * imbalanced.
2557 */
2558 static void adjust_numa_imbalance(struct sched_domain *sd_llc)
2559 {
2560 struct sched_domain *parent;
2561 unsigned int imb_span = 1;
2562 unsigned int imb = 0;
2563 unsigned int nr_llcs;
2564
2565 WARN_ON(!(sd_llc->flags & SD_SHARE_LLC));
2566 WARN_ON(!sd_llc->parent);
2567
2568 /*
2569 * For a single LLC per node, allow an
2570 * imbalance up to 12.5% of the node. This is
2571 * arbitrary cutoff based two factors -- SMT and
2572 * memory channels. For SMT-2, the intent is to
2573 * avoid premature sharing of HT resources but
2574 * SMT-4 or SMT-8 *may* benefit from a different
2575 * cutoff. For memory channels, this is a very
2576 * rough estimate of how many channels may be
2577 * active and is based on recent CPUs with
2578 * many cores.
2579 *
2580 * For multiple LLCs, allow an imbalance
2581 * until multiple tasks would share an LLC
2582 * on one node while LLCs on another node
2583 * remain idle. This assumes that there are
2584 * enough logical CPUs per LLC to avoid SMT
2585 * factors and that there is a correlation
2586 * between LLCs and memory channels.
2587 */
2588 nr_llcs = sd_llc->parent->span_weight / sd_llc->span_weight;
2589 if (nr_llcs == 1)
2590 imb = sd_llc->parent->span_weight >> 3;
2591 else
2592 imb = nr_llcs;
2593
2594 imb = max(1U, imb);
2595 sd_llc->parent->imb_numa_nr = imb;
2596
2597 /*
2598 * Set span based on the first NUMA domain.
2599 *
2600 * NUMA systems always add a NODE domain before
2601 * iterating the NUMA domains. Since this is before
2602 * degeneration, start from sd_llc's parent's
2603 * parent which is the lowest an SD_NUMA domain can
2604 * be relative to sd_llc.
2605 */
> 2606 parent = sd_llc->parent->parent;
2607 while (parent && !(parent->flags & SD_NUMA))
> 2608 parent = parent->parent;
2609
2610 imb_span = parent ? parent->span_weight : sd_llc->parent->span_weight;
2611
2612 /* Update the upper remainder of the topology */
2613 parent = sd_llc->parent;
2614 while (parent) {
2615 int factor = max(1U, (parent->span_weight / imb_span));
2616
2617 parent->imb_numa_nr = imb * factor;
2618 parent = parent->parent;
2619 }
2620 }
2621
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki