Skip to content

Commit

Permalink
percpu: cast percpu pointer in PERCPU_PTR() via unsigned long
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
ubizjak authored and akpm00 committed Nov 6, 2024
1 parent 001217d commit dabddd6
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion include/linux/percpu-defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,10 @@ do { \
} while (0)

#define PERCPU_PTR(__p) \
(typeof(*(__p)) __force __kernel *)(__p);
({ \
unsigned long __pcpu_ptr = (__force unsigned long)(__p); \
(typeof(*(__p)) __force __kernel *)(__pcpu_ptr); \
})

#ifdef CONFIG_SMP

Expand Down

0 comments on commit dabddd6

Please sign in to comment.