Re: [PATCH 09/10] sched/topology: Introduce fallback LLC

From: kernel test robot
Date: Thu Apr 22 2021 - 11:10:59 EST


Hi Srikar,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on powerpc/next]
[also build test WARNING on linus/master v5.12-rc8]
[cannot apply to tip/sched/core tip/master next-20210422]
[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]

url: https://github.com/0day-ci/linux/commits/Srikar-Dronamraju/sched-fair-wake_affine-improvements/20210422-182725
base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: x86_64-randconfig-s022-20210421 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
# https://github.com/0day-ci/linux/commit/dcb752591087d90fd4093094e42baf167fdcae7b
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Srikar-Dronamraju/sched-fair-wake_affine-improvements/20210422-182725
git checkout dcb752591087d90fd4093094e42baf167fdcae7b
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=x86_64

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)
kernel/sched/topology.c:106: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:106:56: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:106:56: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:125: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:125:60: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:125:60: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:148: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:148:20: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:148:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:431:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct perf_domain *[assigned] tmp @@ got struct perf_domain [noderef] __rcu *pd @@
kernel/sched/topology.c:431:13: sparse: expected struct perf_domain *[assigned] tmp
kernel/sched/topology.c:431:13: sparse: got struct perf_domain [noderef] __rcu *pd
kernel/sched/topology.c:440:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct perf_domain *[assigned] tmp @@ got struct perf_domain [noderef] __rcu *pd @@
kernel/sched/topology.c:440:13: sparse: expected struct perf_domain *[assigned] tmp
kernel/sched/topology.c:440:13: sparse: got struct perf_domain [noderef] __rcu *pd
kernel/sched/topology.c:461:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct perf_domain *[assigned] pd @@ got struct perf_domain [noderef] __rcu *pd @@
kernel/sched/topology.c:461:19: sparse: expected struct perf_domain *[assigned] pd
kernel/sched/topology.c:461:19: sparse: got struct perf_domain [noderef] __rcu *pd
kernel/sched/topology.c:635: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:635:49: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:635:49: sparse: got struct sched_domain [noderef] __rcu *parent
>> kernel/sched/topology.c:678:52: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sched_domain *sd_parent @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/topology.c:678:52: sparse: expected struct sched_domain *sd_parent
kernel/sched/topology.c:678:52: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:686:81: 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:686:81: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:686:81: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:742: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:742:50: sparse: expected struct sched_domain *parent
kernel/sched/topology.c:742:50: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:749: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:749:55: sparse: expected struct sched_domain [noderef] __rcu *[noderef] __rcu child
kernel/sched/topology.c:749:55: sparse: got struct sched_domain *[assigned] tmp
kernel/sched/topology.c:759: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:759:29: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:759:29: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:764: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:764:20: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:764:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:770:33: 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:770:33: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:770:33: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:805: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:805:13: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/topology.c:805:13: sparse: got struct sched_domain [noderef] __rcu *sd
kernel/sched/topology.c:967: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:967:70: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:967:70: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:996: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:996:59: sparse: expected struct sched_domain *sd
kernel/sched/topology.c:996:59: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1166: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:1166:40: sparse: expected struct sched_domain *child
kernel/sched/topology.c:1166:40: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1468: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:1468:43: sparse: expected struct sched_domain [noderef] __rcu *child
kernel/sched/topology.c:1468:43: sparse: got struct sched_domain *child
kernel/sched/topology.c:1955: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:1955:31: sparse: expected struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1955:31: sparse: got struct sched_domain *sd
kernel/sched/topology.c:2123: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:2123:57: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:2123:57: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:2140: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:2140:57: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/topology.c:2140:57: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:59:25: sparse: sparse: dereference of noderef expression
kernel/sched/topology.c:64:25: sparse: sparse: dereference of noderef expression
kernel/sched/topology.c: note: in included file:
kernel/sched/sched.h:1459: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/sched.h:1459:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/sched.h:1459:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/sched.h:1472: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/sched.h:1472:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/sched.h:1472:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/sched.h:1459: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/sched.h:1459:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/sched.h:1459:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/sched.h:1472: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/sched.h:1472:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/sched.h:1472:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/topology.c:1483:19: sparse: sparse: dereference of noderef expression
--
kernel/sched/fair.c:861:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_entity *se @@ got struct sched_entity [noderef] __rcu * @@
kernel/sched/fair.c:861:34: sparse: expected struct sched_entity *se
kernel/sched/fair.c:861:34: sparse: got struct sched_entity [noderef] __rcu *
kernel/sched/fair.c:10750: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:10750:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:10750:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:4907:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/fair.c:4907:22: sparse: struct task_struct [noderef] __rcu *
kernel/sched/fair.c:4907:22: sparse: struct task_struct *
kernel/sched/fair.c:5430: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:5430:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:5430:38: sparse: got struct task_struct [noderef] __rcu *curr
>> kernel/sched/fair.c:5905:80: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sched_domain *sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/fair.c:5905:80: sparse: expected struct sched_domain *sd
kernel/sched/fair.c:5905:80: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:6755: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:6755:20: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:6755:20: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:6878: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:6878:9: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/fair.c:6878:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:7076: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:7076:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:7076:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/fair.c:7327: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:7327:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:7327:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/fair.c:8298: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:8298:40: sparse: expected struct sched_domain *child
kernel/sched/fair.c:8298:40: sparse: got struct sched_domain [noderef] __rcu *child
kernel/sched/fair.c:8791:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/fair.c:8791:22: sparse: struct task_struct [noderef] __rcu *
kernel/sched/fair.c:8791:22: sparse: struct task_struct *
kernel/sched/fair.c:10067: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:10067:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:10067:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:9723: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:9723:44: sparse: expected struct sched_domain *sd_parent
kernel/sched/fair.c:9723:44: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:10145: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:10145:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:10145:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/fair.c:4575:31: sparse: sparse: marked inline, but without a definition
kernel/sched/fair.c: note: in included file:
kernel/sched/sched.h:1730:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:1730:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1730:25: sparse: struct task_struct *
kernel/sched/sched.h:1885:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:1885:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1885:9: sparse: struct task_struct *
kernel/sched/sched.h:1730:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:1730:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1730:25: sparse: struct task_struct *
kernel/sched/sched.h:1730:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:1730:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1730:25: sparse: struct task_struct *

vim +678 kernel/sched/topology.c

668
669 static void update_top_cache_domain(int cpu)
670 {
671 struct sched_domain_shared *sds = NULL;
672 struct sched_domain *sd;
673 int id = cpu;
674 int size = 1;
675
676 sd = highest_flag_domain(cpu, SD_SHARE_PKG_RESOURCES);
677 if (sd) {
> 678 struct sched_domain *sd_parent = sd->parent;
679
680 id = cpumask_first(sched_domain_span(sd));
681 size = cpumask_weight(sched_domain_span(sd));
682 sds = sd->shared;
683
684 if (sds->fallback_llc_id == -1 && sd_parent &&
685 sd_parent->flags & SD_FALLBACK_LLC) {
686 const struct cpumask *parent_span = sched_domain_span(sd->parent);
687 struct cpumask *span = sched_domains_tmpmask;
688 int fcpu;
689
690 /*
691 * If LLC's parent domain has SD_FALLBACK_LLC flag
692 * set and this LLC's fallback_llc_id is not yet
693 * set, then walk through the LLC parent's domain to
694 * find a fallback_llc.
695 */
696 cpumask_andnot(span, parent_span, sched_domain_span(sd));
697 for_each_cpu_wrap(fcpu, span, cpu) {
698 struct sched_domain_shared *next_sds;
699
700 next_sds = rcu_dereference(per_cpu(sd_llc_shared, fcpu));
701 if (next_sds && next_sds->fallback_llc_id == -1) {
702 sds->fallback_llc_id = fcpu;
703 next_sds->fallback_llc_id = cpu;
704 break;
705 }
706 }
707 }
708 }
709
710 rcu_assign_pointer(per_cpu(sd_llc, cpu), sd);
711 per_cpu(sd_llc_size, cpu) = size;
712 per_cpu(sd_llc_id, cpu) = id;
713 #ifdef CONFIG_SCHED_SMT
714 per_cpu(smt_id, cpu) = cpumask_first(cpu_smt_mask(cpu));
715 #endif
716 per_cpu(is_idle, cpu) = 1;
717 rcu_assign_pointer(per_cpu(sd_llc_shared, cpu), sds);
718
719 sd = lowest_flag_domain(cpu, SD_NUMA);
720 rcu_assign_pointer(per_cpu(sd_numa, cpu), sd);
721
722 sd = highest_flag_domain(cpu, SD_ASYM_PACKING);
723 rcu_assign_pointer(per_cpu(sd_asym_packing, cpu), sd);
724
725 sd = lowest_flag_domain(cpu, SD_ASYM_CPUCAPACITY);
726 rcu_assign_pointer(per_cpu(sd_asym_cpucapacity, cpu), sd);
727 }
728

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip