- Timestamp:
- 2005-11-10T13:56:26Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0172eba
- Parents:
- 13fe013
- Location:
- arch
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/include/atomic.h
r13fe013 r59e07c91 32 32 #include <arch/types.h> 33 33 34 static inline void atomic_inc(volatile int *val) { 34 typedef volatile __u32 atomic_t; 35 36 static inline void atomic_inc(atomic_t *val) { 35 37 #ifdef CONFIG_SMP 36 38 __asm__ volatile ("lock incl %0\n" : "=m" (*val)); … … 40 42 } 41 43 42 static inline void atomic_dec( volatile int *val) {44 static inline void atomic_dec(atomic_t *val) { 43 45 #ifdef CONFIG_SMP 44 46 __asm__ volatile ("lock decl %0\n" : "=m" (*val)); -
arch/ia64/include/atomic.h
r13fe013 r59e07c91 30 30 #define __ia64_ATOMIC_H__ 31 31 32 /* 33 * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec. 34 * WARNING: the following functions cause the code to be preemption-unsafe !!! 32 #include <arch/types.h> 33 34 typedef volatile __u64 atomic_t; 35 36 static inline atomic_t atomic_add(atomic_t *val, int imm) 37 { 38 atomic_t v; 39 40 /* 41 * __asm__ volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), "=m" (val) : "i" (imm)); 35 42 */ 36 37 static inline atomic_inc(volatile int *val) { 38 *val++;43 *val += imm; 44 45 return v; 39 46 } 40 47 41 static inline atomic_dec(volatile int *val) { 42 *val--; 43 } 48 static inline atomic_t atomic_inc(atomic_t *val) { return atomic_add(val, 1); } 49 static inline atomic_t atomic_dec(atomic_t *val) { return atomic_add(val, -1); } 44 50 45 51 #endif -
arch/mips32/include/atomic.h
r13fe013 r59e07c91 30 30 #define __mips32_ATOMIC_H__ 31 31 32 #include <arch/types.h> 33 32 34 #define atomic_inc(x) (a_add(x,1)) 33 35 #define atomic_dec(x) (a_sub(x,1)) 36 37 typedef volatile __u32 atomic_t; 34 38 35 39 /* … … 42 46 * the same location, the SC (store-conditional) instruction fails. 43 47 */ 44 static inline int a_add( volatile int *val, int i)48 static inline atomic_t a_add(atomic_t *val, int i) 45 49 { 46 int tmp, tmp2;50 atomic_t tmp, tmp2; 47 51 48 52 asm volatile ( … … 70 74 * Implemented in the same manner as a_add, except we substract the value. 71 75 */ 72 static inline int a_sub( volatile int *val, int i)76 static inline atomic_t a_sub(atomic_t *val, int i) 73 77 74 78 { 75 int tmp, tmp2;79 atomic_t tmp, tmp2; 76 80 77 81 asm volatile ( -
arch/ppc32/include/atomic.h
r13fe013 r59e07c91 30 30 #define __ppc32_ATOMIC_H__ 31 31 32 #include <arch/types.h> 33 34 typedef volatile __u32 atomic_t; 35 32 36 /* 33 37 * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec. … … 35 39 */ 36 40 37 static inline atomic_inc(volatile int *val) {41 static inline void atomic_inc(atomic_t *val) { 38 42 *val++; 39 43 } 40 44 41 static inline atomic_dec(volatile int *val) {45 static inline void atomic_dec(atomic_t *val) { 42 46 *val--; 43 47 } -
arch/sparc64/include/atomic.h
r13fe013 r59e07c91 30 30 #define __sparc64_ATOMIC_H__ 31 31 32 #include <arch/types.h> 33 34 typedef volatile __u64 atomic_t; 35 32 36 /* 33 37 * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec. … … 35 39 */ 36 40 37 static inline atomic_inc(volatile int *val) {41 static inline void atomic_inc(atomic_t *val) { 38 42 *val++; 39 43 } 40 44 41 static inline atomic_dec(volatile int *val) {45 static inline void atomic_dec(atomic_t *val) { 42 46 *val--; 43 47 }
Note:
See TracChangeset
for help on using the changeset viewer.