Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 #ifndef _LINUX_RWBASE_RT_H
0003 #define _LINUX_RWBASE_RT_H
0004 
0005 #include <linux/rtmutex.h>
0006 #include <linux/atomic.h>
0007 
0008 #define READER_BIAS     (1U << 31)
0009 #define WRITER_BIAS     (1U << 30)
0010 
0011 struct rwbase_rt {
0012     atomic_t        readers;
0013     struct rt_mutex_base    rtmutex;
0014 };
0015 
0016 #define __RWBASE_INITIALIZER(name)              \
0017 {                               \
0018     .readers = ATOMIC_INIT(READER_BIAS),            \
0019     .rtmutex = __RT_MUTEX_BASE_INITIALIZER(name.rtmutex),   \
0020 }
0021 
0022 #define init_rwbase_rt(rwbase)                  \
0023     do {                            \
0024         rt_mutex_base_init(&(rwbase)->rtmutex);     \
0025         atomic_set(&(rwbase)->readers, READER_BIAS);    \
0026     } while (0)
0027 
0028 
0029 static __always_inline bool rw_base_is_locked(struct rwbase_rt *rwb)
0030 {
0031     return atomic_read(&rwb->readers) != READER_BIAS;
0032 }
0033 
0034 static __always_inline bool rw_base_is_contended(struct rwbase_rt *rwb)
0035 {
0036     return atomic_read(&rwb->readers) > 0;
0037 }
0038 
0039 #endif /* _LINUX_RWBASE_RT_H */