1 #ifndef __LINUX_RWLOCK_RT_H
2 #define __LINUX_RWLOCK_RT_H
4 #ifndef __LINUX_SPINLOCK_H
5 #error Do not include directly. Use spinlock.h
8 #define rwlock_init(rwl) \
10 static struct lock_class_key __key; \
12 rt_mutex_init(&(rwl)->lock); \
13 __rt_rwlock_init(rwl, #rwl, &__key); \
16 extern void __lockfunc rt_write_lock(rwlock_t *rwlock);
17 extern void __lockfunc rt_read_lock(rwlock_t *rwlock);
18 extern int __lockfunc rt_write_trylock(rwlock_t *rwlock);
19 extern int __lockfunc rt_write_trylock_irqsave(rwlock_t *trylock, unsigned long *flags);
20 extern int __lockfunc rt_read_trylock(rwlock_t *rwlock);
21 extern void __lockfunc rt_write_unlock(rwlock_t *rwlock);
22 extern void __lockfunc rt_read_unlock(rwlock_t *rwlock);
23 extern unsigned long __lockfunc rt_write_lock_irqsave(rwlock_t *rwlock);
24 extern unsigned long __lockfunc rt_read_lock_irqsave(rwlock_t *rwlock);
25 extern void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key);
27 #define read_trylock(lock) __cond_lock(lock, rt_read_trylock(lock))
28 #define write_trylock(lock) __cond_lock(lock, rt_write_trylock(lock))
30 #define write_trylock_irqsave(lock, flags) \
31 __cond_lock(lock, rt_write_trylock_irqsave(lock, &flags))
33 #define read_lock_irqsave(lock, flags) \
35 typecheck(unsigned long, flags); \
36 flags = rt_read_lock_irqsave(lock); \
39 #define write_lock_irqsave(lock, flags) \
41 typecheck(unsigned long, flags); \
42 flags = rt_write_lock_irqsave(lock); \
45 #define read_lock(lock) rt_read_lock(lock)
47 #define read_lock_bh(lock) \
53 #define read_lock_irq(lock) read_lock(lock)
55 #define write_lock(lock) rt_write_lock(lock)
57 #define write_lock_bh(lock) \
60 rt_write_lock(lock); \
63 #define write_lock_irq(lock) write_lock(lock)
65 #define read_unlock(lock) rt_read_unlock(lock)
67 #define read_unlock_bh(lock) \
69 rt_read_unlock(lock); \
73 #define read_unlock_irq(lock) read_unlock(lock)
75 #define write_unlock(lock) rt_write_unlock(lock)
77 #define write_unlock_bh(lock) \
79 rt_write_unlock(lock); \
83 #define write_unlock_irq(lock) write_unlock(lock)
85 #define read_unlock_irqrestore(lock, flags) \
87 typecheck(unsigned long, flags); \
89 rt_read_unlock(lock); \
92 #define write_unlock_irqrestore(lock, flags) \
94 typecheck(unsigned long, flags); \
96 rt_write_unlock(lock); \