函数逻辑报告 | 
Source Code:kernel\locking\rwsem.c | 
Create Date:2022-07-27 10:48:29 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称: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
函数原型:static void rwsem_mark_wake(struct rw_semaphore *sem, enum rwsem_wake_type wake_type, struct wake_q_head *wake_q)
返回类型:void
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| 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 | 如果type恒等于RWSEM_WAITING_FOR_WRITE则 | 
| 418 | 如果wake_type恒等于 Wake whatever's at head of wait list 则 | 
| 430 | 返回 | 
| 436 | 如果此条件成立可能性小(为编译器优化)(atomic_long_read( & count) < 0)则返回 | 
| 444 | 如果wake_type不等于RWSEM_WAKE_READ_OWNED则 | 
| 448 | oldcount等于atomic_long_fetch_add(adjustment, & count) | 
| 449 | 如果此条件成立可能性小(为编译器优化)(oldcount & RWSEM_WRITER_MASK)则 | 
| 471 | 如果last_rowner按位与RWSEM_RD_NONSPINNABLE则 | 
| 472 | owner等于owner按位或RWSEM_RD_NONSPINNABLE | 
| 501 | 初始化链表头 | 
| 503 | 如果type恒等于RWSEM_WAITING_FOR_WRITE则继续下一循环 | 
| 506 | woken自加 | 
| 507 | 链表项移动到尾部 | 
| 518 | 如果链表为空则 | 
| 520 | adjustment减等于RWSEM_FLAG_WAITERS | 
| 527 | 如果woken且atomic_long_read( & count)按位与RWSEM_FLAG_HANDOFF则adjustment减等于RWSEM_FLAG_HANDOFF | 
| 530 | 如果adjustment则atomic_long_add(adjustment, & count) | 
| 538 | get_task_struct(tsk) | 
| 546 | smp_store_release( & task, NULL) | 
| 名称 | 描述 | 
|---|---|
| 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 | 
| 源代码转换工具 开放的插件接口  | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码  |