cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rwbase_rt.h (876B)


      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 */