From: sashiko-bot@kernel.org
To: "Wanpeng Li" <kernellwp@gmail.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v3 04/10] sched/fair: Credit nominated next-buddy in yield_to_task_fair()
Date: Fri, 12 Jun 2026 01:54:19 +0000 [thread overview]
Message-ID: <20260612015419.967501F00A3E@smtp.kernel.org> (raw)
In-Reply-To: <20260612013355.59231-5-kernellwp@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Skipping `update_rq_clock()` for the same-runqueue case in `yield_to_task_fair()` unconditionally triggers a `WARN_ON_ONCE` in `assert_clock_updated()` via `update_curr()`.
--
commit 18fe3f24f01f55a4b16680e6b460846c6d5e6260
Author: Wanpeng Li <wanpengli@tencent.com>
sched/fair: Credit nominated next-buddy in yield_to_task_fair()
This patch credits bounded EEVDF lag to nominated targets during
yield_to(). It walks the sched_entity hierarchy to provide the credit,
avoiding forfeiture of the yield hint when a group entity isn't yet
eligible.
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index c28682fedb362..48f65a4f19230 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
[ ... ]
> @@ -9496,6 +9497,43 @@ static bool yield_to_task_fair(struct rq *rq, struct task_struct *p)
> /* Tell the scheduler that we'd really like se to run next. */
> set_next_buddy(se);
>
> + /* Without lag credit, keep the existing forfeit-based yield. */
> + if (!sched_feat(YIELD_TO_LAG_CREDIT)) {
> + yield_task_fair(rq);
> + return true;
> + }
> +
> + /*
> + * Walk the ancestor chain set_next_buddy() just nominated and credit
> + * bounded lag to each not-yet-eligible level so pick_eevdf() returns
> + * it. yield_to() holds both rq locks via double_rq_lock(), so touching
> + * p's cfs_rqs (possibly on another CPU) is safe; the primitive is
> + * idempotent, so no rate limiting is needed.
> + *
> + * Only refresh p_rq's clock when it differs from the local rq. A
> + * remote p_rq must be refreshed so the per-level update_curr() is
> + * accurate. In the same-rq case we skip it: the credit is a
> + * best-effort hint and the rq clock is recent enough, while the
> + * trailing yield_task_fair() would otherwise make this a second
> + * update_rq_clock() on the same rq and trip
> + * SCHED_WARN_ON(WARN_DOUBLE_CLOCK).
> + */
> + if (rq != p_rq)
> + update_rq_clock(p_rq);
> +
> + for_each_sched_entity(se) {
> + struct cfs_rq *cfs_rq = cfs_rq_of(se);
> +
> + if (cfs_rq->next != se)
> + break;
> + if (se->sched_delayed)
> + break;
> + if (throttled_hierarchy(cfs_rq))
> + break;
> +
> + eevdf_credit_entity_vlag(cfs_rq, se);
[Severity: High]
Does skipping update_rq_clock() here trigger a WARN_ON_ONCE() when the target
task is on the same runqueue?
Since yield_to() acquires locks via double_rq_lock(), the clock update flag
is cleared. By skipping update_rq_clock(p_rq) for local tasks, the call to
eevdf_credit_entity_vlag() will invoke update_curr() with an un-updated clock:
eevdf_credit_entity_vlag()
update_curr()
update_se()
rq_clock_task()
assert_clock_updated() -> WARN_ON_ONCE(rq->clock_update_flags < RQCF_ACT_SKIP)
Can this reliably trigger a warning when yield_to() targets a task on the
same CPU (for instance, via KVM vCPU yielding)?
> + }
>
> yield_task_fair(rq);
>
> return true;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260612013355.59231-1-kernellwp@gmail.com?part=4
next prev parent reply other threads:[~2026-06-12 1:54 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-12 1:33 [PATCH v3 00/10] sched/fair, KVM: Semantics-aware directed yield for oversubscribed KVM Wanpeng Li
2026-06-12 1:33 ` [PATCH v3 01/10] sched/fair: Add EEVDF lag credit primitive for nominated next-buddy Wanpeng Li
2026-06-12 1:49 ` sashiko-bot
2026-06-12 5:34 ` K Prateek Nayak
2026-06-12 1:33 ` [PATCH v3 02/10] sched/fair: Credit a persistent, queue-depth-scaled vlag margin Wanpeng Li
2026-06-12 1:53 ` sashiko-bot
2026-06-12 6:07 ` K Prateek Nayak
2026-06-12 1:33 ` [PATCH v3 03/10] sched/fair: Credit queued next-buddy via canonical requeue Wanpeng Li
2026-06-12 1:55 ` sashiko-bot
2026-06-12 1:33 ` [PATCH v3 04/10] sched/fair: Credit nominated next-buddy in yield_to_task_fair() Wanpeng Li
2026-06-12 1:54 ` sashiko-bot [this message]
2026-06-12 1:33 ` [PATCH v3 05/10] sched/fair: Force a local resched on yield_to() so the buddy is picked Wanpeng Li
2026-06-12 1:50 ` sashiko-bot
2026-06-12 1:33 ` [PATCH v3 06/10] KVM: x86: Add IPI tracking infrastructure for directed yield Wanpeng Li
2026-06-12 1:33 ` [PATCH v3 07/10] KVM: x86/lapic: Track unicast fixed IPI delivery Wanpeng Li
2026-06-12 1:33 ` [PATCH v3 08/10] KVM: x86/lapic: Clear IPI tracking on matching-vector EOI Wanpeng Li
2026-06-12 3:46 ` sashiko-bot
2026-06-12 1:33 ` [PATCH v3 09/10] KVM: Add IPI-aware directed-yield candidate selection Wanpeng Li
2026-06-12 1:48 ` sashiko-bot
2026-06-12 1:33 ` [PATCH v3 10/10] KVM: Add relaxed preempted-only fallback for directed yield Wanpeng Li
2026-06-12 5:17 ` [PATCH v3 00/10] sched/fair, KVM: Semantics-aware directed yield for oversubscribed KVM K Prateek Nayak
2026-06-12 9:43 ` Shrikanth Hegde
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=20260612015419.967501F00A3E@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=kernellwp@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.