Signed-off-by: Ingo Molnar <mi...@elte.hu>
Signed-off-by: Arjan van de Ven <ar...@infradead.org>
----
include/linux/compiler-gcc4.h | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
Index: linux/include/linux/compiler-gcc4.h
===================================================================
--- linux.orig/include/linux/compiler-gcc4.h
+++ linux/include/linux/compiler-gcc4.h
@@ -3,14 +3,15 @@
/* These definitions are for GCC v4.x. */
#include <linux/compiler-gcc.h>
-#define inline inline __attribute__((always_inline))
-#define __inline__ __inline__ __attribute__((always_inline))
-#define __inline __inline __attribute__((always_inline))
+#define inline inline
+#define __inline__ __inline__
+#define __inline __inline
#define __deprecated __attribute__((deprecated))
#define __attribute_used__ __attribute__((__used__))
#define __attribute_pure__ __attribute__((pure))
#define __attribute_const__ __attribute__((__const__))
-#define noinline __attribute__((noinline))
+#define noinline __attribute__((noinline))
+#define __always_inline inline __attribute__((always_inline))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
I'm ever so slightly wary of GCC 4's stack size logic for functions with
nested scopes, but I think we'll have no trouble catching any trouble
cases in 2.6.16-rc.
Acked-by: Matt Mackall <m...@selenic.com>
--
Mathematics is the supreme nostalgia of our time.
> On Wed, Dec 28, 2005 at 12:46:53PM +0100, Ingo Molnar wrote:
> > allow gcc4 compilers to decide what to inline and what not - instead
> > of the kernel forcing gcc to inline all the time.
> >
> > Signed-off-by: Ingo Molnar <mi...@elte.hu>
> > Signed-off-by: Arjan van de Ven <ar...@infradead.org>
>
> I'm ever so slightly wary of GCC 4's stack size logic for functions
> with nested scopes, but I think we'll have no trouble catching any
> trouble cases in 2.6.16-rc.
>
> Acked-by: Matt Mackall <m...@selenic.com>
FYI, the max function-frame size did not change, so there's no
outrageous frames like with gcc3, just a small shift upwards.
Ingo
My point is more that I wouldn't be surprised if we found a corner
case for a particular .config. But even with GCC 3 and 4k stacks,
automatic inlining worked just fine for most configs after killing
just a few offenders.
--
Mathematics is the supreme nostalgia of our time.
Why not just delete these lines? This:
> +#define inline inline
> +#define __inline__ __inline__
> +#define __inline __inline
seems pointless to me.
- R.
> > -#define inline inline __attribute__((always_inline))
> > -#define __inline__ __inline__ __attribute__((always_inline))
> > -#define __inline __inline __attribute__((always_inline))
>
> Why not just delete these lines? This:
>
> > +#define inline inline
> > +#define __inline__ __inline__
> > +#define __inline __inline
>
> seems pointless to me.
indeed. I thought they were redefined to a default if not defined, but
that's only the case for __always_inline. Updated patch below.
Ingo
--------
Subject: allow gcc4 to control inlining
allow gcc4 compilers to decide what to inline and what not - instead
of the kernel forcing gcc to inline all the time.
Signed-off-by: Ingo Molnar <mi...@elte.hu>
Signed-off-by: Arjan van de Ven <ar...@infradead.org>
----
include/linux/compiler-gcc4.h | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
Index: linux/include/linux/compiler-gcc4.h
===================================================================
--- linux.orig/include/linux/compiler-gcc4.h
+++ linux/include/linux/compiler-gcc4.h
@@ -3,14 +3,12 @@
/* These definitions are for GCC v4.x. */
#include <linux/compiler-gcc.h>
-#define inline inline __attribute__((always_inline))
-#define __inline__ __inline__ __attribute__((always_inline))
-#define __inline __inline __attribute__((always_inline))
#define __deprecated __attribute__((deprecated))
#define __attribute_used__ __attribute__((__used__))
#define __attribute_pure__ __attribute__((pure))
#define __attribute_const__ __attribute__((__const__))
-#define noinline __attribute__((noinline))
+#define noinline __attribute__((noinline))
+#define __always_inline inline __attribute__((always_inline))
#define __must_check __attribute__((warn_unused_result))
#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
> +#define noinline __attribute__((noinline))
> +#define __always_inline inline __attribute__((always_inline))
> #define __must_check __attribute__((warn_unused_result))
> #define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
You seem to be missing the rest of the patch - namely, addition of
always_inline where it is needed now...
Note that we *do* need it in quite a few places. Anything that relies on
dead code elimination to kill a call of function that doesn't exist
would better be always inlined...
on x86-64 that seems to only be fix_to_virt though.. so it's really not
that many.
(based on making "inline" a define for noinline and then an
allyesconfig)