diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2019-05-14 18:42:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-14 22:52:48 -0400 |
commit | 9012d011660ea5cf2a623e1de207a2bc0ca6936d (patch) | |
tree | f8262000f8891b8587b5c7442a3bec172aa8dbc4 | |
parent | efc344c57e39754416731e24e1eadd7d9b9f335e (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/Kconfig | 3 | ||||
-rw-r--r-- | arch/x86/Kconfig.debug | 14 | ||||
-rw-r--r-- | include/linux/compiler_types.h | 3 | ||||
-rw-r--r-- | lib/Kconfig.debug | 14 |
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 | |||
305 | config AUDIT_ARCH | 305 | config AUDIT_ARCH |
306 | def_bool y if X86_64 | 306 | def_bool y if X86_64 |
307 | 307 | ||
308 | config ARCH_SUPPORTS_OPTIMIZED_INLINING | ||
309 | def_bool y | ||
310 | |||
311 | config ARCH_SUPPORTS_DEBUG_PAGEALLOC | 308 | config 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 | ||
269 | config 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 | |||
283 | config DEBUG_ENTRY | 269 | config 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 | ||
321 | config 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 | |||
321 | config DEBUG_SECTION_MISMATCH | 335 | config DEBUG_SECTION_MISMATCH |
322 | bool "Enable full Section mismatch analysis" | 336 | bool "Enable full Section mismatch analysis" |
323 | help | 337 | help |