tree:
https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git sched/core
head: e337f389dc4d3748ba4342bd2d1c2133346b8691
commit: 92318ca36a5876d444849ea850534488e843f077 [2/4] sched/hotplug: Ensure only per-cpu
kthreads run during hotplug
config: x86_64-randconfig-s022-20200914 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-191-g10164920-dirty
git checkout 92318ca36a5876d444849ea850534488e843f077
# 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 <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
kernel/sched/core.c:610: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:610:38: sparse: expected struct task_struct *curr
kernel/sched/core.c:610:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:1697: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:1697:33: sparse: expected struct task_struct *p
kernel/sched/core.c:1697:33: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:1697: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:1697:68: sparse: expected struct task_struct *tsk
kernel/sched/core.c:1697:68: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:2439: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:2439:17: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/core.c:2439:17: sparse: got struct sched_domain [noderef] __rcu
*parent
kernel/sched/core.c:2631: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:2631:36: sparse: expected struct task_struct const *p
kernel/sched/core.c:2631:36: sparse: got struct task_struct [noderef] __rcu *curr
> kernel/sched/core.c:6883: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:6883:43: sparse: expected struct task_struct *push_task
kernel/sched/core.c:6883:43: sparse: got struct task_struct [noderef] __rcu
*curr
kernel/sched/core.c:4026: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:4026:38: sparse: expected struct task_struct *curr
kernel/sched/core.c:4026:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:4459: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:4459:14: sparse: expected struct task_struct *prev
kernel/sched/core.c:4459:14: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:4922:17: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/core.c:4922:17: sparse: struct task_struct *
kernel/sched/core.c:4922:17: sparse: struct task_struct [noderef] __rcu *
kernel/sched/core.c:5124:22: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/core.c:5124:22: sparse: struct task_struct [noderef] __rcu *
kernel/sched/core.c:5124:22: sparse: struct task_struct *
kernel/sched/core.c:8019:11: sparse: sparse: symbol 'max_cfs_quota_period' was
not declared. Should it be static?
kernel/sched/core.c:8570: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:8570:25: sparse: expected struct task_struct *p
kernel/sched/core.c:8570:25: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c: note: in included file:
kernel/sched/pelt.h:85: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:85:13: sparse: expected struct task_struct const *p
kernel/sched/pelt.h:85:13: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:1688:33: sparse: sparse: dereference of noderef expression
kernel/sched/core.c:1689:19: sparse: sparse: dereference of noderef expression
kernel/sched/core.c:1690:37: sparse: sparse: dereference of noderef expression
kernel/sched/core.c: note: in included file:
kernel/sched/sched.h:1695:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1695:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1695:25: sparse: struct task_struct *
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 *
kernel/sched/sched.h:1846:9: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1846:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1846:9: sparse: struct task_struct *
kernel/sched/core.c:1663:38: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/core.c:1663:38: sparse: struct task_struct [noderef] __rcu *
kernel/sched/core.c:1663:38: sparse: struct task_struct const *
kernel/sched/sched.h:1695:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1695:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1695:25: sparse: struct task_struct *
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 *
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 *
kernel/sched/sched.h:1695:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1695:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1695:25: sparse: struct task_struct *
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 *
kernel/sched/sched.h:1846:9: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1846:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1846:9: sparse: struct task_struct *
kernel/sched/sched.h:1695:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1695:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1695:25: sparse: struct task_struct *
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 *
kernel/sched/sched.h:1846:9: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1846:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1846:9: sparse: struct task_struct *
kernel/sched/sched.h:1695:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1695:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1695:25: sparse: struct task_struct *
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 *
kernel/sched/sched.h:1846:9: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1846:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1846:9: sparse: struct task_struct *
kernel/sched/sched.h:1695:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1695:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1695:25: sparse: struct task_struct *
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 *
kernel/sched/sched.h:1846:9: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1846:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1846:9: sparse: struct task_struct *
#
https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git/commit/?...
git remote add peterz-queue
https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git
git fetch --no-tags peterz-queue sched/core
git checkout 92318ca36a5876d444849ea850534488e843f077
vim +6883 kernel/sched/core.c
6877
6878 /*
6879 * Ensure we only run per-cpu kthreads once the CPU goes !active.
6880 */
6881 static bool balance_push(struct rq *rq)
6882 {
6883 struct task_struct *push_task = rq->curr;
6884
6885 lockdep_assert_held(&rq->lock);
6886 SCHED_WARN_ON(rq->cpu != smp_processor_id());
6887
6888 /*
6889 * Both the cpu-hotplug and stop task are in this case and are
6890 * required to complete the hotplug process.
6891 */
6892 if (is_per_cpu_kthread(push_task))
6893 return false;
6894
6895 get_task_struct(push_task);
6896 /*
6897 * Temporarily drop rq->lock such that we can wake-up the stop task.
6898 * Both preemption and IRQs are still disabled.
6899 */
6900 raw_spin_unlock(&rq->lock);
6901 stop_one_cpu_nowait(rq->cpu, __balance_push_cpu_stop, push_task,
6902 this_cpu_ptr(&push_work));
6903 /*
6904 * At this point need_resched() is true and we'll take the loop in
6905 * schedule(). The next pick is obviously going to be the stop task
6906 * which is_per_cpu_kthread() and will push this task away.
6907 */
6908 raw_spin_lock(&rq->lock);
6909
6910 return true;
6911 }
6912
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org