Re: [PATCH 1/3] sched/fair: Use guard in sched_group_set_idle()
From: Vincent Guittot
Date: Fri Nov 06 2026 - 11:09:45 EST
On Thu, 5 Nov 2026 at 18:12, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> Cleanup the code by using guards; prepares for further changes in this function.
>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
Reviewed-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
> ---
> kernel/sched/fair.c | 16 ++++------------
> 1 file changed, 4 insertions(+), 12 deletions(-)
>
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -15790,12 +15790,9 @@ int sched_group_set_idle(struct task_gro
> if (idle < 0 || idle > 1)
> return -EINVAL;
>
> - mutex_lock(&shares_mutex);
> -
> - if (tg->idle == idle) {
> - mutex_unlock(&shares_mutex);
> + guard(mutex)(&shares_mutex);
> + if (tg->idle == idle)
> return 0;
> - }
>
> tg->idle = idle;
>
> @@ -15805,13 +15802,12 @@ int sched_group_set_idle(struct task_gro
> struct cfs_rq *grp_cfs_rq = tg_cfs_rq(tg, i);
> bool was_idle = cfs_rq_is_idle(grp_cfs_rq);
> long idle_task_delta;
> - struct rq_flags rf;
>
> - rq_lock_irqsave(rq, &rf);
> + guard(rq_lock_irqsave)(rq);
>
> grp_cfs_rq->idle = idle;
> if (WARN_ON_ONCE(was_idle == cfs_rq_is_idle(grp_cfs_rq)))
> - goto next_cpu;
> + continue;
>
> idle_task_delta = grp_cfs_rq->h_nr_queued -
> grp_cfs_rq->h_nr_idle;
> @@ -15830,9 +15826,6 @@ int sched_group_set_idle(struct task_gro
> if (cfs_rq_is_idle(cfs_rq))
> break;
> }
> -
> -next_cpu:
> - rq_unlock_irqrestore(rq, &rf);
> }
>
> /* Idle groups have minimum weight. */
> @@ -15841,7 +15834,6 @@ int sched_group_set_idle(struct task_gro
> else
> __sched_group_set_shares(tg, NICE_0_LOAD);
>
> - mutex_unlock(&shares_mutex);
> return 0;
> }
>
>
>