.. | .. |
---|
7 | 7 | #include <asm/alternative.h> /* Provides LOCK_PREFIX */ |
---|
8 | 8 | |
---|
9 | 9 | /* |
---|
10 | | - * Non-existant functions to indicate usage errors at link time |
---|
| 10 | + * Non-existent functions to indicate usage errors at link time |
---|
11 | 11 | * (or compile-time if the compiler implements __compiletime_error(). |
---|
12 | 12 | */ |
---|
13 | 13 | extern void __xchg_wrong_size(void) |
---|
.. | .. |
---|
242 | 242 | BUILD_BUG_ON(sizeof(*(p2)) != sizeof(long)); \ |
---|
243 | 243 | VM_BUG_ON((unsigned long)(p1) % (2 * sizeof(long))); \ |
---|
244 | 244 | VM_BUG_ON((unsigned long)((p1) + 1) != (unsigned long)(p2)); \ |
---|
245 | | - asm volatile(pfx "cmpxchg%c4b %2; sete %0" \ |
---|
246 | | - : "=a" (__ret), "+d" (__old2), \ |
---|
247 | | - "+m" (*(p1)), "+m" (*(p2)) \ |
---|
248 | | - : "i" (2 * sizeof(long)), "a" (__old1), \ |
---|
| 245 | + asm volatile(pfx "cmpxchg%c5b %1" \ |
---|
| 246 | + CC_SET(e) \ |
---|
| 247 | + : CC_OUT(e) (__ret), \ |
---|
| 248 | + "+m" (*(p1)), "+m" (*(p2)), \ |
---|
| 249 | + "+a" (__old1), "+d" (__old2) \ |
---|
| 250 | + : "i" (2 * sizeof(long)), \ |
---|
249 | 251 | "b" (__new1), "c" (__new2)); \ |
---|
250 | 252 | __ret; \ |
---|
251 | 253 | }) |
---|