Re: [patch] x86: phase out forced inlining

Arjan van de Ven
2008-03-03T15:02:03Z

On Mon, 3 Mar 2008 13:13:35 +0100
Ingo Molnar <mingo@elte.hu> wrote:

>
> * Ingo Molnar <mingo@elte.hu> wrote:
>
> > > > no, what we should nuke is this always_inline definition. That
> > > > was always the intention of FORCED_INLINE, and the removal of
> > > > FORCED_INLINE was to _remove the forcing_, not to make it
> > > > unconditional.
> > >
> > > It was always unconditional, and neither adding, toggling nor
> > > removing of CONFIG_FORCED_INLINING changed this invariant.
> > >
> > > And what we should do is to attack the excessive wrong usage of
> > > inlines in .c files, not messing with a global #define in a way
> > > that the results on 24 architectures with 7 different releases of
> > > gcc would be unpredictable.
> >
> > i see, so you never properly reported and fixed it because you
> > prefer a 1000 small crappy changes over one change. You could have
> > significantly contributed to truly making Linux smaller, but you
> > decided not to do it.
> >
> > and i disagree with your notion that flipping it around is risky in
> > any unacceptable or unmanageable way. It has far less risks on the
> > compiler than say CONFIG_CC_OPTIMIZE_FOR_SIZE. It has far less
> > risks than changing to a new compiler version. Why you think it's
> > "unpredictable" is a mystery to me.
> >
> > It almost seems to me you were happy with having that bug in the
> > kernel? Please tell me that i'm wrong about that impression!
> >
> > i'll reinstate this .config option and let it do the right thing.
> > Forced inlining was supposed to be _phased out_, not phased in.
>
> i just implemented the trivial fix below and it gave me a massive,
> 2.3% text size reduction (!) on a typical .config. That's more than
> 120K shaved off the vmlinux.
>
> Why, despite being aware of this bug, you never fixed this properly
> is a mystery to me - this is more .text size savings than you have
> done so far with all your uninlining patches of the past few years
> combined, and it's probably more than you could have achieved in the
> next 5 years.
>
> Ingo
>
> ---------------------->
> Subject: x86: phase out forced inlining
> From: Ingo Molnar <mingo@elte.hu>
> Date: Mon Mar 03 12:38:52 CET 2008
>
> allow gcc to optimize the kernel image's size by uninlining
> functions that have been marked 'inline'. Previously gcc was
> forced by Linux to always-inline these functions via a gcc
> attribute:
>
> #define inline inline __attribute__((always_inline))
>
> Especially when the user has already selected
> CONFIG_OPTIMIZE_FOR_SIZE=y this can make a huge difference in
> kernel image size (using a standard Fedora .config):
>
> text data bss dec hex filename
> 5613924 562708 3854336 10030968 990f78 vmlinux.before
> 5486689 562708 3854336 9903733 971e75 vmlinux.after
>
> that's a 2.3% text size reduction (!).
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> ---
> arch/x86/Kconfig.debug | 13 +++++++++++++
> arch/x86/configs/i386_defconfig | 1 +
> arch/x86/configs/x86_64_defconfig | 1 +
> include/linux/compiler-gcc.h | 12 +++++++++---
> 4 files changed, 24 insertions(+), 3 deletions(-)
>
> Index: linux-x86.q/arch/x86/Kconfig.debug
> ===================================================================
> --- linux-x86.q.orig/arch/x86/Kconfig.debug

eh.. we ALREADY HAD THIS.
someone seems to have removed this wronly; not forcing inline should have been
the default after the removal (in 2.6.25-rc)!

So lets fix it that way, rather than putting the config option back under a different name.