kernel/events/core.c:5424:21: sparse: sparse: incorrect type in initializer (different address spaces)
From: kernel test robot
Date: Sun Feb 15 2026 - 21:40:37 EST
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 26a4cfaff82a2dcb810f6bfd5f4842f9b6046c8a
commit: 4960626f956d63dce57f099016c2ecbe637a8229 perf/core: Fix slow perf_event_task_exit() with LBR callstacks
date: 5 weeks ago
config: arm-randconfig-r132-20260216 (https://download.01.org/0day-ci/archive/20260216/202602161003.9VdkscGT-lkp@xxxxxxxxx/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project e86750b29fa0ff207cd43213d66dabe565417638)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260216/202602161003.9VdkscGT-lkp@xxxxxxxxx/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 <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602161003.9VdkscGT-lkp@xxxxxxxxx/
sparse warnings: (new ones prefixed by >>)
kernel/events/core.c:1585:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:1585:15: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:1585:15: sparse: struct perf_event_context *
kernel/events/core.c:1598:28: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:1598:28: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:1598:28: sparse: struct perf_event_context *
kernel/events/core.c:3776:20: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:3776:20: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:3776:20: sparse: struct perf_event_context *
kernel/events/core.c:3780:18: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:3780:18: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:3780:18: sparse: struct perf_event_context *
kernel/events/core.c:3781:23: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:3781:23: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:3781:23: sparse: struct perf_event_context *
kernel/events/core.c:3834:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:3834:25: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:3834:25: sparse: struct perf_event_context *
kernel/events/core.c:3835:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:3835:25: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:3835:25: sparse: struct perf_event_context *
kernel/events/core.c:4252:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:4252:15: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:4252:15: sparse: struct perf_event_context *
kernel/events/core.c:4660:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:4660:15: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:4660:15: sparse: struct perf_event_context *
kernel/events/core.c:5149:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:5149:25: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:5149:25: sparse: struct perf_event_context *
kernel/events/core.c:6927:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:6927:9: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:6927:9: sparse: struct perf_buffer *
>> kernel/events/core.c:5424:21: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct perf_ctx_data [noderef] __rcu **___op @@ got struct perf_ctx_data **__ai_oldp @@
kernel/events/core.c:5435:37: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct perf_ctx_data [noderef] __rcu **___op @@ got struct perf_ctx_data **__ai_oldp @@
kernel/events/core.c:6310:24: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __poll_t [usertype] events @@ got int @@
kernel/events/core.c:6678:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:6678:22: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:6678:22: sparse: struct perf_buffer *
kernel/events/core.c:6802:14: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:6802:14: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:6802:14: sparse: struct perf_buffer *
kernel/events/core.c:6835:14: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:6835:14: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:6835:14: sparse: struct perf_buffer *
kernel/events/core.c:6948:14: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:6948:14: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:6948:14: sparse: struct perf_buffer *
kernel/events/core.c:6964:14: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:6964:14: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:6964:14: sparse: struct perf_buffer *
kernel/events/core.c:8946:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:8946:15: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:8946:15: sparse: struct perf_event_context *
kernel/events/core.c:9034:13: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:9034:13: sparse: struct perf_buffer [noderef] __rcu *
kernel/events/core.c:9034:13: sparse: struct perf_buffer *
kernel/events/core.c:9138:61: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/events/core.c:9138:61: sparse: expected struct task_struct *p
kernel/events/core.c:9138:61: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/events/core.c:9140:61: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/events/core.c:9140:61: sparse: expected struct task_struct *p
kernel/events/core.c:9140:61: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/events/core.c:9876:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:9876:15: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:9876:15: sparse: struct perf_event_context *
kernel/events/core.c:11071:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:11071:9: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:11071:9: sparse: struct swevent_hlist *
kernel/events/core.c:11110:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:11110:17: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:11110:17: sparse: struct swevent_hlist *
kernel/events/core.c:14496:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:14496:9: sparse: struct perf_event_context [noderef] __rcu *
kernel/events/core.c:14496:9: sparse: struct perf_event_context *
kernel/events/core.c:15016:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:15016:17: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:15016:17: sparse: struct swevent_hlist *
kernel/events/core.c:197:9: sparse: sparse: context imbalance in 'perf_ctx_lock' - wrong count at exit
kernel/events/core.c:213:9: sparse: sparse: context imbalance in 'perf_ctx_unlock' - unexpected unlock
kernel/events/core.c: note: in included file (through include/linux/rbtree.h, include/linux/mm_types.h, include/linux/mmzone.h, ...):
include/linux/rcupdate.h:898:9: sparse: sparse: context imbalance in 'perf_lock_task_context' - different lock contexts for basic block
kernel/events/core.c:1633:17: sparse: sparse: context imbalance in 'perf_pin_task_context' - unexpected unlock
kernel/events/core.c:3106:9: sparse: sparse: context imbalance in '__perf_install_in_context' - wrong count at exit
kernel/events/core.c:5126:17: sparse: sparse: context imbalance in 'find_get_context' - unexpected unlock
kernel/events/core.c: note: in included file:
kernel/events/internal.h:204:46: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const [noderef] __user *from @@ got void const *src @@
kernel/events/core.c:10924:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:10924:17: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:10924:17: sparse: struct swevent_hlist *
kernel/events/core.c:10944:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:10944:17: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:10944:17: sparse: struct swevent_hlist *
kernel/events/core.c:11060:16: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:11060:16: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:11060:16: sparse: struct swevent_hlist *
kernel/events/core.c:11060:16: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:11060:16: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:11060:16: sparse: struct swevent_hlist *
kernel/events/core.c:11060:16: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/events/core.c:11060:16: sparse: struct swevent_hlist [noderef] __rcu *
kernel/events/core.c:11060:16: sparse: struct swevent_hlist *
vim +5424 kernel/events/core.c
5412
5413 static int
5414 attach_task_ctx_data(struct task_struct *task, struct kmem_cache *ctx_cache,
5415 bool global)
5416 {
5417 struct perf_ctx_data *cd, *old = NULL;
5418
5419 cd = alloc_perf_ctx_data(ctx_cache, global);
5420 if (!cd)
5421 return -ENOMEM;
5422
5423 for (;;) {
> 5424 if (try_cmpxchg(&task->perf_ctx_data, &old, cd)) {
5425 if (old)
5426 perf_free_ctx_data_rcu(old);
5427 /*
5428 * Above try_cmpxchg() pairs with try_cmpxchg() from
5429 * detach_task_ctx_data() such that
5430 * if we race with perf_event_exit_task(), we must
5431 * observe PF_EXITING.
5432 */
5433 if (task->flags & PF_EXITING) {
5434 /* detach_task_ctx_data() may free it already */
5435 if (try_cmpxchg(&task->perf_ctx_data, &cd, NULL))
5436 perf_free_ctx_data_rcu(cd);
5437 }
5438 return 0;
5439 }
5440
5441 if (!old) {
5442 /*
5443 * After seeing a dead @old, we raced with
5444 * removal and lost, try again to install @cd.
5445 */
5446 continue;
5447 }
5448
5449 if (refcount_inc_not_zero(&old->refcount)) {
5450 free_perf_ctx_data(cd); /* unused */
5451 return 0;
5452 }
5453
5454 /*
5455 * @old is a dead object, refcount==0 is stable, try and
5456 * replace it with @cd.
5457 */
5458 }
5459 return 0;
5460 }
5461
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki