]>
git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - include/linux/rwlock_rt.h
1 // SPDX-License-Identifier: GPL-2.0-only
2 #ifndef __LINUX_RWLOCK_RT_H
3 #define __LINUX_RWLOCK_RT_H
5 #ifndef __LINUX_SPINLOCK_RT_H
6 #error Do not #include directly. Use <linux/spinlock.h>.
9 #ifdef CONFIG_DEBUG_LOCK_ALLOC
10 extern void __rt_rwlock_init(rwlock_t
*rwlock
, const char *name
,
11 struct lock_class_key
*key
);
13 static inline void __rt_rwlock_init(rwlock_t
*rwlock
, char *name
,
14 struct lock_class_key
*key
)
19 #define rwlock_init(rwl) \
21 static struct lock_class_key __key; \
23 init_rwbase_rt(&(rwl)->rwbase); \
24 __rt_rwlock_init(rwl, #rwl, &__key); \
27 extern void rt_read_lock(rwlock_t
*rwlock
);
28 extern int rt_read_trylock(rwlock_t
*rwlock
);
29 extern void rt_read_unlock(rwlock_t
*rwlock
);
30 extern void rt_write_lock(rwlock_t
*rwlock
);
31 extern int rt_write_trylock(rwlock_t
*rwlock
);
32 extern void rt_write_unlock(rwlock_t
*rwlock
);
34 static __always_inline
void read_lock(rwlock_t
*rwlock
)
39 static __always_inline
void read_lock_bh(rwlock_t
*rwlock
)
45 static __always_inline
void read_lock_irq(rwlock_t
*rwlock
)
50 #define read_lock_irqsave(lock, flags) \
52 typecheck(unsigned long, flags); \
57 #define read_trylock(lock) __cond_lock(lock, rt_read_trylock(lock))
59 static __always_inline
void read_unlock(rwlock_t
*rwlock
)
61 rt_read_unlock(rwlock
);
64 static __always_inline
void read_unlock_bh(rwlock_t
*rwlock
)
66 rt_read_unlock(rwlock
);
70 static __always_inline
void read_unlock_irq(rwlock_t
*rwlock
)
72 rt_read_unlock(rwlock
);
75 static __always_inline
void read_unlock_irqrestore(rwlock_t
*rwlock
,
78 rt_read_unlock(rwlock
);
81 static __always_inline
void write_lock(rwlock_t
*rwlock
)
83 rt_write_lock(rwlock
);
86 static __always_inline
void write_lock_bh(rwlock_t
*rwlock
)
89 rt_write_lock(rwlock
);
92 static __always_inline
void write_lock_irq(rwlock_t
*rwlock
)
94 rt_write_lock(rwlock
);
97 #define write_lock_irqsave(lock, flags) \
99 typecheck(unsigned long, flags); \
100 rt_write_lock(lock); \
104 #define write_trylock(lock) __cond_lock(lock, rt_write_trylock(lock))
106 #define write_trylock_irqsave(lock, flags) \
110 typecheck(unsigned long, flags); \
112 __locked = write_trylock(lock); \
116 static __always_inline
void write_unlock(rwlock_t
*rwlock
)
118 rt_write_unlock(rwlock
);
121 static __always_inline
void write_unlock_bh(rwlock_t
*rwlock
)
123 rt_write_unlock(rwlock
);
127 static __always_inline
void write_unlock_irq(rwlock_t
*rwlock
)
129 rt_write_unlock(rwlock
);
132 static __always_inline
void write_unlock_irqrestore(rwlock_t
*rwlock
,
135 rt_write_unlock(rwlock
);
138 #define rwlock_is_contended(lock) (((void)(lock), 0))
140 #endif /* __LINUX_RWLOCK_RT_H */