From: Peter Zijlstra <peterz@infradead.org>
To: Yiwei Lin <s921975628@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@redhat.com>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Davidlohr Bueso <dave@stgolabs.net>,
Jonathan Corbet <corbet@lwn.net>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/3] rbtree: update augmented data on the way down in rb_add_augmented_cached()
Date: Mon, 28 Sep 2026 15:37:33 +0200 [thread overview]
Message-ID: <20260928133733.GP2009045@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20260928122611.336351-3-s921975628@gmail.com>
On Mon, Sep 28, 2026 at 08:26:10PM +0800, Yiwei Lin wrote:
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 7455a83a6a990..60db4624b9897 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -1066,9 +1066,20 @@ static inline bool min_vruntime_update(struct sched_entity *se, bool exit)
> se->max_slice == old_max_slice;
> }
>
> +/*
> + * Fold @new's subtree data into @se, for each @se on @new's insertion path.
> + */
> +static inline void
> +min_vruntime_merge(struct sched_entity *se, struct sched_entity *new)
> +{
> + __min_vruntime_update(se, &new->run_node);
> + __min_slice_update(se, &new->run_node);
> + __max_slice_update(se, &new->run_node);
> +}
>
So min_vruntime_update() can be written in terms of this helper like:
static inline bool min_vruntime_update(struct sched_entity *se, bool exit)
{
u64 old_min_vruntime = se->min_vruntime;
u64 old_min_slice = se->min_slice;
u64 old_max_slice = se->max_slice;
struct rb_node *node = &se->run_node;
se->min_vruntime = se->vruntime;
se->min_slice = se->slice;
se->max_slice = se->slice;
min_vruntime_merge(se, node->rb_right);
min_vruntime_merge(se, node->rb_left);
return se->min_vruntime == old_min_vruntime &&
se->min_slice == old_min_slice &&
se->max_slice == old_max_slice;
}
And that is *very* close to being generalizable, obviating the need for
RBCOMPUTE. Does your LLM see a way to make that happen?
That is, for RB_DECLARE_CALLBACKS() and RD_DECLARE_CALLBACKS_MAX() this
is trivially doable, but I'm not sure I see a clean way to make this
happen for RB_DECLARE_CALLBACKS_MULTI().
next prev parent reply other threads:[~2026-09-28 13:37 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-28 12:26 [PATCH 0/3] rbtree: fix rb_add_augmented_cached() descent and exercise rb_add*() helpers in rbtree_test Yiwei Lin
2026-09-28 12:26 ` [PATCH 1/3] rbtree_test: use rb_add() and rb_add_cached() for the basic tests Yiwei Lin
2026-09-28 12:26 ` [PATCH 2/3] rbtree: update augmented data on the way down in rb_add_augmented_cached() Yiwei Lin
2026-09-28 13:37 ` Peter Zijlstra [this message]
2026-09-28 14:05 ` Peter Zijlstra
2026-09-28 15:00 ` Peter Zijlstra
2026-09-28 19:15 ` Yiwei Lin
2026-09-28 21:37 ` Peter Zijlstra
2026-09-29 5:24 ` Yiwei Lin
2026-09-29 7:40 ` Peter Zijlstra
2026-09-28 12:26 ` [PATCH 3/3] rbtree_test: use rb_add_augmented_cached() for the cached augmented test Yiwei Lin
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=20260928133733.GP2009045@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=dave@stgolabs.net \
--cc=juri.lelli@redhat.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=s921975628@gmail.com \
--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.