Kernel-doc requires that a kernel-doc markup to be immediately below the function prototype, as otherwise it will rename it. So, move sys_sched_yield() markup to the right place. Also fix the cpu_util() markup: Kernel-doc markups should use this format: identifier - description Reviewed-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> --- kernel/sched/core.c | 16 ++++++++-------- kernel/sched/fair.c | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index d7f5277adbee..3545359072a8 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6606,89 +6606,89 @@ long sched_getaffinity(pid_t pid, struct cpumask *mask) * * Return: size of CPU mask copied to user_mask_ptr on success. An * error code otherwise. */ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len, unsigned long __user *, user_mask_ptr) { int ret; cpumask_var_t mask; if ((len * BITS_PER_BYTE) < nr_cpu_ids) return -EINVAL; if (len & (sizeof(unsigned long)-1)) return -EINVAL; if (!alloc_cpumask_var(&mask, GFP_KERNEL)) return -ENOMEM; ret = sched_getaffinity(pid, mask); if (ret == 0) { unsigned int retlen = min(len, cpumask_size()); if (copy_to_user(user_mask_ptr, mask, retlen)) ret = -EFAULT; else ret = retlen; } free_cpumask_var(mask); return ret; } -/** - * sys_sched_yield - yield the current processor to other threads. - * - * This function yields the current CPU to other tasks. If there are no - * other threads running on this CPU then this function will return. - * - * Return: 0. - */ static void do_sched_yield(void) { struct rq_flags rf; struct rq *rq; rq = this_rq_lock_irq(&rf); schedstat_inc(rq->yld_count); current->sched_class->yield_task(rq); preempt_disable(); rq_unlock_irq(rq, &rf); sched_preempt_enable_no_resched(); schedule(); } +/** + * sys_sched_yield - yield the current processor to other threads. + * + * This function yields the current CPU to other tasks. If there are no + * other threads running on this CPU then this function will return. + * + * Return: 0. + */ SYSCALL_DEFINE0(sched_yield) { do_sched_yield(); return 0; } #ifndef CONFIG_PREEMPTION int __sched _cond_resched(void) { if (should_resched(0)) { preempt_schedule_common(); return 1; } rcu_all_qs(); return 0; } EXPORT_SYMBOL(_cond_resched); #endif /* * __cond_resched_lock() - if a reschedule is pending, drop the given lock, * call schedule, and on return reacquire the lock. * * This works OK both with and without CONFIG_PREEMPTION. We do strange low-level * operations here to prevent schedule() from being called twice (once via * spin_unlock(), once by hand). */ int __cond_resched_lock(spinlock_t *lock) { int resched = should_resched(PREEMPT_LOCK_OFFSET); int ret = 0; diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index e7e21ac479a2..f5dcedacc104 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6301,65 +6301,65 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target) * cpuset defines a symmetric island (i.e. one unique * capacity_orig value through the cpuset), the key will be set * but the CPUs within that cpuset will not have a domain with * SD_ASYM_CPUCAPACITY. These should follow the usual symmetric * capacity path. */ if (sd) { i = select_idle_capacity(p, sd, target); return ((unsigned)i < nr_cpumask_bits) ? i : target; } } sd = rcu_dereference(per_cpu(sd_llc, target)); if (!sd) return target; i = select_idle_core(p, sd, target); if ((unsigned)i < nr_cpumask_bits) return i; i = select_idle_cpu(p, sd, target); if ((unsigned)i < nr_cpumask_bits) return i; i = select_idle_smt(p, sd, target); if ((unsigned)i < nr_cpumask_bits) return i; return target; } /** - * Amount of capacity of a CPU that is (estimated to be) used by CFS tasks + * cpu_util - Estimates the amount of capacity of a CPU used by CFS tasks. * @cpu: the CPU to get the utilization of * * The unit of the return value must be the one of capacity so we can compare * the utilization with the capacity of the CPU that is available for CFS task * (ie cpu_capacity). * * cfs_rq.avg.util_avg is the sum of running time of runnable tasks plus the * recent utilization of currently non-runnable tasks on a CPU. It represents * the amount of utilization of a CPU in the range [0..capacity_orig] where * capacity_orig is the cpu_capacity available at the highest frequency * (arch_scale_freq_capacity()). * The utilization of a CPU converges towards a sum equal to or less than the * current capacity (capacity_curr <= capacity_orig) of the CPU because it is * the running time on this CPU scaled by capacity_curr. * * The estimated utilization of a CPU is defined to be the maximum between its * cfs_rq.avg.util_avg and the sum of the estimated utilization of the tasks * currently RUNNABLE on that CPU. * This allows to properly represent the expected utilization of a CPU which * has just got a big task running since a long sleep period. At the same time * however it preserves the benefits of the "blocked utilization" in * describing the potential for other tasks waking up on the same CPU. * * Nevertheless, cfs_rq.avg.util_avg can be higher than capacity_curr or even * higher than capacity_orig because of unfortunate rounding in * cfs.avg.util_avg or just after migrating tasks and new task wakeups until * the average stabilizes with the new running time. We need to check that the * utilization stays within the range of [0..capacity_orig] and cap it if * necessary. Without utilization capping, a group could be seen as overloaded * (CPU0 utilization at 121% + CPU1 utilization at 80%) whereas CPU1 has 20% of * available capacity. We allow utilization to overshoot capacity_curr (but not * capacity_orig) as it useful for predicting the capacity required after task -- 2.28.0