From 8a6d48c0542876eb3acfc0970c0ab7872db08d5f Mon Sep 17 00:00:00 2001 From: Zheng Da Date: Sun, 6 Dec 2009 05:26:23 +0100 Subject: check in the original version of dde linux26. --- libdde_linux26/contrib/include/linux/rwsem.h | 91 ++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 libdde_linux26/contrib/include/linux/rwsem.h (limited to 'libdde_linux26/contrib/include/linux/rwsem.h') diff --git a/libdde_linux26/contrib/include/linux/rwsem.h b/libdde_linux26/contrib/include/linux/rwsem.h new file mode 100644 index 00000000..efd348fe --- /dev/null +++ b/libdde_linux26/contrib/include/linux/rwsem.h @@ -0,0 +1,91 @@ +/* rwsem.h: R/W semaphores, public interface + * + * Written by David Howells (dhowells@redhat.com). + * Derived from asm-i386/semaphore.h + */ + +#ifndef _LINUX_RWSEM_H +#define _LINUX_RWSEM_H + +#include + +#include +#include +#include +#include + +struct rw_semaphore; + +#ifdef CONFIG_RWSEM_GENERIC_SPINLOCK +#include /* use a generic implementation */ +#else +#include /* use an arch-specific implementation */ +#endif + +/* + * lock for reading + */ +extern void down_read(struct rw_semaphore *sem); + +/* + * trylock for reading -- returns 1 if successful, 0 if contention + */ +extern int down_read_trylock(struct rw_semaphore *sem); + +/* + * lock for writing + */ +extern void down_write(struct rw_semaphore *sem); + +/* + * trylock for writing -- returns 1 if successful, 0 if contention + */ +extern int down_write_trylock(struct rw_semaphore *sem); + +/* + * release a read lock + */ +extern void up_read(struct rw_semaphore *sem); + +/* + * release a write lock + */ +extern void up_write(struct rw_semaphore *sem); + +/* + * downgrade write lock to read lock + */ +extern void downgrade_write(struct rw_semaphore *sem); + +#ifdef CONFIG_DEBUG_LOCK_ALLOC +/* + * nested locking. NOTE: rwsems are not allowed to recurse + * (which occurs if the same task tries to acquire the same + * lock instance multiple times), but multiple locks of the + * same lock class might be taken, if the order of the locks + * is always the same. This ordering rule can be expressed + * to lockdep via the _nested() APIs, but enumerating the + * subclasses that are used. (If the nesting relationship is + * static then another method for expressing nested locking is + * the explicit definition of lock class keys and the use of + * lockdep_set_class() at lock initialization time. + * See Documentation/lockdep-design.txt for more details.) + */ +extern void down_read_nested(struct rw_semaphore *sem, int subclass); +extern void down_write_nested(struct rw_semaphore *sem, int subclass); +/* + * 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_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 */ -- cgit v1.2.3