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