Hi Barry, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on arm64/for-next/core] [also build test WARNING on pm/linux-next driver-core/driver-core-testing tip/sched/core linus/master v5.11-rc2 next-20210104] [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/Barry-Song/scheduler-expose-the-topology-of-clusters-and-add-cluster-scheduler/20210106-163935 base: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core config: x86_64-randconfig-s022-20210106 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-208-g46a52ca4-dirty # https://github.com/0day-ci/linux/commit/aa5fd380444088f76ccd4f8a526f6859d63220cb git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Barry-Song/scheduler-expose-the-topology-of-clusters-and-add-cluster-scheduler/20210106-163935 git checkout aa5fd380444088f76ccd4f8a526f6859d63220cb # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot "sparse warnings: (new ones prefixed by >>)" kernel/sched/fair.c:879: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:879:34: sparse: expected struct sched_entity *se kernel/sched/fair.c:879:34: sparse: got struct sched_entity [noderef] __rcu * kernel/sched/fair.c:10557: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:10557:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/fair.c:10557:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:5402:38: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/fair.c:5402:38: sparse: struct task_struct [noderef] __rcu * kernel/sched/fair.c:5402:38: sparse: struct task_struct * kernel/sched/fair.c:5417: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:5417:38: sparse: expected struct task_struct *curr kernel/sched/fair.c:5417:38: sparse: got struct task_struct [noderef] __rcu *curr >> kernel/sched/fair.c:6158:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] ssd @@ got struct sched_domain [noderef] __rcu *parent @@ kernel/sched/fair.c:6158:9: sparse: expected struct sched_domain *[assigned] ssd kernel/sched/fair.c:6158:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:6594: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:6594:20: sparse: expected struct sched_domain *[assigned] sd kernel/sched/fair.c:6594:20: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:6714: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:6714:9: sparse: expected struct sched_domain *[assigned] tmp kernel/sched/fair.c:6714:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:6913: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:6913:38: sparse: expected struct task_struct *curr kernel/sched/fair.c:6913:38: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/fair.c:7164: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:7164:38: sparse: expected struct task_struct *curr kernel/sched/fair.c:7164:38: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/fair.c:8135: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:8135:40: sparse: expected struct sched_domain *child kernel/sched/fair.c:8135:40: sparse: got struct sched_domain [noderef] __rcu *child kernel/sched/fair.c:8628:22: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/fair.c:8628:22: sparse: struct task_struct [noderef] __rcu * kernel/sched/fair.c:8628:22: sparse: struct task_struct * kernel/sched/fair.c:9880: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:9880:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/fair.c:9880:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:9531: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:9531:44: sparse: expected struct sched_domain *sd_parent kernel/sched/fair.c:9531:44: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:9958: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:9958:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/fair.c:9958:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/fair.c:10758:22: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/fair.c:10758:22: sparse: struct task_struct [noderef] __rcu * kernel/sched/fair.c:10758:22: sparse: struct task_struct * kernel/sched/fair.c:10891:30: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/fair.c:10891:30: sparse: struct task_struct [noderef] __rcu * kernel/sched/fair.c:10891:30: sparse: struct task_struct * kernel/sched/fair.c:5346:35: sparse: sparse: marked inline, but without a definition kernel/sched/fair.c: note: in included file: kernel/sched/sched.h:1840:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:1840:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:1840:9: sparse: struct task_struct * vim +6158 kernel/sched/fair.c 6113 6114 /* 6115 * Scan the LLC domain for idle CPUs; this is dynamically regulated by 6116 * comparing the average scan cost (tracked in sd->avg_scan_cost) against the 6117 * average idle time for this rq (as found in rq->avg_idle). 6118 */ 6119 static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int target) 6120 { 6121 struct cpumask *cpus = this_cpu_cpumask_var_ptr(select_idle_mask); 6122 struct sched_domain *this_sd; 6123 struct sched_domain *prev_ssd = NULL, *ssd; 6124 u64 avg_cost, avg_idle; 6125 u64 time; 6126 int this = smp_processor_id(); 6127 int cpu, nr = INT_MAX; 6128 6129 this_sd = rcu_dereference(*this_cpu_ptr(&sd_llc)); 6130 if (!this_sd) 6131 return -1; 6132 6133 /* 6134 * Due to large variance we need a large fuzz factor; hackbench in 6135 * particularly is sensitive here. 6136 */ 6137 avg_idle = this_rq()->avg_idle / 512; 6138 avg_cost = this_sd->avg_scan_cost + 1; 6139 6140 if (sched_feat(SIS_AVG_CPU) && avg_idle < avg_cost) 6141 return -1; 6142 6143 if (sched_feat(SIS_PROP)) { 6144 u64 span_avg = sd->span_weight * avg_idle; 6145 if (span_avg > 4*avg_cost) 6146 nr = div_u64(span_avg, avg_cost); 6147 else 6148 nr = 4; 6149 } 6150 6151 time = cpu_clock(this); 6152 6153 /* 6154 * we first scan those child domains who declare they are sharing 6155 * cluster resources such as llc tags, internal busses; then scan 6156 * the whole llc 6157 */ > 6158 for_each_domain(target, ssd) { 6159 if ((ssd->flags & SD_SHARE_CLS_RESOURCES) || (ssd == sd)) { 6160 cpumask_and(cpus, sched_domain_span(ssd), p->cpus_ptr); 6161 if (prev_ssd) 6162 cpumask_andnot(cpus, cpus, sched_domain_span(prev_ssd)); 6163 for_each_cpu_wrap(cpu, cpus, target) { 6164 if (!--nr) 6165 return -1; 6166 if (available_idle_cpu(cpu) || sched_idle_cpu(cpu)) 6167 goto done; 6168 } 6169 prev_ssd = ssd; 6170 } 6171 if (ssd == sd) 6172 break; 6173 } 6174 6175 done: 6176 time = cpu_clock(this) - time; 6177 update_avg(&this_sd->avg_scan_cost, time); 6178 6179 return cpu; 6180 } 6181 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org