Changeset 0fad93a in mainline
- Timestamp:
- 2006-02-21T13:18:41Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c2942d8
- Parents:
- 6f8a426
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/sparc64/include/atomic.h
r6f8a426 r0fad93a 34 34 typedef struct { volatile __u64 count; } atomic_t; 35 35 36 /* 37 * TODO: these are just placeholders for real implementations of atomic_inc and atomic_dec. 38 * WARNING: the following functions cause the code to be preemption-unsafe !!! 36 /** Atomic add operation. 37 * 38 * Use atomic compare and swap operation to atomically add signed value. 39 * 40 * @param val Atomic variable. 41 * @param i Signed value to be added. 42 * 43 * @return Value of the atomic variable as it existed before addition. 39 44 */ 45 static inline count_t atomic_add(atomic_t *val, int i) 46 { 47 __u64 a, b; 48 volatile __u64 x = (__u64) &val->count; 49 50 __asm__ volatile ( 51 "0:\n" 52 "ldx %0, %1\n" 53 "add %1, %3, %2\n" 54 "casx %0, %1, %2\n" 55 "cmp %1, %2\n" 56 "bne 0b\n" 57 "nop\n" 58 : "=m" (*((__u64 *)x)), "=r" (a), "=r" (b) 59 : "r" (i) 60 ); 61 62 return a; 63 } 40 64 41 65 static inline void atomic_inc(atomic_t *val) 42 66 { 43 val->count++;67 (void) atomic_add(val, 1); 44 68 } 45 69 46 70 static inline void atomic_dec(atomic_t *val) 47 71 { 48 val->count--;72 (void) atomic_add(val, -1); 49 73 } 50 74
Note:
See TracChangeset
for help on using the changeset viewer.