Skip to content

Commit dabddd6

Browse files
ubizjakakpm00
authored andcommitted
percpu: cast percpu pointer in PERCPU_PTR() via unsigned long
Cast pointer from percpu address space to generic (kernel) address space in PERCPU_PTR() macro via unsigned long intermediate cast [1]. This intermediate cast is also required to avoid build failure when GCC's strict named address space checks for x86 targets [2] are enabled. Found by GCC's named address space checks. [1] https://sparse.docs.kernel.org/en/latest/annotations.html#address-space-name [2] https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html#x86-Named-Address-Spaces Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Uros Bizjak <[email protected]> Acked-by: Christoph Lameter <[email protected]> Cc: Dennis Zhou <[email protected]> Cc: Tejun Heo <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 001217d commit dabddd6

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

include/linux/percpu-defs.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,10 @@ do { \
221221
} while (0)
222222

223223
#define PERCPU_PTR(__p) \
224-
(typeof(*(__p)) __force __kernel *)(__p);
224+
({ \
225+
unsigned long __pcpu_ptr = (__force unsigned long)(__p); \
226+
(typeof(*(__p)) __force __kernel *)(__pcpu_ptr); \
227+
})
225228

226229
#ifdef CONFIG_SMP
227230

0 commit comments

Comments
 (0)