| From 9a6dd1fd4530aca9a8d9186e5146bb1c8698c41f Mon Sep 17 00:00:00 2001 |
| From: Paul Gortmaker <paul.gortmaker@windriver.com> |
| Date: Wed, 31 Aug 2016 11:18:32 -0400 |
| Subject: [PATCH] rt: create down_write_killable |
| |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/include/linux/rwsem_rt.h b/include/linux/rwsem_rt.h |
| index f97860b2e2a4..df9771f00540 100644 |
| --- a/include/linux/rwsem_rt.h |
| +++ b/include/linux/rwsem_rt.h |
| @@ -59,6 +59,7 @@ extern void rt_down_write_nested_lock(struct rw_semaphore *rwsem, |
| extern void rt__down_read(struct rw_semaphore *rwsem); |
| extern void rt_down_read(struct rw_semaphore *rwsem); |
| extern int rt_down_write_trylock(struct rw_semaphore *rwsem); |
| +extern int rt_down_write_killable(struct rw_semaphore *rwsem); |
| extern int rt__down_read_trylock(struct rw_semaphore *rwsem); |
| extern int rt_down_read_trylock(struct rw_semaphore *rwsem); |
| extern void __rt_up_read(struct rw_semaphore *rwsem); |
| @@ -105,6 +106,11 @@ static inline int down_write_trylock(struct rw_semaphore *sem) |
| return rt_down_write_trylock(sem); |
| } |
| |
| +static inline int down_write_killable(struct rw_semaphore *sem) |
| +{ |
| + return rt_down_write_killable(sem); |
| +} |
| + |
| static inline void __up_read(struct rw_semaphore *sem) |
| { |
| __rt_up_read(sem); |
| diff --git a/kernel/locking/rt.c b/kernel/locking/rt.c |
| index d4ab61c1848b..c4e97e4e7dc2 100644 |
| --- a/kernel/locking/rt.c |
| +++ b/kernel/locking/rt.c |
| @@ -351,6 +351,16 @@ int rt_down_write_trylock(struct rw_semaphore *rwsem) |
| } |
| EXPORT_SYMBOL(rt_down_write_trylock); |
| |
| +int rt_down_write_killable(struct rw_semaphore *rwsem) |
| +{ |
| + int ret = rt_mutex_lock_killable(&rwsem->lock); |
| + |
| + if (ret) |
| + rwsem_acquire(&rwsem->dep_map, 0, 1, _RET_IP_); |
| + return ret; |
| +} |
| +EXPORT_SYMBOL(rt_down_write_killable); |
| + |
| void rt_down_write(struct rw_semaphore *rwsem) |
| { |
| rwsem_acquire(&rwsem->dep_map, 0, 0, _RET_IP_); |
| -- |
| 2.5.0 |
| |