Skip to content

Commit c995e63

Browse files
author
Peter Zijlstra
committed
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]
1 parent 285c61a commit c995e63

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

kernel/locking/rwsem.c

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,32 +1354,29 @@ static struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem)
13541354
/*
13551355
* lock for reading
13561356
*/
1357-
static inline void __down_read(struct rw_semaphore *sem)
1357+
static inline int __down_read_common(struct rw_semaphore *sem, int state)
13581358
{
13591359
if (!rwsem_read_trylock(sem)) {
1360-
rwsem_down_read_slowpath(sem, TASK_UNINTERRUPTIBLE);
1360+
if (IS_ERR(rwsem_down_read_slowpath(sem, state)))
1361+
return -EINTR;
13611362
DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
13621363
}
1364+
return 0;
1365+
}
1366+
1367+
static inline void __down_read(struct rw_semaphore *sem)
1368+
{
1369+
__down_read_common(sem, TASK_UNINTERRUPTIBLE);
13631370
}
13641371

13651372
static inline int __down_read_interruptible(struct rw_semaphore *sem)
13661373
{
1367-
if (!rwsem_read_trylock(sem)) {
1368-
if (IS_ERR(rwsem_down_read_slowpath(sem, TASK_INTERRUPTIBLE)))
1369-
return -EINTR;
1370-
DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
1371-
}
1372-
return 0;
1374+
return __down_read_common(sem, TASK_INTERRUPTIBLE);
13731375
}
13741376

13751377
static inline int __down_read_killable(struct rw_semaphore *sem)
13761378
{
1377-
if (!rwsem_read_trylock(sem)) {
1378-
if (IS_ERR(rwsem_down_read_slowpath(sem, TASK_KILLABLE)))
1379-
return -EINTR;
1380-
DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem);
1381-
}
1382-
return 0;
1379+
return __down_read_common(sem, TASK_KILLABLE);
13831380
}
13841381

13851382
static inline int __down_read_trylock(struct rw_semaphore *sem)
@@ -1405,22 +1402,26 @@ static inline int __down_read_trylock(struct rw_semaphore *sem)
14051402
/*
14061403
* lock for writing
14071404
*/
1408-
static inline void __down_write(struct rw_semaphore *sem)
1409-
{
1410-
if (unlikely(!rwsem_write_trylock(sem)))
1411-
rwsem_down_write_slowpath(sem, TASK_UNINTERRUPTIBLE);
1412-
}
1413-
1414-
static inline int __down_write_killable(struct rw_semaphore *sem)
1405+
static inline int __down_write_common(struct rw_semaphore *sem, int state)
14151406
{
14161407
if (unlikely(!rwsem_write_trylock(sem))) {
1417-
if (IS_ERR(rwsem_down_write_slowpath(sem, TASK_KILLABLE)))
1408+
if (IS_ERR(rwsem_down_write_slowpath(sem, state)))
14181409
return -EINTR;
14191410
}
14201411

14211412
return 0;
14221413
}
14231414

1415+
static inline void __down_write(struct rw_semaphore *sem)
1416+
{
1417+
__down_write_common(sem, TASK_UNINTERRUPTIBLE);
1418+
}
1419+
1420+
static inline int __down_write_killable(struct rw_semaphore *sem)
1421+
{
1422+
return __down_write_common(sem, TASK_KILLABLE);
1423+
}
1424+
14241425
static inline int __down_write_trylock(struct rw_semaphore *sem)
14251426
{
14261427
DEBUG_RWSEMS_WARN_ON(sem->magic != sem, sem);

0 commit comments

Comments
 (0)