Skip to content

Commit fac4d60

Browse files
committed
x86/percpu: Use __force to cast from __percpu address space
JIRA: https://issues.redhat.com/browse/RHEL-68940 commit a55c1fd Author: Uros Bizjak <ubizjak@gmail.com> Date: Tue, 2 Apr 2024 19:50:38 +0200 x86/percpu: Use __force to cast from __percpu address space Fix Sparse warning when casting from __percpu address space by using __force in the cast. x86 named address spaces are not considered to be subspaces of the generic (flat) address space, so explicit casts are required to convert pointers between these address spaces and the generic address space (the application should cast to uintptr_t and apply the segment base offset). The cast to uintptr_t removes __percpu address space tag and Sparse reports: warning: cast removes address space '__percpu' of expression Use __force to inform Sparse that the cast is intentional. Fixes: 9a462b9 ("x86/percpu: Use compiler segment prefix qualifier") Reported-by: Charlemagne Lasse <charlemagnelasse@gmail.com> Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: https://lore.kernel.org/r/20240402175058.52649-1-ubizjak@gmail.com Closes: https://lore.kernel.org/lkml/CAFGhKbzev7W4aHwhFPWwMZQEHenVgZUj7=aunFieVqZg3mt14A@mail.gmail.com/ Signed-off-by: Waiman Long <longman@redhat.com>
1 parent 1c3e8f7 commit fac4d60

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

arch/x86/include/asm/percpu.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
#define arch_raw_cpu_ptr(_ptr) \
7878
({ \
7979
unsigned long tcp_ptr__ = __raw_my_cpu_offset; \
80-
tcp_ptr__ += (unsigned long)(_ptr); \
80+
tcp_ptr__ += (__force unsigned long)(_ptr); \
8181
(typeof(*(_ptr)) __kernel __force *)tcp_ptr__; \
8282
})
8383
#else
@@ -96,8 +96,8 @@
9696
#endif /* CONFIG_SMP */
9797

9898
#define __my_cpu_type(var) typeof(var) __percpu_seg_override
99-
#define __my_cpu_ptr(ptr) (__my_cpu_type(*ptr) *)(uintptr_t)(ptr)
100-
#define __my_cpu_var(var) (*__my_cpu_ptr(&var))
99+
#define __my_cpu_ptr(ptr) (__my_cpu_type(*ptr)*)(__force uintptr_t)(ptr)
100+
#define __my_cpu_var(var) (*__my_cpu_ptr(&(var)))
101101
#define __percpu_arg(x) __percpu_prefix "%" #x
102102
#define __force_percpu_arg(x) __force_percpu_prefix "%" #x
103103

0 commit comments

Comments
 (0)