diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2024-10-21 11:07:38 +0300 |
---|---|---|
committer | Andrew Morton <akpm@linux-foundation.org> | 2024-11-06 04:12:34 +0300 |
commit | dabddd687c9e1a06241d6b4d1f66b9f2b60b3ad1 (patch) | |
tree | 2a7aff1542e8d8e31fbfcef4ffceb347085e9ecb | |
parent | 001217defda86d0d6a5a9e6cf77a6b813857e7e3 (diff) | |
download | linux-dabddd687c9e1a06241d6b4d1f66b9f2b60b3ad1.tar.xz |
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/20241021080856.48746-3-ubizjak@gmail.com
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Acked-by: Christoph Lameter <cl@linux.com>
Cc: Dennis Zhou <dennis@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r-- | include/linux/percpu-defs.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h index e1cf7982424f..35842d1e3879 100644 --- a/include/linux/percpu-defs.h +++ b/include/linux/percpu-defs.h @@ -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 |