patch-2.4.21 linux-2.4.21/include/asm-s390x/rwsem.h
Next file: linux-2.4.21/include/asm-s390x/setup.h
Previous file: linux-2.4.21/include/asm-s390x/processor.h
Back to the patch index
Back to the overall index
- Lines: 55
- Date:
2003-06-13 07:51:38.000000000 -0700
- Orig file:
linux-2.4.20/include/asm-s390x/rwsem.h
- Orig date:
2002-08-02 17:39:45.000000000 -0700
diff -urN linux-2.4.20/include/asm-s390x/rwsem.h linux-2.4.21/include/asm-s390x/rwsem.h
@@ -105,6 +105,27 @@
}
/*
+ * trylock for reading -- returns 1 if successful, 0 if contention
+ */
+static inline int __down_read_trylock(struct rw_semaphore *sem)
+{
+ signed long old, new;
+
+ __asm__ __volatile__(
+ " lg %0,0(%2)\n"
+ "0: ltgr %1,%0\n"
+ " jm 1f\n"
+ " aghi %1,%3\n"
+ " csg %0,%1,0(%2)\n"
+ " jl 0b\n"
+ "1:"
+ : "=&d" (old), "=&d" (new)
+ : "a" (&sem->count), "i" (RWSEM_ACTIVE_READ_BIAS)
+ : "cc", "memory" );
+ return old >= 0 ? 1 : 0;
+}
+
+/*
* lock for writing
*/
static inline void __down_write(struct rw_semaphore *sem)
@@ -126,6 +147,26 @@
}
/*
+ * trylock for writing -- returns 1 if successful, 0 if contention
+ */
+static inline int __down_write_trylock(struct rw_semaphore *sem)
+{
+ signed long old;
+
+ __asm__ __volatile__(
+ " lg %0,0(%1)\n"
+ "0: ltgr %0,%0\n"
+ " jnz 1f\n"
+ " csg %0,%2,0(%1)\n"
+ " jl 0b\n"
+ "1:"
+ : "=&d" (old)
+ : "a" (&sem->count), "d" (RWSEM_ACTIVE_WRITE_BIAS)
+ : "cc", "memory" );
+ return (old == RWSEM_UNLOCKED_VALUE) ? 1 : 0;
+}
+
+/*
* unlock after reading
*/
static inline void __up_read(struct rw_semaphore *sem)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)