Skip to content

Commit

Permalink
[S390] Change atomic_read/set to inline functions with barrier semant…
Browse files Browse the repository at this point in the history
…ics.

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 <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Heiko Carstens authored and Martin Schwidefsky committed Aug 22, 2007
1 parent 9c5f225 commit c51b962
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions include/asm-s390/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
{
Expand Down

0 comments on commit c51b962

Please sign in to comment.