diff options
Diffstat (limited to 'include/asm-i386/rwlock.h')
| -rw-r--r-- | include/asm-i386/rwlock.h | 48 |
1 files changed, 1 insertions, 47 deletions
diff --git a/include/asm-i386/rwlock.h b/include/asm-i386/rwlock.h index 87c069ccba08..c3e5db32fa48 100644 --- a/include/asm-i386/rwlock.h +++ b/include/asm-i386/rwlock.h | |||
| @@ -20,52 +20,6 @@ | |||
| 20 | #define RW_LOCK_BIAS 0x01000000 | 20 | #define RW_LOCK_BIAS 0x01000000 |
| 21 | #define RW_LOCK_BIAS_STR "0x01000000" | 21 | #define RW_LOCK_BIAS_STR "0x01000000" |
| 22 | 22 | ||
| 23 | #define __build_read_lock_ptr(rw, helper) \ | 23 | /* Code is in asm-i386/spinlock.h */ |
| 24 | asm volatile(LOCK_PREFIX " subl $1,(%0)\n\t" \ | ||
| 25 | "jns 1f\n" \ | ||
| 26 | "call " helper "\n\t" \ | ||
| 27 | "1:\n" \ | ||
| 28 | ::"a" (rw) : "memory") | ||
| 29 | |||
| 30 | #define __build_read_lock_const(rw, helper) \ | ||
| 31 | asm volatile(LOCK_PREFIX " subl $1,%0\n\t" \ | ||
| 32 | "jns 1f\n" \ | ||
| 33 | "pushl %%eax\n\t" \ | ||
| 34 | "leal %0,%%eax\n\t" \ | ||
| 35 | "call " helper "\n\t" \ | ||
| 36 | "popl %%eax\n\t" \ | ||
| 37 | "1:\n" \ | ||
| 38 | :"+m" (*(volatile int *)rw) : : "memory") | ||
| 39 | |||
| 40 | #define __build_read_lock(rw, helper) do { \ | ||
| 41 | if (__builtin_constant_p(rw)) \ | ||
| 42 | __build_read_lock_const(rw, helper); \ | ||
| 43 | else \ | ||
| 44 | __build_read_lock_ptr(rw, helper); \ | ||
| 45 | } while (0) | ||
| 46 | |||
| 47 | #define __build_write_lock_ptr(rw, helper) \ | ||
| 48 | asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ | ||
| 49 | "jz 1f\n" \ | ||
| 50 | "call " helper "\n\t" \ | ||
| 51 | "1:\n" \ | ||
| 52 | ::"a" (rw) : "memory") | ||
| 53 | |||
| 54 | #define __build_write_lock_const(rw, helper) \ | ||
| 55 | asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ | ||
| 56 | "jz 1f\n" \ | ||
| 57 | "pushl %%eax\n\t" \ | ||
| 58 | "leal %0,%%eax\n\t" \ | ||
| 59 | "call " helper "\n\t" \ | ||
| 60 | "popl %%eax\n\t" \ | ||
| 61 | "1:\n" \ | ||
| 62 | :"+m" (*(volatile int *)rw) : : "memory") | ||
| 63 | |||
| 64 | #define __build_write_lock(rw, helper) do { \ | ||
| 65 | if (__builtin_constant_p(rw)) \ | ||
| 66 | __build_write_lock_const(rw, helper); \ | ||
| 67 | else \ | ||
| 68 | __build_write_lock_ptr(rw, helper); \ | ||
| 69 | } while (0) | ||
| 70 | 24 | ||
| 71 | #endif | 25 | #endif |
