函数逻辑报告 |
Source Code:kernel\sched\core.c |
Create Date:2022-07-27 10:37:04 |
| Last Modify:2022-05-22 13:40:38 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:__sched_setscheduler
函数原型:static int __sched_setscheduler(struct task_struct *p, const struct sched_attr *attr, bool user, bool pi)
返回类型:int
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| struct task_struct * | p | |
| const struct sched_attr * | attr | |
| bool | user | |
| bool | pi |
| 4771 | oldpolicy等于负1 |
| 4772 | policy等于sched_policy |
| 4780 | BUG_ON(pi && in_interrupt()) |
| 4781 | recheck : |
| 4783 | 如果policy小于0则 |
| 4786 | 否则 |
| 4789 | 如果非valid_policy(policy)则返回:负EINVAL |
| 4801 | 如果内存信息且SCHED_FIFO, SCHED_RR 大于Priority of a process goes from 0减1或非内存信息且SCHED_FIFO, SCHED_RR 大于MAX_RT_PRIO减1则返回:负EINVAL |
| 4804 | 如果dl_policy(policy)且非__checkparam_dl(attr)或rt_policy(policy)不等于SCHED_FIFO, SCHED_RR 不等于0则返回:负EINVAL |
| 4812 | 如果fair_policy(policy)则 |
| 4819 | rlim_rtprio等于task_rlimit(p, RLIMIT_RTPRIO) |
| 4823 | 如果policy不等于任务调度策略且非rlim_rtprio则返回:负EPERM |
| 4827 | 如果SCHED_FIFO, SCHED_RR 大于实时任务优先级且SCHED_FIFO, SCHED_RR 大于rlim_rtprio则返回:负EPERM |
| 4845 | 如果task_has_idle_policy(p)且非idle_policy(policy)则 |
| 4855 | 如果 Scheduler bits, serialized by scheduler locks: 且非reset_on_fork则返回:负EPERM |
| 4859 | 如果user则 |
| 4863 | retval等于security_task_setscheduler(p) |
| 4869 | 如果sched_flags按位与SCHED_FLAG_UTIL_CLAMP则 |
| 4875 | 如果pi则cpuset_read_lock() |
| 4886 | 更新rq运行时间 |
| 4900 | 如果此条件成立可能性小(为编译器优化)(policy == 任务调度策略)则 |
| 4901 | 如果fair_policy(policy)且SCHED_NORMAL, SCHED_BATCH 不等于返回给定任务的值则转到:change |
| 4903 | 如果rt_policy(policy)且SCHED_FIFO, SCHED_RR 不等于实时任务优先级则转到:change |
| 4907 | 如果sched_flags按位与SCHED_FLAG_UTIL_CLAMP则转到:change |
| 4911 | retval等于0 |
| 4912 | 转到:unlock |
| 4914 | change : |
| 4916 | 如果user则如果此条件成立可能性小(为编译器优化)(oldpolicy != - 1 && oldpolicy != 任务调度策略)则 |
| 4970 | 如果pi则 |
| 4978 | new_effective_prio等于rt_effective_prio(p, newprio) |
| 4979 | 如果new_effective_prio恒等于oldprio则queue_flags与等于Matches ENQUEUE_MOVE 的反 |
| 4984 | running等于task_current(rq, p) |
| 4985 | 如果queued则dequeue_task(rq, p, queue_flags) |
| 4987 | 如果running则put_prev_task(rq, p) |
| 4990 | prev_class等于调度函数 |
| 4993 | __setscheduler_uclamp(p, attr) |
| 4995 | 如果queued则 |
| 5000 | 如果oldprio小于prio则queue_flags或等于ENQUEUE_HEAD |
| 5003 | enqueue_task(rq, p, queue_flags) |
| 5005 | 如果running则set_next_task(rq, p) |
| 5011 | 禁止抢占() |
| 5012 | task_rq_unlock(rq, p, & rf) |
| 5014 | 如果pi则 |
| 5015 | cpuset_read_unlock() |
| 5016 | rt_mutex_adjust_pi(p) |
| 5020 | 负载均衡配置 |
| 5021 | 禁用抢占和中断() |
| 5023 | 返回:0 |
| 5025 | unlock : |
| 5026 | task_rq_unlock(rq, p, & rf) |
| 5027 | 如果pi则cpuset_read_unlock() |
| 5029 | 返回:retval |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |