tree:
https://git.linaro.org/people/vincent.guittot/kernel.git sched/pelt
head: cc807c0b8d03785da906a6a8436be5838bfe9d54
commit: a057128bc3087ebc9505454a1b5d7a4ae35c6e04 [1/2] sched/fair: handle case of
task_h_load() returning 0
config: x86_64-randconfig-s021-20200710 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-37-gc9676a3b-dirty
git checkout a057128bc3087ebc9505454a1b5d7a4ae35c6e04
# 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/fair.c:881:34: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected struct sched_entity *se @@ got struct sched_entity
[noderef] <asn:4> * @@
kernel/sched/fair.c:881:34: sparse: expected struct sched_entity *se
kernel/sched/fair.c:881:34: sparse: got struct sched_entity [noderef] <asn:4>
*
kernel/sched/fair.c:2509:13: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct
[noderef] <asn:4> * @@
kernel/sched/fair.c:2509:13: sparse: expected struct task_struct *tsk
kernel/sched/fair.c:2509:13: sparse: got struct task_struct [noderef] <asn:4>
*
kernel/sched/fair.c:10517:9: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct
sched_domain [noderef] <asn:4> *parent @@
kernel/sched/fair.c:10517:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:10517:9: sparse: got struct sched_domain [noderef]
<asn:4> *parent
kernel/sched/fair.c:4889:22: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/fair.c:4889:22: sparse: struct task_struct [noderef] <asn:4> *
kernel/sched/fair.c:4889:22: sparse: struct task_struct *
kernel/sched/fair.c:6576:20: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct
sched_domain [noderef] <asn:4> *parent @@
kernel/sched/fair.c:6576:20: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:6576:20: sparse: got struct sched_domain [noderef]
<asn:4> *parent
kernel/sched/fair.c:6695:9: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct sched_domain *[assigned] tmp @@ got struct
sched_domain [noderef] <asn:4> *parent @@
kernel/sched/fair.c:6695:9: sparse: expected struct sched_domain *[assigned] tmp
kernel/sched/fair.c:6695:9: sparse: got struct sched_domain [noderef] <asn:4>
*parent
kernel/sched/fair.c:6894:38: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected struct task_struct *curr @@ got struct task_struct
[noderef] <asn:4> *curr @@
kernel/sched/fair.c:6894:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:6894:38: sparse: got struct task_struct [noderef] <asn:4>
*curr
kernel/sched/fair.c:7145:38: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected struct task_struct *curr @@ got struct task_struct
[noderef] <asn:4> *curr @@
kernel/sched/fair.c:7145:38: sparse: expected struct task_struct *curr
kernel/sched/fair.c:7145:38: sparse: got struct task_struct [noderef] <asn:4>
*curr
> kernel/sched/fair.c:7662:32: sparse: sparse: incompatible types
in comparison expression (different type sizes):
> kernel/sched/fair.c:7662:32: sparse: unsigned long *
> kernel/sched/fair.c:7662:32: sparse: int *
kernel/sched/fair.c:8110:40:
sparse: sparse: incorrect type in initializer (different address spaces) @@ expected
struct sched_domain *child @@ got struct sched_domain [noderef] <asn:4> *child
@@
kernel/sched/fair.c:8110:40: sparse: expected struct sched_domain *child
kernel/sched/fair.c:8110:40: sparse: got struct sched_domain [noderef]
<asn:4> *child
kernel/sched/fair.c:8603:22: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/fair.c:8603:22: sparse: struct task_struct [noderef] <asn:4> *
kernel/sched/fair.c:8603:22: sparse: struct task_struct *
kernel/sched/fair.c:9840:9: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct
sched_domain [noderef] <asn:4> *parent @@
kernel/sched/fair.c:9840:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:9840:9: sparse: got struct sched_domain [noderef] <asn:4>
*parent
kernel/sched/fair.c:9500:44: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected struct sched_domain *sd_parent @@ got struct
sched_domain [noderef] <asn:4> *parent @@
kernel/sched/fair.c:9500:44: sparse: expected struct sched_domain *sd_parent
kernel/sched/fair.c:9500:44: sparse: got struct sched_domain [noderef]
<asn:4> *parent
kernel/sched/fair.c:9918:9: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct
sched_domain [noderef] <asn:4> *parent @@
kernel/sched/fair.c:9918:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/fair.c:9918:9: sparse: got struct sched_domain [noderef] <asn:4>
*parent
kernel/sched/fair.c:10718:22: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/fair.c:10718:22: sparse: struct task_struct [noderef] <asn:4> *
kernel/sched/fair.c:10718:22: sparse: struct task_struct *
kernel/sched/fair.c:10851:30: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/fair.c:10851:30: sparse: struct task_struct [noderef] <asn:4> *
kernel/sched/fair.c:10851:30: sparse: struct task_struct *
kernel/sched/fair.c:2453:9: sparse: sparse: context imbalance in
'task_numa_placement' - different lock contexts for basic block
kernel/sched/fair.c:3893:30: sparse: sparse: cast to non-scalar
kernel/sched/fair.c:3893:30: sparse: sparse: cast from non-scalar
kernel/sched/fair.c:4569:31: sparse: sparse: marked inline, but without a definition
kernel/sched/sched.h:1817:9: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1817:9: sparse: struct task_struct [noderef] <asn:4> *
kernel/sched/sched.h:1817:9: sparse: struct task_struct *
kernel/sched/fair.c:4056:32: sparse: sparse: incompatible types in comparison
expression (different type sizes):
kernel/sched/fair.c:4056:32: sparse: unsigned long *
kernel/sched/fair.c:4056:32: sparse: int *
> kernel/sched/fair.c:4056:32: sparse: sparse: cannot size
expression
vim +7662 kernel/sched/fair.c
7609
7610 /*
7611 * detach_tasks() -- tries to detach up to imbalance load/util/tasks from
7612 * busiest_rq, as part of a balancing operation within domain "sd".
7613 *
7614 * Returns number of detached tasks if successful and 0 otherwise.
7615 */
7616 static int detach_tasks(struct lb_env *env)
7617 {
7618 struct list_head *tasks = &env->src_rq->cfs_tasks;
7619 unsigned long util, load;
7620 struct task_struct *p;
7621 int detached = 0;
7622
7623 lockdep_assert_held(&env->src_rq->lock);
7624
7625 if (env->imbalance <= 0)
7626 return 0;
7627
7628 while (!list_empty(tasks)) {
7629 /*
7630 * We don't want to steal all, otherwise we may be treated likewise,
7631 * which could at worst lead to a livelock crash.
7632 */
7633 if (env->idle != CPU_NOT_IDLE && env->src_rq->nr_running <=
1)
7634 break;
7635
7636 p = list_last_entry(tasks, struct task_struct, se.group_node);
7637
7638 env->loop++;
7639 /* We've more or less seen every task there is, call it quits */
7640 if (env->loop > env->loop_max)
7641 break;
7642
7643 /* take a breather every nr_migrate tasks */
7644 if (env->loop > env->loop_break) {
7645 env->loop_break += sched_nr_migrate_break;
7646 env->flags |= LBF_NEED_BREAK;
7647 break;
7648 }
7649
7650 if (!can_migrate_task(p, env))
7651 goto next;
7652
7653 switch (env->migration_type) {
7654 case migrate_load:
7655 /*
7656 * Depending of the number of CPUs and tasks and the
7657 * cgroup hierarchy, task_h_load() can return a null
7658 * value. Make sure that env->imbalance decreases
7659 * otherwise detach_tasks() will stop only after
7660 * detaching up to loop_max tasks.
7661 */
7662 load = max(task_h_load(p), 1);
7663
7664 if (sched_feat(LB_MIN) &&
7665 load < 16 && !env->sd->nr_balance_failed)
7666 goto next;
7667
7668 /*
7669 * Make sure that we don't migrate too much load.
7670 * Nevertheless, let relax the constraint if
7671 * scheduler fails to find a good waiting task to
7672 * migrate.
7673 */
7674 if (load/2 > env->imbalance &&
7675 env->sd->nr_balance_failed <= env->sd->cache_nice_tries)
7676 goto next;
7677
7678 env->imbalance -= load;
7679 break;
7680
7681 case migrate_util:
7682 util = task_util_est(p);
7683
7684 if (util > env->imbalance)
7685 goto next;
7686
7687 env->imbalance -= util;
7688 break;
7689
7690 case migrate_task:
7691 env->imbalance--;
7692 break;
7693
7694 case migrate_misfit:
7695 /* This is not a misfit task */
7696 if (task_fits_capacity(p, capacity_of(env->src_cpu)))
7697 goto next;
7698
7699 env->imbalance = 0;
7700 break;
7701 }
7702
7703 detach_task(p, env);
7704 list_add(&p->se.group_node, &env->tasks);
7705
7706 detached++;
7707
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org