Use TYPEOF_UNQUAL() macro to declare the return type of *_cpu_ptr()
accessors in the generic named address space to avoid access to
data from pointer to non-enclosed address space type of errors.

Signed-off-by: Uros Bizjak <[email protected]>
Acked-by: Nadav Amit <[email protected]>
Acked-by: Christoph Lameter <[email protected]>
Cc: Dennis Zhou <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Brian Gerst <[email protected]>
Cc: Peter Zijlstra <[email protected]>
---
 arch/x86/include/asm/percpu.h | 8 ++++++--
 include/linux/percpu-defs.h   | 2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h
index 666e4137b09f..27f668660abe 100644
--- a/arch/x86/include/asm/percpu.h
+++ b/arch/x86/include/asm/percpu.h
@@ -73,10 +73,14 @@
        unsigned long tcp_ptr__ = raw_cpu_read_long(this_cpu_off);      \
                                                                        \
        tcp_ptr__ += (__force unsigned long)(_ptr);                     \
-       (typeof(*(_ptr)) __kernel __force *)tcp_ptr__;                  \
+       (TYPEOF_UNQUAL(*(_ptr)) __force __kernel *)tcp_ptr__;           \
 })
 #else
-#define arch_raw_cpu_ptr(_ptr) ({ BUILD_BUG(); (typeof(_ptr))0; })
+#define arch_raw_cpu_ptr(_ptr)                                         \
+({                                                                     \
+       BUILD_BUG();                                                    \
+       (TYPEOF_UNQUAL(*(_ptr)) __force __kernel *)0;                   \
+})
 #endif
 
 #define PER_CPU_VAR(var)       %__percpu_seg:(var)__percpu_rel
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 79b9402404f1..a7cf954ea99d 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -221,7 +221,7 @@ do {                                                        
                \
 } while (0)
 
 #define PERCPU_PTR(__p)                                                        
\
-       (typeof(*(__p)) __force __kernel *)((__force unsigned long)(__p))
+       (TYPEOF_UNQUAL(*(__p)) __force __kernel *)((__force unsigned long)(__p))
 
 #ifdef CONFIG_SMP
 
-- 
2.42.0


Reply via email to