Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c51b9621796c31810fb66509ea1faee4597d9c03
Commit:     c51b9621796c31810fb66509ea1faee4597d9c03
Parent:     9c5f225f1a2c67c57ff5dfbe0589de20c5706a16
Author:     Heiko Carstens <[EMAIL PROTECTED]>
AuthorDate: Wed Aug 22 13:51:45 2007 +0200
Committer:  Martin Schwidefsky <[EMAIL PROTECTED]>
CommitDate: Wed Aug 22 13:51:49 2007 +0200

    [S390] Change atomic_read/set to inline functions with barrier semantics.
    
    After doing some tests this seems to be the best variant for s390 and
    should be correct as well. With gcc 4.2.1 we get the following kernel
    image sizes using the default configuration:
    
    atomic_t type volatile, atomic_read/set defines   5311824 bytes
    atomic_t type int, atomic_read/set defines        5270864 bytes
    atomic_t type int, atomic_read/set inline asm     5279056 bytes
    atomic_t type int, atomic_read/set inline barrier 5270864 bytes
    
    Signed-off-by: Heiko Carstens <[EMAIL PROTECTED]>
    Signed-off-by: Martin Schwidefsky <[EMAIL PROTECTED]>
---
 include/asm-s390/atomic.h |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/include/asm-s390/atomic.h b/include/asm-s390/atomic.h
index ea48695..2d18465 100644
--- a/include/asm-s390/atomic.h
+++ b/include/asm-s390/atomic.h
@@ -67,8 +67,17 @@ typedef struct {
 
 #endif /* __GNUC__ */
 
-#define atomic_read(v)          ((v)->counter)
-#define atomic_set(v,i)         (((v)->counter) = (i))
+static inline int atomic_read(const atomic_t *v)
+{
+       barrier();
+       return v->counter;
+}
+
+static inline void atomic_set(atomic_t *v, int i)
+{
+       v->counter = i;
+       barrier();
+}
 
 static __inline__ int atomic_add_return(int i, atomic_t * v)
 {
@@ -182,8 +191,17 @@ typedef struct {
 
 #endif /* __GNUC__ */
 
-#define atomic64_read(v)          ((v)->counter)
-#define atomic64_set(v,i)         (((v)->counter) = (i))
+static inline long long atomic64_read(const atomic64_t *v)
+{
+       barrier();
+       return v->counter;
+}
+
+static inline void atomic64_set(atomic64_t *v, long long i)
+{
+       v->counter = i;
+       barrier();
+}
 
 static __inline__ long long atomic64_add_return(long long i, atomic64_t * v)
 {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to