函数逻辑报告 |
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 插件可实现:逻辑报告 代码生成和批量转换代码 |