CC: kbuild-all(a)lists.01.org CC: linux-kernel(a)vger.kernel.org TO: Peter Zijlstra CC: Josh Don tree: https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git sched/urgent head: 3c474b3239f12fe0b00d7e82481f36a1f31e79ab commit: 3c474b3239f12fe0b00d7e82481f36a1f31e79ab [1/1] sched: Fix Core-wide rq->lock for uninitialized CPUs :::::: branch date: 6 hours ago :::::: commit date: 6 hours ago config: i386-randconfig-s002-20210820 (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-348-gf0e6938b-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git/commit/?id=3c474b3239f12fe0b00d7e82481f36a1f31e79ab git remote add peterz-queue https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git git fetch --no-tags peterz-queue sched/urgent git checkout 3c474b3239f12fe0b00d7e82481f36a1f31e79ab # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) kernel/sched/core.c:963:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:963:38: sparse: expected struct task_struct *curr kernel/sched/core.c:963:38: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:2086:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:2086:33: sparse: expected struct task_struct *p kernel/sched/core.c:2086:33: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:2086:68: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:2086:68: sparse: expected struct task_struct *tsk kernel/sched/core.c:2086:68: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:3298: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/core.c:3298:17: sparse: expected struct sched_domain *[assigned] sd kernel/sched/core.c:3298:17: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/core.c:3498:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct const *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:3498:36: sparse: expected struct task_struct const *p kernel/sched/core.c:3498:36: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:8523:43: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *push_task @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:8523:43: sparse: expected struct task_struct *push_task kernel/sched/core.c:8523:43: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:4953:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:4953:38: sparse: expected struct task_struct *curr kernel/sched/core.c:4953:38: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:5633:32: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/core.c:5633:32: sparse: struct task_struct [noderef] __rcu * kernel/sched/core.c:5633:32: sparse: struct task_struct * kernel/sched/core.c:5660:23: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/core.c:5660:23: sparse: struct task_struct [noderef] __rcu * kernel/sched/core.c:5660:23: sparse: struct task_struct * kernel/sched/core.c:5668:46: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/core.c:5668:46: sparse: struct task_struct * kernel/sched/core.c:5668:46: sparse: struct task_struct [noderef] __rcu * kernel/sched/core.c:5725: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/core.c:5725:9: sparse: expected struct sched_domain *[assigned] sd kernel/sched/core.c:5725:9: sparse: got struct sched_domain [noderef] __rcu *parent kernel/sched/core.c:5915:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *prev @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:5915:14: sparse: expected struct task_struct *prev kernel/sched/core.c:5915:14: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:6520:17: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/core.c:6520:17: sparse: struct task_struct * kernel/sched/core.c:6520:17: sparse: struct task_struct [noderef] __rcu * kernel/sched/core.c:6724:22: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/core.c:6724:22: sparse: struct task_struct [noderef] __rcu * kernel/sched/core.c:6724:22: sparse: struct task_struct * kernel/sched/core.c:10459:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/core.c:10459:25: sparse: expected struct task_struct *p kernel/sched/core.c:10459:25: sparse: got struct task_struct [noderef] __rcu *curr >> kernel/sched/core.c:246:9: sparse: sparse: context imbalance in 'sched_core_lock' - different lock contexts for basic block kernel/sched/core.c:256:17: sparse: sparse: context imbalance in 'sched_core_unlock' - unexpected unlock kernel/sched/core.c:467:6: sparse: sparse: context imbalance in 'raw_spin_rq_lock_nested' - wrong count at exit kernel/sched/core.c:500:23: sparse: sparse: context imbalance in 'raw_spin_rq_trylock' - wrong count at exit kernel/sched/core.c:516:6: sparse: sparse: context imbalance in 'raw_spin_rq_unlock' - unexpected unlock kernel/sched/core.c: note: in included file: kernel/sched/sched.h:1169:30: sparse: sparse: context imbalance in '__task_rq_lock' - wrong count at exit kernel/sched/sched.h:1169:30: sparse: sparse: context imbalance in 'task_rq_lock' - wrong count at exit kernel/sched/core.c: note: in included file: kernel/sched/pelt.h:76:13: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct const *p @@ got struct task_struct [noderef] __rcu *curr @@ kernel/sched/pelt.h:76:13: sparse: expected struct task_struct const *p kernel/sched/pelt.h:76:13: sparse: got struct task_struct [noderef] __rcu *curr kernel/sched/core.c:2077:33: sparse: sparse: dereference of noderef expression kernel/sched/core.c:2078:19: sparse: sparse: dereference of noderef expression kernel/sched/core.c:2079:37: sparse: sparse: dereference of noderef expression kernel/sched/core.c: note: in included file: kernel/sched/sched.h:2011:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2011:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2011:25: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/core.c:2052:38: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/core.c:2052:38: sparse: struct task_struct [noderef] __rcu * kernel/sched/core.c:2052:38: sparse: struct task_struct const * kernel/sched/sched.h:2011:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2011:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2011:25: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/sched.h:2011:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2011:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2011:25: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/sched.h:2011:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2011:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2011:25: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * kernel/sched/sched.h:2011:25: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2011:25: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2011:25: sparse: struct task_struct * kernel/sched/sched.h:2169:9: sparse: sparse: incompatible types in comparison expression (different address spaces): kernel/sched/sched.h:2169:9: sparse: struct task_struct [noderef] __rcu * kernel/sched/sched.h:2169:9: sparse: struct task_struct * vim +/sched_core_lock +246 kernel/sched/core.c 9edeaea1bc4523 Peter Zijlstra 2020-11-17 239 3c474b3239f12f Peter Zijlstra 2021-08-19 240 static void sched_core_lock(int cpu, unsigned long *flags) 3c474b3239f12f Peter Zijlstra 2021-08-19 241 { 3c474b3239f12f Peter Zijlstra 2021-08-19 242 const struct cpumask *smt_mask = cpu_smt_mask(cpu); 3c474b3239f12f Peter Zijlstra 2021-08-19 243 int t, i = 0; 3c474b3239f12f Peter Zijlstra 2021-08-19 244 3c474b3239f12f Peter Zijlstra 2021-08-19 245 local_irq_save(*flags); 3c474b3239f12f Peter Zijlstra 2021-08-19 @246 for_each_cpu(t, smt_mask) 3c474b3239f12f Peter Zijlstra 2021-08-19 247 raw_spin_lock_nested(&cpu_rq(t)->__lock, i++); 3c474b3239f12f Peter Zijlstra 2021-08-19 248 } 3c474b3239f12f Peter Zijlstra 2021-08-19 249 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org