rwsem.c (1913c7f3fc2514e09262baf2267a82dfdb215c39) | rwsem.c (5facae4f3549b5cf7c0e10ec312a65ffd43b5726) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* kernel/rwsem.c: R/W semaphores, public implementation 3 * 4 * Written by David Howells (dhowells@redhat.com). 5 * Derived from asm-i386/semaphore.h 6 * 7 * Writer lock-stealing by Alex Shi <alex.shi@intel.com> 8 * and Michel Lespinasse <walken@google.com> --- 1490 unchanged lines hidden (view full) --- 1499EXPORT_SYMBOL(down_read); 1500 1501int __sched down_read_killable(struct rw_semaphore *sem) 1502{ 1503 might_sleep(); 1504 rwsem_acquire_read(&sem->dep_map, 0, 0, _RET_IP_); 1505 1506 if (LOCK_CONTENDED_RETURN(sem, __down_read_trylock, __down_read_killable)) { | 1// SPDX-License-Identifier: GPL-2.0 2/* kernel/rwsem.c: R/W semaphores, public implementation 3 * 4 * Written by David Howells (dhowells@redhat.com). 5 * Derived from asm-i386/semaphore.h 6 * 7 * Writer lock-stealing by Alex Shi <alex.shi@intel.com> 8 * and Michel Lespinasse <walken@google.com> --- 1490 unchanged lines hidden (view full) --- 1499EXPORT_SYMBOL(down_read); 1500 1501int __sched down_read_killable(struct rw_semaphore *sem) 1502{ 1503 might_sleep(); 1504 rwsem_acquire_read(&sem->dep_map, 0, 0, _RET_IP_); 1505 1506 if (LOCK_CONTENDED_RETURN(sem, __down_read_trylock, __down_read_killable)) { |
1507 rwsem_release(&sem->dep_map, 1, _RET_IP_); | 1507 rwsem_release(&sem->dep_map, _RET_IP_); |
1508 return -EINTR; 1509 } 1510 1511 return 0; 1512} 1513EXPORT_SYMBOL(down_read_killable); 1514 1515/* --- 25 unchanged lines hidden (view full) --- 1541 */ 1542int __sched down_write_killable(struct rw_semaphore *sem) 1543{ 1544 might_sleep(); 1545 rwsem_acquire(&sem->dep_map, 0, 0, _RET_IP_); 1546 1547 if (LOCK_CONTENDED_RETURN(sem, __down_write_trylock, 1548 __down_write_killable)) { | 1508 return -EINTR; 1509 } 1510 1511 return 0; 1512} 1513EXPORT_SYMBOL(down_read_killable); 1514 1515/* --- 25 unchanged lines hidden (view full) --- 1541 */ 1542int __sched down_write_killable(struct rw_semaphore *sem) 1543{ 1544 might_sleep(); 1545 rwsem_acquire(&sem->dep_map, 0, 0, _RET_IP_); 1546 1547 if (LOCK_CONTENDED_RETURN(sem, __down_write_trylock, 1548 __down_write_killable)) { |
1549 rwsem_release(&sem->dep_map, 1, _RET_IP_); | 1549 rwsem_release(&sem->dep_map, _RET_IP_); |
1550 return -EINTR; 1551 } 1552 1553 return 0; 1554} 1555EXPORT_SYMBOL(down_write_killable); 1556 1557/* --- 10 unchanged lines hidden (view full) --- 1568} 1569EXPORT_SYMBOL(down_write_trylock); 1570 1571/* 1572 * release a read lock 1573 */ 1574void up_read(struct rw_semaphore *sem) 1575{ | 1550 return -EINTR; 1551 } 1552 1553 return 0; 1554} 1555EXPORT_SYMBOL(down_write_killable); 1556 1557/* --- 10 unchanged lines hidden (view full) --- 1568} 1569EXPORT_SYMBOL(down_write_trylock); 1570 1571/* 1572 * release a read lock 1573 */ 1574void up_read(struct rw_semaphore *sem) 1575{ |
1576 rwsem_release(&sem->dep_map, 1, _RET_IP_); | 1576 rwsem_release(&sem->dep_map, _RET_IP_); |
1577 __up_read(sem); 1578} 1579EXPORT_SYMBOL(up_read); 1580 1581/* 1582 * release a write lock 1583 */ 1584void up_write(struct rw_semaphore *sem) 1585{ | 1577 __up_read(sem); 1578} 1579EXPORT_SYMBOL(up_read); 1580 1581/* 1582 * release a write lock 1583 */ 1584void up_write(struct rw_semaphore *sem) 1585{ |
1586 rwsem_release(&sem->dep_map, 1, _RET_IP_); | 1586 rwsem_release(&sem->dep_map, _RET_IP_); |
1587 __up_write(sem); 1588} 1589EXPORT_SYMBOL(up_write); 1590 1591/* 1592 * downgrade write lock to read lock 1593 */ 1594void downgrade_write(struct rw_semaphore *sem) --- 39 unchanged lines hidden (view full) --- 1634 1635int __sched down_write_killable_nested(struct rw_semaphore *sem, int subclass) 1636{ 1637 might_sleep(); 1638 rwsem_acquire(&sem->dep_map, subclass, 0, _RET_IP_); 1639 1640 if (LOCK_CONTENDED_RETURN(sem, __down_write_trylock, 1641 __down_write_killable)) { | 1587 __up_write(sem); 1588} 1589EXPORT_SYMBOL(up_write); 1590 1591/* 1592 * downgrade write lock to read lock 1593 */ 1594void downgrade_write(struct rw_semaphore *sem) --- 39 unchanged lines hidden (view full) --- 1634 1635int __sched down_write_killable_nested(struct rw_semaphore *sem, int subclass) 1636{ 1637 might_sleep(); 1638 rwsem_acquire(&sem->dep_map, subclass, 0, _RET_IP_); 1639 1640 if (LOCK_CONTENDED_RETURN(sem, __down_write_trylock, 1641 __down_write_killable)) { |
1642 rwsem_release(&sem->dep_map, 1, _RET_IP_); | 1642 rwsem_release(&sem->dep_map, _RET_IP_); |
1643 return -EINTR; 1644 } 1645 1646 return 0; 1647} 1648EXPORT_SYMBOL(down_write_killable_nested); 1649 1650void up_read_non_owner(struct rw_semaphore *sem) 1651{ 1652 DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem); 1653 __up_read(sem); 1654} 1655EXPORT_SYMBOL(up_read_non_owner); 1656 1657#endif | 1643 return -EINTR; 1644 } 1645 1646 return 0; 1647} 1648EXPORT_SYMBOL(down_write_killable_nested); 1649 1650void up_read_non_owner(struct rw_semaphore *sem) 1651{ 1652 DEBUG_RWSEMS_WARN_ON(!is_rwsem_reader_owned(sem), sem); 1653 __up_read(sem); 1654} 1655EXPORT_SYMBOL(up_read_non_owner); 1656 1657#endif |