Function report |
Source Code:kernel\locking\rwsem.c |
Create Date:2022-07-28 09:48:08 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:handle the lock release when processes blocked on it that can now run* - if we come here from up_xxxx(), then the RWSEM_FLAG_WAITERS bit must* have been set
Proto:static void rwsem_mark_wake(struct rw_semaphore *sem, enum rwsem_wake_type wake_type, struct wake_q_head *wake_q)
Type:void
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct rw_semaphore * | sem | |
| enum rwsem_wake_type | wake_type | |
| struct wake_q_head * | wake_q |
| 406 | woken = 0 , adjustment = 0 |
| 409 | lockdep_assert_held( & wait_lock) |
| 415 | waiter = rwsem_first_waiter(sem) |
| 417 | If type == RWSEM_WAITING_FOR_WRITE Then |
| 418 | If wake_type == Wake whatever's at head of wait list Then |
| 430 | Return |
| 436 | If Value for the false possibility is greater at compile time(atomic_long_read( & count) < 0) Then Return |
| 444 | If wake_type != RWSEM_WAKE_READ_OWNED Then |
| 447 | adjustment = RWSEM_READER_BIAS |
| 448 | oldcount = atomic_long_fetch_add(adjustment, & count) |
| 471 | If last_rowner & RWSEM_RD_NONSPINNABLE Then |
| 472 | owner = owner | RWSEM_RD_NONSPINNABLE |
| 503 | If type == RWSEM_WAITING_FOR_WRITE Then Continue |
| 506 | woken++ |
| 516 | adjustment = woken * RWSEM_READER_BIAS - adjustment |
| 520 | adjustment -= RWSEM_FLAG_WAITERS |
| 527 | If woken && atomic_long_read( & count) & RWSEM_FLAG_HANDOFF Then adjustment -= RWSEM_FLAG_HANDOFF |
| 530 | If adjustment Then atomic_long_add(adjustment, & count) |
| 538 | get_task_struct(tsk) |
| 546 | smp_store_release( & task, NULL) |
| Name | Describe |
|---|---|
| rwsem_down_read_slowpath | Wait for the read lock to be granted |
| rwsem_down_write_slowpath | Wait until we successfully acquire the write lock |
| rwsem_wake | handle waking up a waiter on the semaphore* - up_read/up_write has decremented the active part of count if we come here |
| rwsem_downgrade_wake | downgrade a write lock into a read lock* - caller incremented waiting part of count and discovered it still negative* - just wake up any readers at the front of the queue |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |