[PATCH] When CONFIG_CC_OPTIMIZE_FOR_SIZE, allow gcc4 to control inlining

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>

authored by Ingo Molnar and committed by Linus Torvalds a9df3d0f ac893963

+32
+9
Documentation/feature-removal-schedule.txt
··· 123 124 --------------------------- 125 126 What: START_ARRAY ioctl for md 127 When: July 2006 128 Files: drivers/md/md.c
··· 123 124 --------------------------- 125 126 + What: CONFIG_FORCED_INLINING 127 + When: June 2006 128 + Why: Config option is there to see if gcc is good enough. (in january 129 + 2006). If it is, the behavior should just be the default. If it's not, 130 + the option should just go away entirely. 131 + Who: Arjan van de Ven 132 + 133 + --------------------------- 134 + 135 What: START_ARRAY ioctl for md 136 When: July 2006 137 Files: drivers/md/md.c
+9
include/linux/compiler-gcc4.h
··· 3 /* These definitions are for GCC v4.x. */ 4 #include <linux/compiler-gcc.h> 5 6 #define __attribute_used__ __attribute__((__used__)) 7 #define __must_check __attribute__((warn_unused_result)) 8 #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
··· 3 /* These definitions are for GCC v4.x. */ 4 #include <linux/compiler-gcc.h> 5 6 + #ifdef CONFIG_FORCED_INLINING 7 + # undef inline 8 + # undef __inline__ 9 + # undef __inline 10 + # define inline inline __attribute__((always_inline)) 11 + # define __inline__ __inline__ __attribute__((always_inline)) 12 + # define __inline __inline __attribute__((always_inline)) 13 + #endif 14 + 15 #define __attribute_used__ __attribute__((__used__)) 16 #define __must_check __attribute__((warn_unused_result)) 17 #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
+14
lib/Kconfig.debug
··· 195 some architectures or if you use external debuggers. 196 If you don't debug the kernel, you can say N. 197 198 config RCU_TORTURE_TEST 199 tristate "torture tests for RCU" 200 depends on DEBUG_KERNEL
··· 195 some architectures or if you use external debuggers. 196 If you don't debug the kernel, you can say N. 197 198 + config FORCED_INLINING 199 + bool "Force gcc to inline functions marked 'inline'" 200 + depends on DEBUG_KERNEL 201 + default y 202 + help 203 + This option determines if the kernel forces gcc to inline the functions 204 + developers have marked 'inline'. Doing so takes away freedom from gcc to 205 + do what it thinks is best, which is desirable for the gcc 3.x series of 206 + compilers. The gcc 4.x series have a rewritten inlining algorithm and 207 + disabling this option will generate a smaller kernel there. Hopefully 208 + this algorithm is so good that allowing gcc4 to make the decision can 209 + become the default in the future, until then this option is there to 210 + test gcc for this. 211 + 212 config RCU_TORTURE_TEST 213 tristate "torture tests for RCU" 214 depends on DEBUG_KERNEL