|
@@ -133,10 +133,20 @@ do { \
|
|
|
_down_write_nest_lock(sem, &(nest_lock)->dep_map); \
|
|
|
} while (0);
|
|
|
|
|
|
+/*
|
|
|
+ * Take/release a lock when not the owner will release it.
|
|
|
+ *
|
|
|
+ * [ This API should be avoided as much as possible - the
|
|
|
+ * proper abstraction for this case is completions. ]
|
|
|
+ */
|
|
|
+extern void down_read_non_owner(struct rw_semaphore *sem);
|
|
|
+extern void up_read_non_owner(struct rw_semaphore *sem);
|
|
|
#else
|
|
|
# define down_read_nested(sem, subclass) down_read(sem)
|
|
|
# define down_write_nest_lock(sem, nest_lock) down_write(sem)
|
|
|
# define down_write_nested(sem, subclass) down_write(sem)
|
|
|
+# define down_read_non_owner(sem) down_read(sem)
|
|
|
+# define up_read_non_owner(sem) up_read(sem)
|
|
|
#endif
|
|
|
|
|
|
#endif /* _LINUX_RWSEM_H */
|