diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/blk_types.h | 1 | ||||
-rw-r--r-- | include/linux/percpu-rwsem.h | 8 | ||||
-rw-r--r-- | include/linux/preempt.h | 5 | ||||
-rw-r--r-- | include/linux/rwsem.h | 54 | ||||
-rw-r--r-- | include/linux/spinlock.h | 2 |
5 files changed, 63 insertions, 7 deletions
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 72056043..b4495886 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -265,6 +265,7 @@ static inline void bio_set_op_attrs(struct bio *bio, unsigned op, #define REQ_FUA (1ULL << __REQ_FUA) #define REQ_PREFLUSH (1ULL << __REQ_PREFLUSH) +#define REQ_IDLE (1ULL << __REQ_IDLE) #define RW_MASK REQ_OP_WRITE diff --git a/include/linux/percpu-rwsem.h b/include/linux/percpu-rwsem.h index 153251c0..20fa19a0 100644 --- a/include/linux/percpu-rwsem.h +++ b/include/linux/percpu-rwsem.h @@ -4,6 +4,7 @@ #define _LINUX_PERCPU_RWSEM_H #include <pthread.h> +#include <linux/cleanup.h> #include <linux/preempt.h> struct percpu_rw_semaphore { @@ -55,4 +56,11 @@ static inline int percpu_init_rwsem(struct percpu_rw_semaphore *sem) #define percpu_rwsem_assert_held(sem) do {} while (0) +DEFINE_GUARD(percpu_read, struct percpu_rw_semaphore *, + percpu_down_read(_T), percpu_up_read(_T)) +DEFINE_GUARD_COND(percpu_read, _try, percpu_down_read_trylock(_T)) + +DEFINE_GUARD(percpu_write, struct percpu_rw_semaphore *, + percpu_down_write(_T), percpu_up_write(_T)) + #endif diff --git a/include/linux/preempt.h b/include/linux/preempt.h index dbc7c24d..534932f6 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h @@ -1,6 +1,8 @@ #ifndef __LINUX_PREEMPT_H #define __LINUX_PREEMPT_H +#include <linux/cleanup.h> + extern void preempt_disable(void); extern void preempt_enable(void); @@ -13,4 +15,7 @@ extern void preempt_enable(void); #define preempt_enable_notrace() preempt_enable() #define preemptible() 0 +DEFINE_LOCK_GUARD_0(preempt, preempt_disable(), preempt_enable()) +DEFINE_LOCK_GUARD_0(preempt_notrace, preempt_disable_notrace(), preempt_enable_notrace()) + #endif /* __LINUX_PREEMPT_H */ diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h index f851d6a2..4dd30b71 100644 --- a/include/linux/rwsem.h +++ b/include/linux/rwsem.h @@ -2,6 +2,7 @@ #define __TOOLS_LINUX_RWSEM_H #include <pthread.h> +#include <linux/cleanup.h> struct rw_semaphore { pthread_rwlock_t lock; @@ -18,12 +19,53 @@ static inline void init_rwsem(struct rw_semaphore *lock) pthread_rwlock_init(&lock->lock, NULL); } -#define down_read(l) pthread_rwlock_rdlock(&(l)->lock) -#define down_read_killable(l) (pthread_rwlock_rdlock(&(l)->lock), 0) -#define down_read_trylock(l) (!pthread_rwlock_tryrdlock(&(l)->lock)) -#define up_read(l) pthread_rwlock_unlock(&(l)->lock) +static inline void down_read(struct rw_semaphore *sem) +{ + pthread_rwlock_rdlock(&sem->lock); +} + +static inline int down_read_trylock(struct rw_semaphore *sem) +{ + return !pthread_rwlock_tryrdlock(&sem->lock); +} + +static inline int down_read_interruptible(struct rw_semaphore *sem) +{ + pthread_rwlock_rdlock(&sem->lock); + return 0; +} + +static inline int down_read_killable(struct rw_semaphore *sem) +{ + pthread_rwlock_rdlock(&sem->lock); + return 0; +} + +static inline void up_read(struct rw_semaphore *sem) +{ + pthread_rwlock_unlock(&sem->lock); +} + +static inline void down_write(struct rw_semaphore *sem) +{ + pthread_rwlock_wrlock(&sem->lock); +} + +static inline int down_write_trylock(struct rw_semaphore *sem) +{ + return !pthread_rwlock_trywrlock(&sem->lock); +} + +static inline void up_write(struct rw_semaphore *sem) +{ + pthread_rwlock_unlock(&sem->lock); +} + +DEFINE_GUARD(rwsem_read, struct rw_semaphore *, down_read(_T), up_read(_T)) +DEFINE_GUARD_COND(rwsem_read, _try, down_read_trylock(_T)) +DEFINE_GUARD_COND(rwsem_read, _intr, down_read_interruptible(_T) == 0) -#define down_write(l) pthread_rwlock_wrlock(&(l)->lock) -#define up_write(l) pthread_rwlock_unlock(&(l)->lock) +DEFINE_GUARD(rwsem_write, struct rw_semaphore *, down_write(_T), up_write(_T)) +DEFINE_GUARD_COND(rwsem_write, _try, down_write_trylock(_T)) #endif /* __TOOLS_LINUX_RWSEM_H */ diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 5c83c766..20cb1756 100644 --- a/include/linux/spinlock.h +++ b/include/linux/spinlock.h @@ -42,11 +42,11 @@ DEFINE_LOCK_GUARD_1(spinlock, spinlock_t, spin_unlock(_T->lock)) DEFINE_LOCK_GUARD_1_COND(spinlock, _try, spin_trylock(_T->lock)) -#if 0 DEFINE_LOCK_GUARD_1(spinlock_irq, spinlock_t, spin_lock_irq(_T->lock), spin_unlock_irq(_T->lock)) +#if 0 DEFINE_LOCK_GUARD_1_COND(spinlock_irq, _try, spin_trylock_irq(_T->lock)) |