The following commit has been merged into the locking/core branch of tip:

Commit-ID:     c995e638ccbbc65a76d1713c4fdcf927e7e2cb83
Gitweb:        
https://git.kernel.org/tip/c995e638ccbbc65a76d1713c4fdcf927e7e2cb83
Author:        Peter Zijlstra <[email protected]>
AuthorDate:    Tue, 08 Dec 2020 10:27:41 +01:00
Committer:     Peter Zijlstra <[email protected]>
CommitterDate: Wed, 09 Dec 2020 17:08:47 +01:00

locking/rwsem: Fold __down_{read,write}*()

There's a lot needless duplication in __down_{read,write}*(), cure
that with a helper.

Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Link: 
https://lkml.kernel.org/r/[email protected]
---
 kernel/locking/rwsem.c | 45 ++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index 7915456..67ae366 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -1354,32 +1354,29 @@ static struct rw_semaphore *rwsem_downgrade_wake(struct 
rw_semaphore *sem)
 /*
  * lock for reading
  */
-static inline void __down_read(struct rw_semaphore *sem)
+static inline int __down_read_common(struct rw_semaphore *sem, int state)
 {
        if (!rwsem_read_trylock(sem)) {
-               rwsem_down_read_slowpath(sem, TASK_UNINTERRUPTIBLE);
+               if (IS_ERR(rwsem_down_read_slowpath(sem, state)))
+                       return -EINTR;
                DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
        }
+       return 0;
+}
+
+static inline void __down_read(struct rw_semaphore *sem)
+{
+       __down_read_common(sem, TASK_UNINTERRUPTIBLE);
 }
 
 static inline int __down_read_interruptible(struct rw_semaphore *sem)
 {
-       if (!rwsem_read_trylock(sem)) {
-               if (IS_ERR(rwsem_down_read_slowpath(sem, TASK_INTERRUPTIBLE)))
-                       return -EINTR;
-               DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
-       }
-       return 0;
+       return __down_read_common(sem, TASK_INTERRUPTIBLE);
 }
 
 static inline int __down_read_killable(struct rw_semaphore *sem)
 {
-       if (!rwsem_read_trylock(sem)) {
-               if (IS_ERR(rwsem_down_read_slowpath(sem, TASK_KILLABLE)))
-                       return -EINTR;
-               DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
-       }
-       return 0;
+       return __down_read_common(sem, TASK_KILLABLE);
 }
 
 static inline int __down_read_trylock(struct rw_semaphore *sem)
@@ -1405,22 +1402,26 @@ static inline int __down_read_trylock(struct 
rw_semaphore *sem)
 /*
  * lock for writing
  */
-static inline void __down_write(struct rw_semaphore *sem)
-{
-       if (unlikely(!rwsem_write_trylock(sem)))
-               rwsem_down_write_slowpath(sem, TASK_UNINTERRUPTIBLE);
-}
-
-static inline int __down_write_killable(struct rw_semaphore *sem)
+static inline int __down_write_common(struct rw_semaphore *sem, int state)
 {
        if (unlikely(!rwsem_write_trylock(sem))) {
-               if (IS_ERR(rwsem_down_write_slowpath(sem, TASK_KILLABLE)))
+               if (IS_ERR(rwsem_down_write_slowpath(sem, state)))
                        return -EINTR;
        }
 
        return 0;
 }
 
+static inline void __down_write(struct rw_semaphore *sem)
+{
+       __down_write_common(sem, TASK_UNINTERRUPTIBLE);
+}
+
+static inline int __down_write_killable(struct rw_semaphore *sem)
+{
+       return __down_write_common(sem, TASK_KILLABLE);
+}
+
 static inline int __down_write_trylock(struct rw_semaphore *sem)
 {
        DEBUG_RWSEMS_WARN_ON(sem->magic != sem, sem);

Reply via email to