[PATCH v6 3/4] compiler.h: Allow arch-specific overrides
From: Paul Burton <hidden>
Date: 2018-08-09 20:11:40
Also in:
linux-mips, linux-um
Subsystem:
generic include/asm header files, linux for powerpc (32-bit and 64-bit), m68k architecture, microblaze architecture, nios2 architecture, openrisc architecture, parisc architecture, qualcomm hexagon architecture, risc-v architecture, s390 architecture, sparc + ultrasparc (sparc/sparc64), superh, synopsys arc architecture, tensilica xtensa port (xtensa), the rest, user-mode linux (uml), x86 architecture (32-bit and 64-bit) · Maintainers:
Arnd Bergmann, Madhavan Srinivasan, Michael Ellerman, Geert Uytterhoeven, Michal Simek, Dinh Nguyen, Simon Schuster, Jonas Bonn, Stefan Kristiansson, Stafford Horne, "James E.J. Bottomley", Helge Deller, Brian Cain, Paul Walmsley, Palmer Dabbelt, Albert Ou, Heiko Carstens, Vasily Gorbik, Alexander Gordeev, "David S. Miller", Andreas Larsson, Yoshinori Sato, Rich Felker, John Paul Adrian Glaubitz, Vineet Gupta, Chris Zankel, Max Filippov, Linus Torvalds, Richard Weinberger, Anton Ivanov, Johannes Berg, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen
Include an arch-specific asm/compiler.h and allow for it to define a custom version of barrier_before_unreachable(), which is needed to workaround several issues on the MIPS architecture. This patch includes an effectively empty asm-generic implementation of asm/compiler.h for all architectures except alpha, arm, arm64, and mips (which already have an asm/compiler.h) and leaves the architecture specifics to a further patch. Signed-off-by: Paul Burton <redacted> [jhogan@kernel.org: Forward port and use asm/compiler.h instead of asm/compiler-gcc.h] Signed-off-by: James Hogan <jhogan@kernel.org> Reviewed-by: Paul Burton <redacted> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Ralf Baechle <redacted> Cc: linux-arch@vger.kernel.org Cc: linux-mips@linux-mips.org Cc: linux-um@lists.infradead.org --- Changes in v6: None Changes in v5: - Rebase atop v4.18-rc8. - Add SPDX-License-Identifier to asm-generic/compiler.h. Changes in v4: - Fix asm-generic/compiler.h include from check, compiler_types.h is included on the command line so linux/compiler.h may not be included (kbuild test robot). Changes in v3: - Rebase after 4.17 arch removal. - Use asm/compiler.h instead of compiler-gcc.h (Arnd). - Drop stable tag for now. Changes in v2: - Add generic-y entries to arch Kbuild files. Oops! arch/arc/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/compiler.h | 10 ++++++++++ include/linux/compiler-gcc.h | 2 ++ include/linux/compiler_types.h | 3 +++ 23 files changed, 35 insertions(+) create mode 100644 include/asm-generic/compiler.h
diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild
index feed50ce89fa..55c955621deb 100644
--- a/arch/arc/include/asm/Kbuild
+++ b/arch/arc/include/asm/Kbuild@@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 generic-y += bugs.h generic-y += compat.h +generic-y += compiler.h generic-y += device.h generic-y += div64.h generic-y += dma-mapping.h
diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild
index 33a2c94fed0d..0bbdfe6481fd 100644
--- a/arch/c6x/include/asm/Kbuild
+++ b/arch/c6x/include/asm/Kbuild@@ -2,6 +2,7 @@ generic-y += atomic.h generic-y += barrier.h generic-y += bugs.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += device.h generic-y += div64.h
diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild
index a5d0b2991f47..09c6d8cac8be 100644
--- a/arch/h8300/include/asm/Kbuild
+++ b/arch/h8300/include/asm/Kbuild@@ -4,6 +4,7 @@ generic-y += bugs.h generic-y += cacheflush.h generic-y += checksum.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += delay.h generic-y += device.h
diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild
index dd2fd9c0d292..ef5f1ca92d64 100644
--- a/arch/hexagon/include/asm/Kbuild
+++ b/arch/hexagon/include/asm/Kbuild@@ -3,6 +3,7 @@ generic-y += barrier.h generic-y += bug.h generic-y += bugs.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += device.h generic-y += div64.h
diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild
index 557bbc8ba9f5..5c5a5721fe89 100644
--- a/arch/ia64/include/asm/Kbuild
+++ b/arch/ia64/include/asm/Kbuild@@ -1,4 +1,5 @@ generic-y += compat.h +generic-y += compiler.h generic-y += exec.h generic-y += irq_work.h generic-y += mcs_spinlock.h
diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild
index 4d8d68c4e3dd..e920ada07719 100644
--- a/arch/m68k/include/asm/Kbuild
+++ b/arch/m68k/include/asm/Kbuild@@ -1,5 +1,6 @@ generic-y += barrier.h generic-y += compat.h +generic-y += compiler.h generic-y += device.h generic-y += emergency-restart.h generic-y += exec.h
diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild
index fe6a6c6e5003..01317fc236e3 100644
--- a/arch/microblaze/include/asm/Kbuild
+++ b/arch/microblaze/include/asm/Kbuild@@ -3,6 +3,7 @@ generic-y += bitops.h generic-y += bug.h generic-y += bugs.h generic-y += compat.h +generic-y += compiler.h generic-y += device.h generic-y += div64.h generic-y += emergency-restart.h
diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild
index dbc4e5422550..a5f2b9058b4c 100644
--- a/arch/nds32/include/asm/Kbuild
+++ b/arch/nds32/include/asm/Kbuild@@ -10,6 +10,7 @@ generic-y += clkdev.h generic-y += cmpxchg.h generic-y += cmpxchg-local.h generic-y += compat.h +generic-y += compiler.h generic-y += cputime.h generic-y += device.h generic-y += div64.h
diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild
index 64ed3d656956..a157f2049d74 100644
--- a/arch/nios2/include/asm/Kbuild
+++ b/arch/nios2/include/asm/Kbuild@@ -5,6 +5,7 @@ generic-y += bug.h generic-y += bugs.h generic-y += cmpxchg.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += device.h generic-y += div64.h
diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild
index 65964d390b10..54849e38da6f 100644
--- a/arch/openrisc/include/asm/Kbuild
+++ b/arch/openrisc/include/asm/Kbuild@@ -3,6 +3,7 @@ generic-y += bug.h generic-y += bugs.h generic-y += checksum.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += device.h generic-y += div64.h
diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild
index 2013d639e735..e458cba4f5ae 100644
--- a/arch/parisc/include/asm/Kbuild
+++ b/arch/parisc/include/asm/Kbuild@@ -1,4 +1,5 @@ generic-y += barrier.h +generic-y += compiler.h generic-y += current.h generic-y += device.h generic-y += div64.h
diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild
index 3196d227e351..636a1dae6adc 100644
--- a/arch/powerpc/include/asm/Kbuild
+++ b/arch/powerpc/include/asm/Kbuild@@ -1,3 +1,4 @@ +generic-y += compiler.h generic-y += div64.h generic-y += export.h generic-y += irq_regs.h
diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild
index 576ffdca06ba..f6a7fcd72d37 100644
--- a/arch/riscv/include/asm/Kbuild
+++ b/arch/riscv/include/asm/Kbuild@@ -1,6 +1,7 @@ generic-y += bugs.h generic-y += cacheflush.h generic-y += checksum.h +generic-y += compiler.h generic-y += cputime.h generic-y += device.h generic-y += div64.h
diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild
index e3239772887a..689993a319d6 100644
--- a/arch/s390/include/asm/Kbuild
+++ b/arch/s390/include/asm/Kbuild@@ -6,6 +6,7 @@ generated-y += unistd_nr.h generic-y += asm-offsets.h generic-y += cacheflush.h +generic-y += compiler.h generic-y += device.h generic-y += dma-contiguous.h generic-y += dma-mapping.h
diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild
index 46dd82ab2c29..dd49f6b7f036 100644
--- a/arch/sh/include/asm/Kbuild
+++ b/arch/sh/include/asm/Kbuild@@ -1,4 +1,5 @@ generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += delay.h generic-y += div64.h
diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild
index 410b263ef5c8..e944aac9b198 100644
--- a/arch/sparc/include/asm/Kbuild
+++ b/arch/sparc/include/asm/Kbuild@@ -1,6 +1,7 @@ # User exported sparc header files +generic-y += compiler.h generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h
diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild
index b10dde6cb793..14b4f6f09816 100644
--- a/arch/um/include/asm/Kbuild
+++ b/arch/um/include/asm/Kbuild@@ -2,6 +2,7 @@ generic-y += barrier.h generic-y += bpf_perf_event.h generic-y += bug.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += delay.h generic-y += device.h
diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild
index bfc7abe77905..614a0d99e02e 100644
--- a/arch/unicore32/include/asm/Kbuild
+++ b/arch/unicore32/include/asm/Kbuild@@ -1,6 +1,7 @@ generic-y += atomic.h generic-y += bugs.h generic-y += compat.h +generic-y += compiler.h generic-y += current.h generic-y += device.h generic-y += div64.h
diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild
index de690c2d2e33..de4246599536 100644
--- a/arch/x86/include/asm/Kbuild
+++ b/arch/x86/include/asm/Kbuild@@ -6,6 +6,7 @@ generated-y += unistd_32_ia32.h generated-y += unistd_64_x32.h generated-y += xen-hypercalls.h +generic-y += compiler.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += mcs_spinlock.h
diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild
index e5e1e61c538c..bf08e8a4fb57 100644
--- a/arch/xtensa/include/asm/Kbuild
+++ b/arch/xtensa/include/asm/Kbuild@@ -1,5 +1,6 @@ generic-y += bug.h generic-y += compat.h +generic-y += compiler.h generic-y += device.h generic-y += div64.h generic-y += dma-contiguous.h
diff --git a/include/asm-generic/compiler.h b/include/asm-generic/compiler.h
new file mode 100644
index 000000000000..0653ff193b40
--- /dev/null
+++ b/include/asm-generic/compiler.h@@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __LINUX_COMPILER_TYPES_H +#error "Please don't include <asm/compiler.h> directly, include <linux/compiler.h> instead." +#endif + +/* + * We have nothing architecture-specific to do here, simply leave everything to + * the generic linux/compiler.h. + */
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 573f5a7d42d4..5caf71f15c71 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h@@ -233,7 +233,9 @@ * * Adding an empty inline assembly before it works around the problem */ +#ifndef barrier_before_unreachable #define barrier_before_unreachable() asm volatile("") +#endif /* * Mark a position in code as unreachable. This can be used to
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index a8ba6b04152c..c66b9222fcf0 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h@@ -54,6 +54,9 @@ extern void __chk_io_ptr(const volatile void __iomem *); #ifdef __KERNEL__ +/* Allow architectures to override some definitions where necessary */ +#include <asm/compiler.h> + #ifdef __GNUC__ #include <linux/compiler-gcc.h> #endif
--
2.18.0