]> git.neil.brown.name Git - history.git/commitdiff
ia64: Implement _raw_write_trylock(). Based on patch by Joel Guillet.
authorDavid Mosberger <davidm@tiger.hpl.hp.com>
Tue, 4 Mar 2003 10:38:51 +0000 (02:38 -0800)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Tue, 4 Mar 2003 10:38:51 +0000 (02:38 -0800)
include/asm-ia64/spinlock.h

index 46c473d80d442e8e7fa0f1cc734bc0b6e425be6e..7478ee58fb9fd093b08fabdf3ce42b3f7a1a2519 100644 (file)
@@ -183,6 +183,19 @@ do {                                                                               \
                :: "r"(rw) : "ar.ccv", "p7", "r2", "r29", "memory");            \
 } while(0)
 
+#define _raw_write_trylock(rw)                                                 \
+({                                                                             \
+       register long result;                                                   \
+                                                                               \
+       __asm__ __volatile__ (                                                  \
+               "mov ar.ccv = r0\n"                                             \
+               "dep r29 = -1, r0, 31, 1\n"                                     \
+               ";;\n"                                                          \
+               "cmpxchg4.acq %0 = [%1], r29, ar.ccv\n"                         \
+               : "=r"(result) : "r"(rw) : "ar.ccv", "r29", "memory");          \
+       (result == 0);                                                          \
+})
+
 #define _raw_write_unlock(x)                                                           \
 ({                                                                                     \
        smp_mb__before_clear_bit();     /* need barrier before releasing lock... */     \