[tj-wq:for-7.3 11/19] kernel/workqueue.c:5682:57: sparse: sparse: incorrect type in initializer (different address spaces)
kernel test robot <[email protected]>
| Newsgroups | dev.linux.lists.oe-kbuild-all |
|---|---|
| Message-ID | <[email protected]> |
Hi Breno, FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant. tree: https://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git for-7.3 head: a5bde5d8fde8a8cb28e59a672d5ddc5b9c1e7656 commit: 79f23600bc7b13a35fd148131245c283d14604a8 [11/19] workqueue: factor out get_percpu_pool() config: alpha-randconfig-r123-20260812 (https://download.01.org/0day-ci/archive/20260812/[email protected]/config) compiler: alpha-linux-gcc (GCC) 9.5.0 sparse: v0.6.5-rc1 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260812/[email protected]/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ sparse warnings: (new ones prefixed by >>) kernel/workqueue.c:5676:21: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pool_workqueue [noderef] __rcu *[noderef] __percpu *cpu_pwq @@ got struct pool_workqueue *[noderef] __percpu * @@ kernel/workqueue.c:5676:21: sparse: expected struct pool_workqueue [noderef] __rcu *[noderef] __percpu *cpu_pwq kernel/workqueue.c:5676:21: sparse: got struct pool_workqueue *[noderef] __percpu * >> kernel/workqueue.c:5682:57: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct pool_workqueue **pwq_p @@ got struct pool_workqueue [noderef] __rcu ** @@ kernel/workqueue.c:5682:57: sparse: expected struct pool_workqueue **pwq_p kernel/workqueue.c:5682:57: sparse: got struct pool_workqueue [noderef] __rcu ** kernel/workqueue.c:5719:54: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct pool_workqueue *pwq @@ got struct pool_workqueue [noderef] __rcu * @@ kernel/workqueue.c:5719:54: sparse: expected struct pool_workqueue *pwq kernel/workqueue.c:5719:54: sparse: got struct pool_workqueue [noderef] __rcu * kernel/workqueue.c:6304:13: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pool_workqueue *pwq @@ got struct pool_workqueue [noderef] __rcu * @@ kernel/workqueue.c:6304:13: sparse: expected struct pool_workqueue *pwq kernel/workqueue.c:6304:13: sparse: got struct pool_workqueue [noderef] __rcu * vim +5682 kernel/workqueue.c 5668 5669 static int alloc_and_link_pwqs(struct workqueue_struct *wq) 5670 { 5671 bool highpri = wq->flags & WQ_HIGHPRI; 5672 int cpu, ret; 5673 5674 lockdep_assert_held(&wq_pool_mutex); 5675 5676 wq->cpu_pwq = alloc_percpu(struct pool_workqueue *); 5677 if (!wq->cpu_pwq) 5678 goto enomem; 5679 5680 if (!(wq->flags & WQ_UNBOUND)) { 5681 for_each_possible_cpu(cpu) { > 5682 struct pool_workqueue **pwq_p = per_cpu_ptr(wq->cpu_pwq, cpu); 5683 struct worker_pool *pool = get_percpu_pool(wq, cpu); 5684 5685 *pwq_p = kmem_cache_alloc_node(pwq_cache, GFP_KERNEL, 5686 pool->node); 5687 if (!*pwq_p) 5688 goto enomem; 5689 5690 init_pwq(*pwq_p, wq, pool); 5691 5692 mutex_lock(&wq->mutex); 5693 link_pwq(*pwq_p); 5694 mutex_unlock(&wq->mutex); 5695 } 5696 return 0; 5697 } 5698 5699 if (wq->flags & __WQ_ORDERED) { 5700 struct pool_workqueue *dfl_pwq; 5701 5702 ret = apply_workqueue_attrs_locked(wq, ordered_wq_attrs[highpri]); 5703 /* there should only be single pwq for ordering guarantee */ 5704 dfl_pwq = rcu_access_pointer(wq->dfl_pwq); 5705 WARN(!ret && (wq->pwqs.next != &dfl_pwq->pwqs_node || 5706 wq->pwqs.prev != &dfl_pwq->pwqs_node), 5707 "ordering guarantee broken for workqueue %s\n", wq->name); 5708 } else { 5709 ret = apply_workqueue_attrs_locked(wq, unbound_std_wq_attrs[highpri]); 5710 } 5711 5712 if (ret) 5713 goto enomem; 5714 return 0; 5715 5716 enomem: 5717 if (wq->cpu_pwq) { 5718 for_each_possible_cpu(cpu) { 5719 struct pool_workqueue *pwq = *per_cpu_ptr(wq->cpu_pwq, cpu); 5720 5721 if (pwq) { 5722 /* 5723 * Unlink pwq from wq->pwqs since link_pwq() 5724 * may have already added it. wq->mutex is not 5725 * needed as the wq has not been published yet. 5726 */ 5727 if (!list_empty(&pwq->pwqs_node)) 5728 list_del_rcu(&pwq->pwqs_node); 5729 kmem_cache_free(pwq_cache, pwq); 5730 } 5731 } 5732 free_percpu(wq->cpu_pwq); 5733 wq->cpu_pwq = NULL; 5734 } 5735 return -ENOMEM; 5736 } 5737 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki