lkml.org 
[lkml]   [2009]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perfcounters/urgent] x86: atomic64: Reduce size of functions
    Commit-ID:  3ac805d2afd3fa4a07cb5bcf352fd7fa83f28935
    Gitweb: http://git.kernel.org/tip/3ac805d2afd3fa4a07cb5bcf352fd7fa83f28935
    Author: Ingo Molnar <mingo@elte.hu>
    AuthorDate: Fri, 3 Jul 2009 12:51:19 +0200
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Fri, 3 Jul 2009 13:26:43 +0200

    x86: atomic64: Reduce size of functions

    cmpxchg8b is a huge instruction in terms of register footprint,
    we almost never want to inline it, not even within the same
    code module.

    GCC 4.3 still messes up for two functions, under-judging the
    true cost of this instruction - so annotate two key functions
    to reduce the bloat:

    arch/x86/lib/atomic64_32.o:

    text data bss dec hex filename
    1763 0 0 1763 6e3 atomic64_32.o.before
    435 0 0 435 1b3 atomic64_32.o.after

    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    LKML-Reference: <alpine.LFD.2.01.0907021653030.3210@localhost.localdomain>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>


    ---
    arch/x86/lib/atomic64_32.c | 4 ++--
    1 files changed, 2 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/lib/atomic64_32.c b/arch/x86/lib/atomic64_32.c
    index 6195962..a910238 100644
    --- a/arch/x86/lib/atomic64_32.c
    +++ b/arch/x86/lib/atomic64_32.c
    @@ -4,7 +4,7 @@
    #include <asm/cmpxchg.h>
    #include <asm/atomic.h>

    -static inline u64 cmpxchg8b(u64 *ptr, u64 old, u64 new)
    +static noinline u64 cmpxchg8b(u64 *ptr, u64 old, u64 new)
    {
    u32 low = new;
    u32 high = new >> 32;
    @@ -74,7 +74,7 @@ u64 atomic64_read(atomic64_t *ptr)
    *
    * Atomically adds @delta to @ptr and returns @delta + *@ptr
    */
    -u64 atomic64_add_return(u64 delta, atomic64_t *ptr)
    +noinline u64 atomic64_add_return(u64 delta, atomic64_t *ptr)
    {
    /*
    * Try first with a (probably incorrect) assumption about

    \
     
     \ /
      Last update: 2009-07-03 14:49    [W:0.023 / U:11.260 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site