diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-03-23 23:44:19 -0500 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-03-23 23:44:19 -0500 |
| commit | 1ebbe2b20091d306453a5cf480a87e6cd28ae76f (patch) | |
| tree | f5cd7a0fa69b8b1938cb5a0faed2e7b0628072a5 /include/asm-i386/rwlock.h | |
| parent | ac58c9059da8886b5e8cde012a80266b18ca146e (diff) | |
| parent | 674a396c6d2ba0341ebdd7c1c9950f32f018e2dd (diff) | |
Merge branch 'linus'
Diffstat (limited to 'include/asm-i386/rwlock.h')
| -rw-r--r-- | include/asm-i386/rwlock.h | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/include/asm-i386/rwlock.h b/include/asm-i386/rwlock.h index b57cc7afdf7e..94f00195d543 100644 --- a/include/asm-i386/rwlock.h +++ b/include/asm-i386/rwlock.h | |||
| @@ -21,21 +21,23 @@ | |||
| 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 | #define __build_read_lock_ptr(rw, helper) \ |
| 24 | asm volatile(LOCK "subl $1,(%0)\n\t" \ | 24 | alternative_smp("lock; subl $1,(%0)\n\t" \ |
| 25 | "jns 1f\n" \ | 25 | "jns 1f\n" \ |
| 26 | "call " helper "\n\t" \ | 26 | "call " helper "\n\t" \ |
| 27 | "1:\n" \ | 27 | "1:\n", \ |
| 28 | ::"a" (rw) : "memory") | 28 | "subl $1,(%0)\n\t", \ |
| 29 | :"a" (rw) : "memory") | ||
| 29 | 30 | ||
| 30 | #define __build_read_lock_const(rw, helper) \ | 31 | #define __build_read_lock_const(rw, helper) \ |
| 31 | asm volatile(LOCK "subl $1,%0\n\t" \ | 32 | alternative_smp("lock; subl $1,%0\n\t" \ |
| 32 | "jns 1f\n" \ | 33 | "jns 1f\n" \ |
| 33 | "pushl %%eax\n\t" \ | 34 | "pushl %%eax\n\t" \ |
| 34 | "leal %0,%%eax\n\t" \ | 35 | "leal %0,%%eax\n\t" \ |
| 35 | "call " helper "\n\t" \ | 36 | "call " helper "\n\t" \ |
| 36 | "popl %%eax\n\t" \ | 37 | "popl %%eax\n\t" \ |
| 37 | "1:\n" \ | 38 | "1:\n", \ |
| 38 | :"=m" (*(volatile int *)rw) : : "memory") | 39 | "subl $1,%0\n\t", \ |
| 40 | "=m" (*(volatile int *)rw) : : "memory") | ||
| 39 | 41 | ||
| 40 | #define __build_read_lock(rw, helper) do { \ | 42 | #define __build_read_lock(rw, helper) do { \ |
| 41 | if (__builtin_constant_p(rw)) \ | 43 | if (__builtin_constant_p(rw)) \ |
| @@ -45,21 +47,23 @@ | |||
| 45 | } while (0) | 47 | } while (0) |
| 46 | 48 | ||
| 47 | #define __build_write_lock_ptr(rw, helper) \ | 49 | #define __build_write_lock_ptr(rw, helper) \ |
| 48 | asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ | 50 | alternative_smp("lock; subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ |
| 49 | "jz 1f\n" \ | 51 | "jz 1f\n" \ |
| 50 | "call " helper "\n\t" \ | 52 | "call " helper "\n\t" \ |
| 51 | "1:\n" \ | 53 | "1:\n", \ |
| 52 | ::"a" (rw) : "memory") | 54 | "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t", \ |
| 55 | :"a" (rw) : "memory") | ||
| 53 | 56 | ||
| 54 | #define __build_write_lock_const(rw, helper) \ | 57 | #define __build_write_lock_const(rw, helper) \ |
| 55 | asm volatile(LOCK "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ | 58 | alternative_smp("lock; subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ |
| 56 | "jz 1f\n" \ | 59 | "jz 1f\n" \ |
| 57 | "pushl %%eax\n\t" \ | 60 | "pushl %%eax\n\t" \ |
| 58 | "leal %0,%%eax\n\t" \ | 61 | "leal %0,%%eax\n\t" \ |
| 59 | "call " helper "\n\t" \ | 62 | "call " helper "\n\t" \ |
| 60 | "popl %%eax\n\t" \ | 63 | "popl %%eax\n\t" \ |
| 61 | "1:\n" \ | 64 | "1:\n", \ |
| 62 | :"=m" (*(volatile int *)rw) : : "memory") | 65 | "subl $" RW_LOCK_BIAS_STR ",%0\n\t", \ |
| 66 | "=m" (*(volatile int *)rw) : : "memory") | ||
| 63 | 67 | ||
| 64 | #define __build_write_lock(rw, helper) do { \ | 68 | #define __build_write_lock(rw, helper) do { \ |
| 65 | if (__builtin_constant_p(rw)) \ | 69 | if (__builtin_constant_p(rw)) \ |
