Changeset 53f9821 in mainline for arch/amd64/include/atomic.h
- Timestamp:
- 2006-03-20T20:32:17Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 018d957e
- Parents:
- 9d3e185
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/atomic.h
r9d3e185 r53f9821 31 31 32 32 #include <arch/types.h> 33 #include <arch/barrier.h> 34 #include <preemption.h> 33 35 34 36 typedef struct { volatile __u64 count; } atomic_t; … … 102 104 103 105 104 extern void spinlock_arch(volatile int *val); 106 /** AMD64 specific fast spinlock */ 107 static inline void atomic_lock_arch(atomic_t *val) 108 { 109 __u64 tmp; 110 111 preemption_disable(); 112 __asm__ volatile ( 113 "0:;" 114 #ifdef CONFIG_HT 115 "pause;" /* Pentium 4's HT love this instruction */ 116 #endif 117 "mov %0, %1;" 118 "testq %1, %1;" 119 "jnz 0b;" /* Leightweight looping on locked spinlock */ 120 121 "incq %1;" /* now use the atomic operation */ 122 "xchgq %0, %1;" 123 "testq %1, %1;" 124 "jnz 0b;" 125 : "=m"(val->count),"=r"(tmp) 126 ); 127 /* 128 * Prevent critical section code from bleeding out this way up. 129 */ 130 CS_ENTER_BARRIER(); 131 } 105 132 106 133 #endif
Note:
See TracChangeset
for help on using the changeset viewer.