The patch titled Subject: compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING has been added to the -mm tree. Its filename is compiler-allow-all-arches-to-enable-config_optimize_inlining.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/compiler-allow-all-arches-to-enable-config_optimize_inlining.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/compiler-allow-all-arches-to-enable-config_optimize_inlining.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> Subject: compiler: allow all arches to enable CONFIG_OPTIMIZE_INLINING 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@xxxxxxxxxxxxx Signed-off-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> Acked-by: Borislav Petkov <bp@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/x86/Kconfig | 3 --- arch/x86/Kconfig.debug | 14 -------------- include/linux/compiler_types.h | 3 +-- lib/Kconfig.debug | 14 ++++++++++++++ 4 files changed, 15 insertions(+), 19 deletions(-) --- a/arch/x86/Kconfig~compiler-allow-all-arches-to-enable-config_optimize_inlining +++ a/arch/x86/Kconfig @@ -309,9 +309,6 @@ config ZONE_DMA32 config AUDIT_ARCH def_bool y if X86_64 -config ARCH_SUPPORTS_OPTIMIZED_INLINING - def_bool y - config ARCH_SUPPORTS_DEBUG_PAGEALLOC def_bool y --- a/arch/x86/Kconfig.debug~compiler-allow-all-arches-to-enable-config_optimize_inlining +++ a/arch/x86/Kconfig.debug @@ -266,20 +266,6 @@ config CPA_DEBUG ---help--- Do change_page_attr() self-tests every 30 seconds. -config OPTIMIZE_INLINING - bool "Allow gcc to uninline functions marked 'inline'" - ---help--- - This option determines if the kernel forces gcc to inline the functions - developers have marked 'inline'. Doing so takes away freedom from gcc to - do what it thinks is best, which is desirable for the gcc 3.x series of - compilers. The gcc 4.x series have a rewritten inlining algorithm and - enabling this option will generate a smaller kernel there. Hopefully - this algorithm is so good that allowing gcc 4.x and above to make the - decision will become the default in the future. Until then this option - is there to test gcc for this. - - If unsure, say N. - config DEBUG_ENTRY bool "Debug low-level entry code" depends on DEBUG_KERNEL --- a/include/linux/compiler_types.h~compiler-allow-all-arches-to-enable-config_optimize_inlining +++ a/include/linux/compiler_types.h @@ -140,8 +140,7 @@ struct ftrace_likely_data { * Do not use __always_inline here, since currently it expands to inline again * (which would break users of __always_inline). */ -#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ - !defined(CONFIG_OPTIMIZE_INLINING) +#if !defined(CONFIG_OPTIMIZE_INLINING) #define inline inline __attribute__((__always_inline__)) __gnu_inline \ __maybe_unused notrace #else --- a/lib/Kconfig.debug~compiler-allow-all-arches-to-enable-config_optimize_inlining +++ a/lib/Kconfig.debug @@ -310,6 +310,20 @@ config HEADERS_CHECK exported to $(INSTALL_HDR_PATH) (usually 'usr/include' in your build tree), to make sure they're suitable. +config OPTIMIZE_INLINING + bool "Allow compiler to uninline functions marked 'inline'" + help + This option determines if the kernel forces gcc to inline the functions + developers have marked 'inline'. Doing so takes away freedom from gcc to + do what it thinks is best, which is desirable for the gcc 3.x series of + compilers. The gcc 4.x series have a rewritten inlining algorithm and + enabling this option will generate a smaller kernel there. Hopefully + this algorithm is so good that allowing gcc 4.x and above to make the + decision will become the default in the future. Until then this option + is there to test gcc for this. + + If unsure, say N. + config DEBUG_SECTION_MISMATCH bool "Enable full Section mismatch analysis" help _ Patches currently in -mm which might be from yamada.masahiro@xxxxxxxxxxxxx are remove-spdx-with-linux-syscall-note-from-kernel-space-headers.patch arm64-mark-__cpus_have_const_cap-as-__always_inline.patch mips-mark-mult_sh_align_mod-as-__always_inline.patch s390-cpacf-mark-scpacf_query-as-__always_inline.patch mtd-rawnand-vf610_nfc-add-initializer-to-avoid-wmaybe-uninitialized.patch mips-mark-__fls-and-__ffs-as-__always_inline.patch arm-mark-setup_machine_tags-stub-as-__init-__noreturn.patch powerpc-prom_init-mark-prom_getprop-and-prom_getproplen-as-__init.patch powerpc-mm-radix-mark-__radix__flush_tlb_range_psize-as-__always_inline.patch powerpc-mm-radix-mark-as-__tlbie_pid-and-friends-as__always_inline.patch compiler-allow-all-arches-to-enable-config_optimize_inlining.patch treewide-replace-include-asm-sizesh-with-include-linux-sizesh.patch arch-remove-asm-sizesh-amd-asm-generic-sizesh.patch