diff options
author | Felix Fietkau <nbd@nbd.name> | 2018-01-25 14:01:34 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2018-12-18 17:22:04 +0100 |
commit | 0439280c2fcf859de935e4cd62c64fe907a6bb3e (patch) | |
tree | f02b517dc45e5603d8c3eb8a54e8e133d1a397d1 | |
parent | a29fe94e8cefc37071d81d58ee8970a3f6ccacdc (diff) | |
download | upstream-0439280c2fcf859de935e4cd62c64fe907a6bb3e.tar.gz upstream-0439280c2fcf859de935e4cd62c64fe907a6bb3e.tar.bz2 upstream-0439280c2fcf859de935e4cd62c64fe907a6bb3e.zip |
kernel: support gcc-optimized inlining on all architectures
Optimized inlining was disabled by default when gcc 4 was still
relatively new. By now, all gcc versions handle this well and there
seems to be no real reason to keep it x86-only.
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(backported from 1e8882585c6f4a5e7f5e2b4f18cd550aafa6f81d)
(rebased patches)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | target/linux/generic/config-4.14 | 1 | ||||
-rw-r--r-- | target/linux/generic/config-4.9 | 1 | ||||
-rw-r--r-- | target/linux/generic/pending-4.14/220-optimize_inlining.patch | 70 | ||||
-rw-r--r-- | target/linux/generic/pending-4.9/220-optimize_inlining.patch | 70 | ||||
-rw-r--r-- | target/linux/generic/pending-4.9/890-uart_optional_sysrq.patch | 2 | ||||
-rw-r--r-- | target/linux/x86/config-4.14 | 1 |
6 files changed, 143 insertions, 2 deletions
diff --git a/target/linux/generic/config-4.14 b/target/linux/generic/config-4.14 index 96916c0e43..34773958f5 100644 --- a/target/linux/generic/config-4.14 +++ b/target/linux/generic/config-4.14 @@ -3312,6 +3312,7 @@ CONFIG_NMI_LOG_BUF_SHIFT=13 # CONFIG_OPROFILE is not set # CONFIG_OPROFILE_EVENT_MULTIPLEX is not set # CONFIG_OPT3001 is not set +# CONFIG_OPTIMIZE_INLINING is not set # CONFIG_ORANGEFS_FS is not set # CONFIG_ORION_WATCHDOG is not set # CONFIG_OSF_PARTITION is not set diff --git a/target/linux/generic/config-4.9 b/target/linux/generic/config-4.9 index 53955d9ae7..5e2b25f31e 100644 --- a/target/linux/generic/config-4.9 +++ b/target/linux/generic/config-4.9 @@ -3117,6 +3117,7 @@ CONFIG_NMI_LOG_BUF_SHIFT=13 # CONFIG_OPROFILE is not set # CONFIG_OPROFILE_EVENT_MULTIPLEX is not set # CONFIG_OPT3001 is not set +# CONFIG_OPTIMIZE_INLINING is not set # CONFIG_ORANGEFS_FS is not set # CONFIG_ORION_WATCHDOG is not set # CONFIG_OSF_PARTITION is not set diff --git a/target/linux/generic/pending-4.14/220-optimize_inlining.patch b/target/linux/generic/pending-4.14/220-optimize_inlining.patch new file mode 100644 index 0000000000..dca1dcb204 --- /dev/null +++ b/target/linux/generic/pending-4.14/220-optimize_inlining.patch @@ -0,0 +1,70 @@ +--- a/arch/x86/Kconfig.debug ++++ b/arch/x86/Kconfig.debug +@@ -284,20 +284,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/lib/Kconfig.debug ++++ b/lib/Kconfig.debug +@@ -137,6 +137,20 @@ endmenu # "printk and dmesg options" + + menu "Compile-time checks and compiler options" + ++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_INFO + bool "Compile the kernel with debug info" + depends on DEBUG_KERNEL && !COMPILE_TEST +--- a/arch/x86/Kconfig ++++ b/arch/x86/Kconfig +@@ -296,9 +296,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/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -90,8 +90,7 @@ + * of extern inline functions at link time. + * A lot of inline functions can cause havoc with function tracing. + */ +-#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ +- !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) ++#if !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) + #define inline \ + inline __attribute__((always_inline, unused)) notrace __gnu_inline + #else diff --git a/target/linux/generic/pending-4.9/220-optimize_inlining.patch b/target/linux/generic/pending-4.9/220-optimize_inlining.patch new file mode 100644 index 0000000000..75c04ea15c --- /dev/null +++ b/target/linux/generic/pending-4.9/220-optimize_inlining.patch @@ -0,0 +1,70 @@ +--- a/arch/x86/Kconfig.debug ++++ b/arch/x86/Kconfig.debug +@@ -287,20 +287,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/lib/Kconfig.debug ++++ b/lib/Kconfig.debug +@@ -117,6 +117,20 @@ endmenu # "printk and dmesg options" + + menu "Compile-time checks and compiler options" + ++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_INFO + bool "Compile the kernel with debug info" + depends on DEBUG_KERNEL && !COMPILE_TEST +--- a/arch/x86/Kconfig ++++ b/arch/x86/Kconfig +@@ -273,9 +273,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/include/linux/compiler-gcc.h ++++ b/include/linux/compiler-gcc.h +@@ -89,8 +89,7 @@ + * of extern inline functions at link time. + * A lot of inline functions can cause havoc with function tracing. + */ +-#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ +- !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) ++#if !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) + #define inline \ + inline __attribute__((always_inline, unused)) notrace __gnu_inline + #else diff --git a/target/linux/generic/pending-4.9/890-uart_optional_sysrq.patch b/target/linux/generic/pending-4.9/890-uart_optional_sysrq.patch index ff0824d343..d80246db99 100644 --- a/target/linux/generic/pending-4.9/890-uart_optional_sysrq.patch +++ b/target/linux/generic/pending-4.9/890-uart_optional_sysrq.patch @@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug -@@ -396,6 +396,11 @@ config MAGIC_SYSRQ_DEFAULT_ENABLE +@@ -410,6 +410,11 @@ config MAGIC_SYSRQ_DEFAULT_ENABLE This may be set to 1 or 0 to enable or disable them all, or to a bitmask as described in Documentation/sysrq.txt. diff --git a/target/linux/x86/config-4.14 b/target/linux/x86/config-4.14 index 038d874e52..4a81cbc6b8 100644 --- a/target/linux/x86/config-4.14 +++ b/target/linux/x86/config-4.14 @@ -350,7 +350,6 @@ CONFIG_NVRAM=y CONFIG_OLD_SIGACTION=y CONFIG_OLD_SIGSUSPEND3=y CONFIG_OPROFILE_NMI_TIMER=y -# CONFIG_OPTIMIZE_INLINING is not set CONFIG_OUTPUT_FORMAT="elf32-i386" CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_PC104=y |