diff options
Diffstat (limited to 'include/linux/rwsem.h')
| -rw-r--r-- | include/linux/rwsem.h | 83 | 
1 files changed, 25 insertions, 58 deletions
| diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index f99fe90732ab..658afb37c3f5 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -9,8 +9,6 @@  #include <linux/linkage.h> -#define RWSEM_DEBUG 0 -  #ifdef __KERNEL__  #include <linux/types.h> @@ -26,89 +24,58 @@ struct rw_semaphore;  #include <asm/rwsem.h> /* use an arch-specific implementation */  #endif -#ifndef rwsemtrace -#if RWSEM_DEBUG -extern void FASTCALL(rwsemtrace(struct rw_semaphore *sem, const char *str)); -#else -#define rwsemtrace(SEM,FMT) -#endif -#endif -  /*   * lock for reading   */ -static inline void down_read(struct rw_semaphore *sem) -{ -	might_sleep(); -	rwsemtrace(sem,"Entering down_read"); -	__down_read(sem); -	rwsemtrace(sem,"Leaving down_read"); -} +extern void down_read(struct rw_semaphore *sem);  /*   * trylock for reading -- returns 1 if successful, 0 if contention   */ -static inline int down_read_trylock(struct rw_semaphore *sem) -{ -	int ret; -	rwsemtrace(sem,"Entering down_read_trylock"); -	ret = __down_read_trylock(sem); -	rwsemtrace(sem,"Leaving down_read_trylock"); -	return ret; -} +extern int down_read_trylock(struct rw_semaphore *sem);  /*   * lock for writing   */ -static inline void down_write(struct rw_semaphore *sem) -{ -	might_sleep(); -	rwsemtrace(sem,"Entering down_write"); -	__down_write(sem); -	rwsemtrace(sem,"Leaving down_write"); -} +extern void down_write(struct rw_semaphore *sem);  /*   * trylock for writing -- returns 1 if successful, 0 if contention   */ -static inline int down_write_trylock(struct rw_semaphore *sem) -{ -	int ret; -	rwsemtrace(sem,"Entering down_write_trylock"); -	ret = __down_write_trylock(sem); -	rwsemtrace(sem,"Leaving down_write_trylock"); -	return ret; -} +extern int down_write_trylock(struct rw_semaphore *sem);  /*   * release a read lock   */ -static inline void up_read(struct rw_semaphore *sem) -{ -	rwsemtrace(sem,"Entering up_read"); -	__up_read(sem); -	rwsemtrace(sem,"Leaving up_read"); -} +extern void up_read(struct rw_semaphore *sem);  /*   * release a write lock   */ -static inline void up_write(struct rw_semaphore *sem) -{ -	rwsemtrace(sem,"Entering up_write"); -	__up_write(sem); -	rwsemtrace(sem,"Leaving up_write"); -} +extern void up_write(struct rw_semaphore *sem);  /*   * downgrade write lock to read lock   */ -static inline void downgrade_write(struct rw_semaphore *sem) -{ -	rwsemtrace(sem,"Entering downgrade_write"); -	__downgrade_write(sem); -	rwsemtrace(sem,"Leaving downgrade_write"); -} +extern void downgrade_write(struct rw_semaphore *sem); + +#ifdef CONFIG_DEBUG_LOCK_ALLOC +/* + * nested locking: + */ +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: + */ +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 /* __KERNEL__ */  #endif /* _LINUX_RWSEM_H */ | 
