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