函数逻辑报告 |
Source Code:ipc\sem.c |
Create Date:2022-07-27 18:20:01 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:semctl_main
函数原型:static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, int cmd, void __user *p)
返回类型:int
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| struct ipc_namespace * | ns | |
| int | semid | |
| int | semnum | |
| int | cmd | |
| void __user * | p |
| 1393 | sem_io等于fast_sem_io |
| 1397 | sma等于sem_obtain_object_check(ns, semid) |
| 1398 | 如果是错误则 |
| 1400 | 返回:错误 |
| 1409 | err等于security_sem_semctl( & permissions .. see ipc.h , cmd) |
| 1410 | 如果err则转到:out_rcu_wakeup |
| 1415 | 当:cmd恒等于get all semval's |
| 1423 | 转到:out_unlock |
| 1425 | 如果nsems大于512 bytes on stack 则 |
| 1426 | 如果非ipc_rcu_getref( & permissions .. see ipc.h )则 |
| 1428 | 转到:out_unlock |
| 1430 | sem_unlock(sma, - 1) |
| 1432 | sem_io等于kvmalloc_array(nsems, sizeof(ushort), GFP_KERNEL) |
| 1434 | 如果(sem_io == NULL)则 |
| 1435 | ipc_rcu_putref( & permissions .. see ipc.h , sem_rcu_free) |
| 1436 | 返回:负ENOMEM |
| 1440 | sem_lock_and_putref(sma) |
| 1443 | 转到:out_unlock |
| 1446 | 以i小于. of semaphores in array 循环sem_io[i]等于current value |
| 1448 | sem_unlock(sma, - 1) |
| 1450 | err等于0 |
| 1453 | 转到:out_free |
| 1455 | 当:cmd恒等于set all semval's |
| 1460 | 如果非ipc_rcu_getref( & permissions .. see ipc.h )则 |
| 1462 | 转到:out_rcu_wakeup |
| 1466 | 如果nsems大于512 bytes on stack 则 |
| 1467 | sem_io等于kvmalloc_array(nsems, sizeof(ushort), GFP_KERNEL) |
| 1469 | 如果(sem_io == NULL)则 |
| 1470 | ipc_rcu_putref( & permissions .. see ipc.h , sem_rcu_free) |
| 1471 | 返回:负ENOMEM |
| 1482 | 如果sem_io[i]大于<= 32767 semaphore maximum value 则 |
| 1489 | sem_lock_and_putref(sma) |
| 1492 | 转到:out_unlock |
| 1496 | current value 等于sem_io[i] |
| 1502 | 以i小于nsems循环array of adjustments [i]等于0 |
| 1508 | err等于0 |
| 1509 | 转到:out_unlock |
| 1514 | 如果semnum小于0或semnum大于等于nsems则转到:out_rcu_wakeup |
| 1520 | 转到:out_unlock |
| 1527 | 当:cmd恒等于get semval |
| 1528 | err等于current value |
| 1529 | 转到:out_unlock |
| 1530 | 当:cmd恒等于get sempid |
| 1532 | 转到:out_unlock |
| 1533 | 当:cmd恒等于get semncnt |
| 1535 | 转到:out_unlock |
| 1536 | 当:cmd恒等于get semzcnt |
| 1538 | 转到:out_unlock |
| 1541 | out_unlock : |
| 1542 | sem_unlock(sma, - 1) |
| 1543 | out_rcu_wakeup : |
| 1546 | out_free : |
| 1549 | 返回:err |
| 名称 | 描述 |
|---|---|
| ksys_semctl | |
| compat_ksys_semctl |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |