From 323c10cccd2b86b147d0395aa2396531df4fc4a0 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Fri, 31 Mar 2006 02:30:49 -0800 Subject: [PATCH] --- yaml --- r: 24891 b: refs/heads/master c: 2cf8d82d63807c2c68adf20bb28bf502496186dd h: refs/heads/master i: 24889: c1fe4c3ce2c6c28708635da8352d2e549ff3e5ad 24887: 8195b207ac0bd5eb2368989b821333f91c1b0897 v: v3 --- [refs] | 2 +- trunk/include/asm-generic/local.h | 13 ++++++++++--- trunk/include/asm-i386/local.h | 6 +++--- trunk/include/asm-x86_64/local.h | 10 +++++----- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 2ae090bc77e7..3b684310c468 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 09ce3512dcad0ad1d07eee0dc5ebb6d037c39c16 +refs/heads/master: 2cf8d82d63807c2c68adf20bb28bf502496186dd diff --git a/trunk/include/asm-generic/local.h b/trunk/include/asm-generic/local.h index de4614840c2c..9291c24f5819 100644 --- a/trunk/include/asm-generic/local.h +++ b/trunk/include/asm-generic/local.h @@ -7,8 +7,15 @@ #include #include -/* An unsigned long type for operations which are atomic for a single - * CPU. Usually used in combination with per-cpu variables. */ +/* + * A signed long type for operations which are atomic for a single CPU. + * Usually used in combination with per-cpu variables. + * + * This is the default implementation, which uses atomic_long_t. Which is + * rather pointless. The whole point behind local_t is that some processors + * can perform atomic adds and subtracts in a manner which is atomic wrt IRQs + * running on this CPU. local_t allows exploitation of such capabilities. + */ /* Implement in terms of atomics. */ @@ -20,7 +27,7 @@ typedef struct #define LOCAL_INIT(i) { ATOMIC_LONG_INIT(i) } -#define local_read(l) ((unsigned long)atomic_long_read(&(l)->a)) +#define local_read(l) atomic_long_read(&(l)->a) #define local_set(l,i) atomic_long_set((&(l)->a),(i)) #define local_inc(l) atomic_long_inc(&(l)->a) #define local_dec(l) atomic_long_dec(&(l)->a) diff --git a/trunk/include/asm-i386/local.h b/trunk/include/asm-i386/local.h index 0177da80dde3..e67fa08260fe 100644 --- a/trunk/include/asm-i386/local.h +++ b/trunk/include/asm-i386/local.h @@ -5,7 +5,7 @@ typedef struct { - volatile unsigned long counter; + volatile long counter; } local_t; #define LOCAL_INIT(i) { (i) } @@ -29,7 +29,7 @@ static __inline__ void local_dec(local_t *v) :"m" (v->counter)); } -static __inline__ void local_add(unsigned long i, local_t *v) +static __inline__ void local_add(long i, local_t *v) { __asm__ __volatile__( "addl %1,%0" @@ -37,7 +37,7 @@ static __inline__ void local_add(unsigned long i, local_t *v) :"ir" (i), "m" (v->counter)); } -static __inline__ void local_sub(unsigned long i, local_t *v) +static __inline__ void local_sub(long i, local_t *v) { __asm__ __volatile__( "subl %1,%0" diff --git a/trunk/include/asm-x86_64/local.h b/trunk/include/asm-x86_64/local.h index bf148037d4e5..cd17945bf218 100644 --- a/trunk/include/asm-x86_64/local.h +++ b/trunk/include/asm-x86_64/local.h @@ -5,7 +5,7 @@ typedef struct { - volatile unsigned long counter; + volatile long counter; } local_t; #define LOCAL_INIT(i) { (i) } @@ -13,7 +13,7 @@ typedef struct #define local_read(v) ((v)->counter) #define local_set(v,i) (((v)->counter) = (i)) -static __inline__ void local_inc(local_t *v) +static inline void local_inc(local_t *v) { __asm__ __volatile__( "incq %0" @@ -21,7 +21,7 @@ static __inline__ void local_inc(local_t *v) :"m" (v->counter)); } -static __inline__ void local_dec(local_t *v) +static inline void local_dec(local_t *v) { __asm__ __volatile__( "decq %0" @@ -29,7 +29,7 @@ static __inline__ void local_dec(local_t *v) :"m" (v->counter)); } -static __inline__ void local_add(unsigned int i, local_t *v) +static inline void local_add(long i, local_t *v) { __asm__ __volatile__( "addq %1,%0" @@ -37,7 +37,7 @@ static __inline__ void local_add(unsigned int i, local_t *v) :"ir" (i), "m" (v->counter)); } -static __inline__ void local_sub(unsigned int i, local_t *v) +static inline void local_sub(long i, local_t *v) { __asm__ __volatile__( "subq %1,%0"