aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2019-05-14 18:42:25 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-14 22:52:48 -0400
commit9012d011660ea5cf2a623e1de207a2bc0ca6936d (patch)
treef8262000f8891b8587b5c7442a3bec172aa8dbc4
parentefc344c57e39754416731e24e1eadd7d9b9f335e (diff)
compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING
Commit 60a3cdd06394 ("x86: add optimized inlining") introduced CONFIG_OPTIMIZE_INLINING, but it has been available only for x86. The idea is obviously arch-agnostic. This commit moves the config entry from arch/x86/Kconfig.debug to lib/Kconfig.debug so that all architectures can benefit from it. This can make a huge difference in kernel image size especially when CONFIG_OPTIMIZE_FOR_SIZE is enabled. For example, I got 3.5% smaller arm64 kernel for v5.1-rc1. dec file 18983424 arch/arm64/boot/Image.before 18321920 arch/arm64/boot/Image.after This also slightly improves the "Kernel hacking" Kconfig menu as e61aca5158a8 ("Merge branch 'kconfig-diet' from Dave Hansen') suggested; this config option would be a good fit in the "compiler option" menu. Link: http://lkml.kernel.org/r/20190423034959.13525-12-yamada.masahiro@socionext.com Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Acked-by: Borislav Petkov <bp@suse.de> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Boris Brezillon <bbrezillon@kernel.org> Cc: Brian Norris <computersforpeace@gmail.com> Cc: Christophe Leroy <christophe.leroy@c-s.fr> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Marek Vasut <marek.vasut@gmail.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Malaterre <malat@debian.org> Cc: Miquel Raynal <miquel.raynal@bootlin.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Richard Weinberger <richard@nod.at> Cc: Russell King <rmk+kernel@arm.linux.org.uk> Cc: Stefan Agner <stefan@agner.ch> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/x86/Kconfig3
-rw-r--r--arch/x86/Kconfig.debug14
-rw-r--r--include/linux/compiler_types.h3
-rw-r--r--lib/Kconfig.debug14
4 files changed, 15 insertions, 19 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 818b361094ed..326b2d5bab9d 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -305,9 +305,6 @@ config ZONE_DMA32
305config AUDIT_ARCH 305config AUDIT_ARCH
306 def_bool y if X86_64 306 def_bool y if X86_64
307 307
308config ARCH_SUPPORTS_OPTIMIZED_INLINING
309 def_bool y
310
311config ARCH_SUPPORTS_DEBUG_PAGEALLOC 308config ARCH_SUPPORTS_DEBUG_PAGEALLOC
312 def_bool y 309 def_bool y
313 310
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index 15d0fbe27872..f730680dc818 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -266,20 +266,6 @@ config CPA_DEBUG
266 ---help--- 266 ---help---
267 Do change_page_attr() self-tests every 30 seconds. 267 Do change_page_attr() self-tests every 30 seconds.
268 268
269config OPTIMIZE_INLINING
270 bool "Allow gcc to uninline functions marked 'inline'"
271 ---help---
272 This option determines if the kernel forces gcc to inline the functions
273 developers have marked 'inline'. Doing so takes away freedom from gcc to
274 do what it thinks is best, which is desirable for the gcc 3.x series of
275 compilers. The gcc 4.x series have a rewritten inlining algorithm and
276 enabling this option will generate a smaller kernel there. Hopefully
277 this algorithm is so good that allowing gcc 4.x and above to make the
278 decision will become the default in the future. Until then this option
279 is there to test gcc for this.
280
281 If unsure, say N.
282
283config DEBUG_ENTRY 269config DEBUG_ENTRY
284 bool "Debug low-level entry code" 270 bool "Debug low-level entry code"
285 depends on DEBUG_KERNEL 271 depends on DEBUG_KERNEL
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index ba814f18cb4c..19e58b9138a0 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -140,8 +140,7 @@ struct ftrace_likely_data {
140 * Do not use __always_inline here, since currently it expands to inline again 140 * Do not use __always_inline here, since currently it expands to inline again
141 * (which would break users of __always_inline). 141 * (which would break users of __always_inline).
142 */ 142 */
143#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ 143#if !defined(CONFIG_OPTIMIZE_INLINING)
144 !defined(CONFIG_OPTIMIZE_INLINING)
145#define inline inline __attribute__((__always_inline__)) __gnu_inline \ 144#define inline inline __attribute__((__always_inline__)) __gnu_inline \
146 __maybe_unused notrace 145 __maybe_unused notrace
147#else 146#else
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index d695ec1477f3..d5411a7484f6 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -318,6 +318,20 @@ config HEADERS_CHECK
318 exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in 318 exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in
319 your build tree), to make sure they're suitable. 319 your build tree), to make sure they're suitable.
320 320
321config OPTIMIZE_INLINING
322 bool "Allow compiler to uninline functions marked 'inline'"
323 help
324 This option determines if the kernel forces gcc to inline the functions
325 developers have marked 'inline'. Doing so takes away freedom from gcc to
326 do what it thinks is best, which is desirable for the gcc 3.x series of
327 compilers. The gcc 4.x series have a rewritten inlining algorithm and
328 enabling this option will generate a smaller kernel there. Hopefully
329 this algorithm is so good that allowing gcc 4.x and above to make the
330 decision will become the default in the future. Until then this option
331 is there to test gcc for this.
332
333 If unsure, say N.
334
321config DEBUG_SECTION_MISMATCH 335config DEBUG_SECTION_MISMATCH
322 bool "Enable full Section mismatch analysis" 336 bool "Enable full Section mismatch analysis"
323 help 337 help