linux/include/linux/rwbase_rt.h
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2#ifndef _LINUX_RWBASE_RT_H
   3#define _LINUX_RWBASE_RT_H
   4
   5#include <linux/rtmutex.h>
   6#include <linux/atomic.h>
   7
   8#define READER_BIAS             (1U << 31)
   9#define WRITER_BIAS             (1U << 30)
  10
  11struct rwbase_rt {
  12        atomic_t                readers;
  13        struct rt_mutex_base    rtmutex;
  14};
  15
  16#define __RWBASE_INITIALIZER(name)                              \
  17{                                                               \
  18        .readers = ATOMIC_INIT(READER_BIAS),                    \
  19        .rtmutex = __RT_MUTEX_BASE_INITIALIZER(name.rtmutex),   \
  20}
  21
  22#define init_rwbase_rt(rwbase)                                  \
  23        do {                                                    \
  24                rt_mutex_base_init(&(rwbase)->rtmutex);         \
  25                atomic_set(&(rwbase)->readers, READER_BIAS);    \
  26        } while (0)
  27
  28
  29static __always_inline bool rw_base_is_locked(struct rwbase_rt *rwb)
  30{
  31        return atomic_read(&rwb->readers) != READER_BIAS;
  32}
  33
  34static __always_inline bool rw_base_is_contended(struct rwbase_rt *rwb)
  35{
  36        return atomic_read(&rwb->readers) > 0;
  37}
  38
  39#endif /* _LINUX_RWBASE_RT_H */
  40