Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / linux / rwlock_rt.h
1 #ifndef __LINUX_RWLOCK_RT_H
2 #define __LINUX_RWLOCK_RT_H
3
4 #ifndef __LINUX_SPINLOCK_H
5 #error Do not include directly. Use spinlock.h
6 #endif
7
8 #define rwlock_init(rwl)                                \
9 do {                                                    \
10         static struct lock_class_key __key;             \
11                                                         \
12         rt_mutex_init(&(rwl)->lock);                    \
13         __rt_rwlock_init(rwl, #rwl, &__key);            \
14 } while (0)
15
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);
26
27 #define read_trylock(lock)      __cond_lock(lock, rt_read_trylock(lock))
28 #define write_trylock(lock)     __cond_lock(lock, rt_write_trylock(lock))
29
30 #define write_trylock_irqsave(lock, flags)      \
31         __cond_lock(lock, rt_write_trylock_irqsave(lock, &flags))
32
33 #define read_lock_irqsave(lock, flags)                  \
34         do {                                            \
35                 typecheck(unsigned long, flags);        \
36                 flags = rt_read_lock_irqsave(lock);     \
37         } while (0)
38
39 #define write_lock_irqsave(lock, flags)                 \
40         do {                                            \
41                 typecheck(unsigned long, flags);        \
42                 flags = rt_write_lock_irqsave(lock);    \
43         } while (0)
44
45 #define read_lock(lock)         rt_read_lock(lock)
46
47 #define read_lock_bh(lock)                              \
48         do {                                            \
49                 local_bh_disable();                     \
50                 rt_read_lock(lock);                     \
51         } while (0)
52
53 #define read_lock_irq(lock)     read_lock(lock)
54
55 #define write_lock(lock)        rt_write_lock(lock)
56
57 #define write_lock_bh(lock)                             \
58         do {                                            \
59                 local_bh_disable();                     \
60                 rt_write_lock(lock);                    \
61         } while (0)
62
63 #define write_lock_irq(lock)    write_lock(lock)
64
65 #define read_unlock(lock)       rt_read_unlock(lock)
66
67 #define read_unlock_bh(lock)                            \
68         do {                                            \
69                 rt_read_unlock(lock);                   \
70                 local_bh_enable();                      \
71         } while (0)
72
73 #define read_unlock_irq(lock)   read_unlock(lock)
74
75 #define write_unlock(lock)      rt_write_unlock(lock)
76
77 #define write_unlock_bh(lock)                           \
78         do {                                            \
79                 rt_write_unlock(lock);                  \
80                 local_bh_enable();                      \
81         } while (0)
82
83 #define write_unlock_irq(lock)  write_unlock(lock)
84
85 #define read_unlock_irqrestore(lock, flags)             \
86         do {                                            \
87                 typecheck(unsigned long, flags);        \
88                 (void) flags;                           \
89                 rt_read_unlock(lock);                   \
90         } while (0)
91
92 #define write_unlock_irqrestore(lock, flags) \
93         do {                                            \
94                 typecheck(unsigned long, flags);        \
95                 (void) flags;                           \
96                 rt_write_unlock(lock);                  \
97         } while (0)
98
99 #endif