aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2018-01-25 14:01:34 +0100
committerJo-Philipp Wich <jo@mein.io>2018-12-18 17:22:04 +0100
commit0439280c2fcf859de935e4cd62c64fe907a6bb3e (patch)
treef02b517dc45e5603d8c3eb8a54e8e133d1a397d1
parenta29fe94e8cefc37071d81d58ee8970a3f6ccacdc (diff)
downloadupstream-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.141
-rw-r--r--target/linux/generic/config-4.91
-rw-r--r--target/linux/generic/pending-4.14/220-optimize_inlining.patch70
-rw-r--r--target/linux/generic/pending-4.9/220-optimize_inlining.patch70
-rw-r--r--target/linux/generic/pending-4.9/890-uart_optional_sysrq.patch2
-rw-r--r--target/linux/x86/config-4.141
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