[PATCH] When CONFIG_CC_OPTIMIZE_FOR_SIZE, allow gcc4 to control inlining
authorIngo Molnar <mingo@elte.hu>
Sat, 14 Jan 2006 21:21:33 +0000 (13:21 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sun, 15 Jan 2006 02:27:16 +0000 (18:27 -0800)
If optimizing for size (CONFIG_CC_OPTIMIZE_FOR_SIZE), allow gcc4 compilers
to decide what to inline and what not - instead of the kernel forcing gcc
to inline all the time.  This requires several places that require to be
inlined to be marked as such, previous patches in this series do that.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Arjan van de Ven <arjan@infradead.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Documentation/feature-removal-schedule.txt
include/linux/compiler-gcc4.h
lib/Kconfig.debug

index 9474501dd6cc4db9b9b0833d5ef5455ff1e4b1e2..b4a1ea76269857137a659e69102b1223b715f6cf 100644 (file)
@@ -123,6 +123,15 @@ Who:       Christoph Hellwig <hch@lst.de>
 
 ---------------------------
 
+What:  CONFIG_FORCED_INLINING
+When:  June 2006
+Why:   Config option is there to see if gcc is good enough. (in january
+        2006). If it is, the behavior should just be the default. If it's not,
+       the option should just go away entirely.
+Who:    Arjan van de Ven
+
+---------------------------
+
 What:  START_ARRAY ioctl for md
 When:  July 2006
 Files: drivers/md/md.c
index 8249115a1f730544252cf15f79d1aa1ffa7e0715..6f5cc6f0e7a66ca521fb1978f27a51099666ec3d 100644 (file)
@@ -3,6 +3,15 @@
 /* These definitions are for GCC v4.x.  */
 #include <linux/compiler-gcc.h>
 
+#ifdef CONFIG_FORCED_INLINING
+# undef inline
+# undef __inline__
+# undef __inline
+# define inline                        inline          __attribute__((always_inline))
+# define __inline__            __inline__      __attribute__((always_inline))
+# define __inline              __inline        __attribute__((always_inline))
+#endif
+
 #define __attribute_used__     __attribute__((__used__))
 #define __must_check           __attribute__((warn_unused_result))
 #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
index a609235a517f5b52ed7897366a14624e47bd4c12..a314e663d517786a07023b0bbfa1bc3bdfadcc69 100644 (file)
@@ -195,6 +195,20 @@ config FRAME_POINTER
          some architectures or if you use external debuggers.
          If you don't debug the kernel, you can say N.
 
+config FORCED_INLINING
+       bool "Force gcc to inline functions marked 'inline'"
+       depends on DEBUG_KERNEL
+       default y
+       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
+         disabling this option will generate a smaller kernel there. Hopefully
+         this algorithm is so good that allowing gcc4 to make the decision can
+         become the default in the future, until then this option is there to
+         test gcc for this.
+
 config RCU_TORTURE_TEST
        tristate "torture tests for RCU"
        depends on DEBUG_KERNEL