Viewing file: rwlock_rt.h (3.29 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// SPDX-License-Identifier: GPL-2.0-only #ifndef __LINUX_RWLOCK_RT_H #define __LINUX_RWLOCK_RT_H
#ifndef __LINUX_SPINLOCK_RT_H #error Do not #include directly. Use <linux/spinlock.h>. #endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC extern void __rt_rwlock_init(rwlock_t *rwlock, const char *name, struct lock_class_key *key); #else static inline void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key) { } #endif
#define rwlock_init(rwl) \ do { \ static struct lock_class_key __key; \ \ init_rwbase_rt(&(rwl)->rwbase); \ __rt_rwlock_init(rwl, #rwl, &__key); \ } while (0)
extern void rt_read_lock(rwlock_t *rwlock); extern int rt_read_trylock(rwlock_t *rwlock); extern void rt_read_unlock(rwlock_t *rwlock); extern void rt_write_lock(rwlock_t *rwlock); extern void rt_write_lock_nested(rwlock_t *rwlock, int subclass); extern int rt_write_trylock(rwlock_t *rwlock); extern void rt_write_unlock(rwlock_t *rwlock);
static __always_inline void read_lock(rwlock_t *rwlock) { rt_read_lock(rwlock); }
static __always_inline void read_lock_bh(rwlock_t *rwlock) { local_bh_disable(); rt_read_lock(rwlock); }
static __always_inline void read_lock_irq(rwlock_t *rwlock) { rt_read_lock(rwlock); }
#define read_lock_irqsave(lock, flags) \ do { \ typecheck(unsigned long, flags); \ rt_read_lock(lock); \ flags = 0; \ } while (0)
#define read_trylock(lock) __cond_lock(lock, rt_read_trylock(lock))
static __always_inline void read_unlock(rwlock_t *rwlock) { rt_read_unlock(rwlock); }
static __always_inline void read_unlock_bh(rwlock_t *rwlock) { rt_read_unlock(rwlock); local_bh_enable(); }
static __always_inline void read_unlock_irq(rwlock_t *rwlock) { rt_read_unlock(rwlock); }
static __always_inline void read_unlock_irqrestore(rwlock_t *rwlock, unsigned long flags) { rt_read_unlock(rwlock); }
static __always_inline void write_lock(rwlock_t *rwlock) { rt_write_lock(rwlock); }
#ifdef CONFIG_DEBUG_LOCK_ALLOC static __always_inline void write_lock_nested(rwlock_t *rwlock, int subclass) { rt_write_lock_nested(rwlock, subclass); } #else #define write_lock_nested(lock, subclass) rt_write_lock(((void)(subclass), (lock))) #endif
static __always_inline void write_lock_bh(rwlock_t *rwlock) { local_bh_disable(); rt_write_lock(rwlock); }
static __always_inline void write_lock_irq(rwlock_t *rwlock) { rt_write_lock(rwlock); }
#define write_lock_irqsave(lock, flags) \ do { \ typecheck(unsigned long, flags); \ rt_write_lock(lock); \ flags = 0; \ } while (0)
#define write_trylock(lock) __cond_lock(lock, rt_write_trylock(lock))
#define write_trylock_irqsave(lock, flags) \ ({ \ int __locked; \ \ typecheck(unsigned long, flags); \ flags = 0; \ __locked = write_trylock(lock); \ __locked; \ })
static __always_inline void write_unlock(rwlock_t *rwlock) { rt_write_unlock(rwlock); }
static __always_inline void write_unlock_bh(rwlock_t *rwlock) { rt_write_unlock(rwlock); local_bh_enable(); }
static __always_inline void write_unlock_irq(rwlock_t *rwlock) { rt_write_unlock(rwlock); }
static __always_inline void write_unlock_irqrestore(rwlock_t *rwlock, unsigned long flags) { rt_write_unlock(rwlock); }
#define rwlock_is_contended(lock) (((void)(lock), 0))
#endif /* __LINUX_RWLOCK_RT_H */
|