]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched_ext: Annotate ksyncs with __rcu in alloc/free_kick_syncs()
authorTejun Heo <tj@kernel.org>
Wed, 24 Jun 2026 22:40:51 +0000 (12:40 -1000)
committerTejun Heo <tj@kernel.org>
Wed, 24 Jun 2026 22:40:51 +0000 (12:40 -1000)
scx_kick_syncs is a per-CPU __rcu pointer, so per_cpu_ptr() returns struct
scx_kick_syncs __rcu **. alloc_kick_syncs() and free_kick_syncs() stored it
in a plain struct scx_kick_syncs **ksyncs, which sparse flags as an __rcu
address-space mismatch. Annotate ksyncs to match. Its accesses already go
through rcu_*_pointer().

Fixes: 987e00035c0e ("sched_ext: Rename pnt_seq to kick_sync")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202606122315.pbnDHP0n-lkp@intel.com/
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext/ext.c

index 5418e6357249d7819b4a6473954d63a63282d7ed..aecbb021d6d71559973d9aabea161e965f569b96 100644 (file)
@@ -5687,7 +5687,7 @@ static void free_kick_syncs(void)
        int cpu;
 
        for_each_possible_cpu(cpu) {
-               struct scx_kick_syncs **ksyncs = per_cpu_ptr(&scx_kick_syncs, cpu);
+               struct scx_kick_syncs __rcu **ksyncs = per_cpu_ptr(&scx_kick_syncs, cpu);
                struct scx_kick_syncs *to_free;
 
                to_free = rcu_replace_pointer(*ksyncs, NULL, true);
@@ -6668,7 +6668,7 @@ static int alloc_kick_syncs(void)
         * can exceed percpu allocator limits on large machines.
         */
        for_each_possible_cpu(cpu) {
-               struct scx_kick_syncs **ksyncs = per_cpu_ptr(&scx_kick_syncs, cpu);
+               struct scx_kick_syncs __rcu **ksyncs = per_cpu_ptr(&scx_kick_syncs, cpu);
                struct scx_kick_syncs *new_ksyncs;
 
                WARN_ON_ONCE(rcu_access_pointer(*ksyncs));