All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Vincent Guittot" <vincent.guittot@linaro.org>,
	sched-ext@lists.linux.dev
Subject: Re: [PATCH 14/20 v3] sched/eevdf: Push short slice task that are not picked
Date: Fri, 06 Nov 2026 16:14:23 +0000	[thread overview]
Message-ID: <sashiko-outbox-201780@kernel.org> (raw)
In-Reply-To: <20261106151947.3991524-15-vincent.guittot@linaro.org>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [High] sched/fair: fair_add_pushable_short() pushes running or blocked
  proxy tasks
- [Medium] sched/fair: set_next_task_fair() skips
  fair_queue_push_tasks() on SNT_REPICK
--

commit eb5888f994bf688f13c4e3add47c483f0c23831f
Author: Vincent Guittot <vincent.guittot@linaro.org>

sched/eevdf: Push short slice task that are not picked

This commit adds waking short-slice tasks to the cfs_rq pushable list in
wakeup_preempt_fair() so that they can be pushed to another CPU if they are
not picked to run next.

> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 3923587b66e0e..894bee51b99ad 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -10273,6 +10273,12 @@ static void fair_add_pushable_prev(struct rq *rq, struct task_struct *prev,
>  		__fair_add_pushable_task(rq, prev);
>  }
>  
> +static void fair_add_pushable_short(struct rq *rq, struct task_struct *p)
> +{
> +	if (sched_push_task_enabled() && __check_pushable_fair_task(rq, p))
> +		__fair_add_pushable_task(rq, p);
> +}

[Severity: High]
With CONFIG_SCHED_PROXY_EXEC enabled, can fair_add_pushable_short() leave
an actively running proxy task or a mutex-blocked donor on
rq->cfs.pushable_tasks?

__check_pushable_fair_task() does not check !task_current(rq, p) or
!task_is_blocked(p).  If a short-slice mutex owner p wakes up and is added
to rq->cfs.pushable_tasks, and __schedule() picks a blocked donor D while
find_proxy_task() selects p as the execution context (rq->curr = p),
set_next_task_fair() only calls fair_remove_pushable_task(rq, D).  Likewise,
prio_changed_fair() and switched_to_fair() call wakeup_preempt_fair() when
p == rq->curr != rq->donor, adding rq->curr directly.

When fair_push_task() then calls pick_next_pushable_fair_task(), it hits
WARN_ON_ONCE(task_current(rq, p)) and still returns p, deactivating and
migrating rq->curr to another CPU while it is actively executing on
rq->cpu.  Similarly, when proxy_migrate_task() attaches a blocked donor via
wakeup_preempt(), fair_add_pushable_short() queues it to be pushed away
from its mutex owner's CPU and overwrites p->wake_cpu via set_task_cpu().

>  static int active_load_balance_cpu_stop(void *data);
>  
>  /*
> @@ -10723,8 +10729,10 @@ static void wakeup_preempt_fair(struct rq *rq, struct task_struct *p, int wake_f
>  preempt:
>  	cancel_protect_slice(se);
>  
> -	if (preempt_action == PREEMPT_WAKEUP_SHORT)
> +	if (preempt_action == PREEMPT_WAKEUP_SHORT) {
>  		set_short_buddy(cfs_rq, pse);
> +		fair_add_pushable_short(rq, p);
> +	}
>  
>  	resched_curr_lazy(rq);
>  }

[Severity: Medium]
Does set_next_task_fair() skip queuing the push callback when __schedule()
repicks the current donor (next == prev)?

Before this change, tasks were only added to rq->cfs.pushable_tasks in
put_prev_task_fair(), which only runs when switching to a different task
(SNT_PICK).  When fair_add_pushable_short() adds p at wakeup and the
subsequent __schedule() repicks the current task (for example, if lazy
preemption delays __schedule() until pse is no longer eligible, or an
existing shorter-slice buddy in cfs_rq->next blocks before __schedule() and
curr has an earlier deadline), put_prev_set_next_task() calls
set_next_task_fair() with SNT_REPICK:

kernel/sched/fair.c:set_next_task_fair() {
	...
	if (type == SNT_REPICK)
		goto repick;
	...
	fair_queue_push_tasks(rq);
repick:
	if (hrtick_enabled_fair(rq))
		hrtick_start_fair(rq, p);
}

Because SNT_REPICK jumps past fair_queue_push_tasks(rq), the unpicked
short-slice task remains on rq->cfs.pushable_tasks without queuing
fair_push_tasks().

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261106151947.3991524-2-vincent.guittot@linaro.org?part=14

  reply	other threads:[~2026-11-06 16:14 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-06 15:19 [PATCH 00/18 v3] Improving latency of short slice tasks Vincent Guittot
2026-11-06 15:19 ` [PATCH 01/20 v3] sched/eevdf: Decay positive lag of sleeping entities Vincent Guittot
2026-11-06 15:43   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 02/20 v3] sched/eevdf: Reset lag at wakeup when prev CPU has been idle Vincent Guittot
2026-11-06 16:22   ` Kayra Cizmeci
2026-11-09 15:27     ` Vincent Guittot
2026-11-09 15:45       ` Peter Zijlstra
2026-11-09 16:27         ` Vincent Guittot
2026-11-11  9:03           ` Peter Zijlstra
2026-11-12  7:02             ` Vincent Guittot
2026-11-11 10:04   ` K Prateek Nayak
2026-11-12  7:33     ` Vincent Guittot
2026-11-06 15:19 ` [PATCH 03/20 v3] sched/eevdf: Reset lag at wakeup when migrating and prev " Vincent Guittot
2026-11-06 18:05   ` Kayra Cizmeci
2026-11-06 15:19 ` [PATCH 04/20 v3] sched/eevdf: Reset lag when waking up on idle cpu Vincent Guittot
2026-11-06 18:39   ` Kayra Cizmeci
2026-11-06 15:19 ` [PATCH 05/20 v3] sched/eevdf: Add per cpu cached min_slice Vincent Guittot
2026-11-07  6:53   ` Kayra Cizmeci
2026-11-09 15:27     ` Vincent Guittot
2026-11-06 15:19 ` [PATCH 06/20 v3] sched/eevdf: Add min slice check when selecting CPU Vincent Guittot
2026-11-06 15:40   ` sashiko-bot
2026-11-07  8:57   ` Kayra Cizmeci
2026-11-09 13:55     ` Peter Zijlstra
2026-11-09 14:15       ` Kayra Cizmeci
2026-11-09 15:37         ` Vincent Guittot
2026-11-09 15:34     ` Vincent Guittot
2026-11-09 15:55     ` Vincent Guittot
2026-11-09 19:56       ` Kayra Cizmeci
2026-11-10 13:32         ` Vincent Guittot
2026-11-06 15:19 ` [PATCH 07/20 v3] sched/fair: Prepare select_task_rq_fair() to be called for new cases Vincent Guittot
2026-11-06 15:39   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 08/20 v3] sched/fair: Add push task mechanism for fair Vincent Guittot
2026-11-06 16:15   ` sashiko-bot
2026-11-09 14:43   ` Peter Zijlstra
2026-11-09 16:07     ` Vincent Guittot
2026-11-11  8:59       ` Peter Zijlstra
2026-11-12  7:01         ` Vincent Guittot
2026-11-09 15:54   ` Peter Zijlstra
2026-11-09 16:14     ` Vincent Guittot
2026-11-11  9:01       ` Peter Zijlstra
2026-11-12  7:01         ` Vincent Guittot
2026-11-12  7:36           ` Vincent Guittot
2026-11-12  9:49           ` Peter Zijlstra
2026-11-12 11:29             ` Vincent Guittot
2026-11-12 12:19               ` Peter Zijlstra
2026-11-06 15:19 ` [PATCH 09/20 v3] sched/fair: Optimize " Vincent Guittot
2026-11-06 16:00   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 10/20 v3] sched/core: Add rq flag to tick parameters Vincent Guittot
2026-11-06 15:19 ` [PATCH 11/20 v3] sched/fair: Add force push task mechanism for fair Vincent Guittot
2026-11-06 16:16   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 12/20 v3] sched/fair: Support not wakeup case in select_idle_sibling Vincent Guittot
2026-11-06 15:51   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 13/20] sched/eevdf: Try to push short slice task on a better CPU Vincent Guittot
2026-11-06 16:12   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 14/20 v3] sched/eevdf: Push short slice task that are not picked Vincent Guittot
2026-11-06 16:14   ` sashiko-bot [this message]
2026-11-06 15:19 ` [PATCH 15/20 v3] sched/fair: Enable push task for preempt short Vincent Guittot
2026-11-06 16:27   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 16/20 v3] energy model: Add a get previous state function Vincent Guittot
2026-11-10 19:55   ` Rafael J. Wysocki (Intel)
2026-11-06 15:19 ` [PATCH 17/20 v3] sched/fair: Rework feec() to use cost instead of spare capacity Vincent Guittot
2026-11-06 16:30   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 18/20 v3] energy model: Remove unused em_cpu_energy() Vincent Guittot
2026-11-06 15:19 ` [PATCH 19/20 v3] sched/fair: Take into account slice in EAS Vincent Guittot
2026-11-06 16:26   ` sashiko-bot
2026-11-06 15:19 ` [PATCH 20/20 v3] sched/fair: Fix tasks stacking on same idle CPU Vincent Guittot
2026-11-06 16:53   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-201780@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=sched-ext@lists.linux.dev \
    --cc=vincent.guittot@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.