diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2009-07-03 10:50:10 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-07-04 05:45:00 -0400 |
commit | a79f0da80a508448434476b77f9d3d1a469eab67 (patch) | |
tree | 1bf9c72a09d266d874a2e8f7c94fd81e8ad27feb /arch/x86/lib | |
parent | ddf9a003d32f720805ac30bcc15755e9289073de (diff) |
x86: atomic64: Inline atomic64_read() again
Now atomic64_read() is light weight (no register pressure and
small icache), we can inline it again.
Also use "=&A" constraint instead of "+A" to avoid warning
about unitialized 'res' variable. (gcc had to force 0 in eax/edx)
$ size vmlinux.prev vmlinux.after
text data bss dec hex filename
4908667 451676 1684868 7045211 6b805b vmlinux.prev
4908651 451676 1684868 7045195 6b804b vmlinux.after
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
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: <4A4E1AA2.30002@gmail.com>
[ Also fix typo in atomic64_set() export ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/lib')
-rw-r--r-- | arch/x86/lib/atomic64_32.c | 23 |
1 files changed, 1 insertions, 22 deletions
diff --git a/arch/x86/lib/atomic64_32.c b/arch/x86/lib/atomic64_32.c index 1d98c9eb6eac..824fa0be55a3 100644 --- a/arch/x86/lib/atomic64_32.c +++ b/arch/x86/lib/atomic64_32.c | |||
@@ -66,31 +66,10 @@ void atomic64_set(atomic64_t *ptr, u64 new_val) | |||
66 | { | 66 | { |
67 | atomic64_xchg(ptr, new_val); | 67 | atomic64_xchg(ptr, new_val); |
68 | } | 68 | } |
69 | EXPORT_SYMBOL(atomic64_read); | 69 | EXPORT_SYMBOL(atomic64_set); |
70 | 70 | ||
71 | /** | 71 | /** |
72 | * atomic64_read - read atomic64 variable | ||
73 | * @ptr: pointer to type atomic64_t | ||
74 | * | ||
75 | * Atomically reads the value of @ptr and returns it. | ||
76 | */ | ||
77 | u64 atomic64_read(atomic64_t *ptr) | ||
78 | { | ||
79 | u64 res; | ||
80 | |||
81 | asm volatile( | ||
82 | "mov %%ebx, %%eax\n\t" | ||
83 | "mov %%ecx, %%edx\n\t" | ||
84 | LOCK_PREFIX "cmpxchg8b %1\n" | ||
85 | : "+A" (res) | ||
86 | : "m" (*ptr) | ||
87 | ); | ||
88 | |||
89 | return res; | ||
90 | } | ||
91 | EXPORT_SYMBOL(atomic64_read); | 72 | EXPORT_SYMBOL(atomic64_read); |
92 | |||
93 | /** | ||
94 | * atomic64_add_return - add and return | 73 | * atomic64_add_return - add and return |
95 | * @delta: integer value to add | 74 | * @delta: integer value to add |
96 | * @ptr: pointer to type atomic64_t | 75 | * @ptr: pointer to type atomic64_t |