2006-08-28 20:04:17

by Andreas Mohr

[permalink] [raw]
Subject: [PATCH -mm] lib/rwsem.c: un-inline rwsem_down_failed_common()

Un-inlining rwsem_down_failed_common() (two callsites) reduced
lib/rwsem.o on my Athlon, gcc 4.1.2 from 5935 to 5480 Bytes (455 Bytes saved).

I thus guess that reduced icache footprint (and better function caching)
is worth more than any function call overhead.

Compile-tested and run-tested on 2.6.18-rc4-mm3.


Signed-off-by: Andreas Mohr <[email protected]>

--- linux-2.6.18-rc4-mm3.orig/lib/rwsem.c 2006-08-22 21:09:55.000000000 +0200
+++ linux-2.6.18-rc4-mm3/lib/rwsem.c 2006-09-05 21:52:09.000000000 +0200
@@ -146,7 +146,7 @@
/*
* wait for a lock to be granted
*/
-static inline struct rw_semaphore *
+static struct rw_semaphore *
rwsem_down_failed_common(struct rw_semaphore *sem,
struct rwsem_waiter *waiter, signed long adjustment)
{


2006-08-29 09:50:53

by David Howells

[permalink] [raw]
Subject: Re: [PATCH -mm] lib/rwsem.c: un-inline rwsem_down_failed_common()

Andreas Mohr <[email protected]> wrote:

> Un-inlining rwsem_down_failed_common() (two callsites) reduced
> lib/rwsem.o on my Athlon, gcc 4.1.2 from 5935 to 5480 Bytes (455 Bytes saved).

Maybe this should be judged according to CONFIG_CC_OPTIMIZE_FOR_SIZE.

David

2006-08-29 09:59:20

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH -mm] lib/rwsem.c: un-inline rwsem_down_failed_common()

On Tue, 2006-08-29 at 10:50 +0100, David Howells wrote:
> Andreas Mohr <[email protected]> wrote:
>
> > Un-inlining rwsem_down_failed_common() (two callsites) reduced
> > lib/rwsem.o on my Athlon, gcc 4.1.2 from 5935 to 5480 Bytes (455 Bytes saved).
>
> Maybe this should be judged according to CONFIG_CC_OPTIMIZE_FOR_SIZE.

gcc already does this if you don't manually specify the inline
keyword ;)

static functions get inlined if they're small enough in relation to the
nr of call sites, where "small enough" is a function of -O2 vs -Os. So
leaving away inline makes gcc do its smarts.


--
if you want to mail me at work (you don't), use arjan (at) linux.intel.com