Re: [PATCH] percpu: Fix hint invariant breakage

Andrew Morton
2026-03-20T19:08:49Z

On Fri, 20 Mar 2026 11:52:14 +0000 Joonwon Kang <joonwonkang@google.com> wrote:

> The invariant "scan_hint_start > contig_hint_start if and only if
> scan_hint == contig_hint" should be kept for hint management. However,
> it could be broken in some cases:
>
> - if (new contig == contig_hint == scan_hint) && (contig_hint_start <
> scan_hint_start < new contig start) && the new contig is to become a
> new contig_hint due to its better alignment, then scan_hint should
> be invalidated instead of keeping it.
>
> - if (new contig == contig_hint > scan_hint) && (start <
> contig_hint_start) && the new contig is not to become a new
> contig_hint, then scan_hint should be invalidated instead of being
> updated to the new contig.
>
> This commit fixes this invariant breakage and also optimizes scan_hint
> by keeping it or updating it when acceptable:
>
> - if (new contig > contig_hint > scan_hint) && (scan_hint_start < new
> contig start < contig_hint_start), then keep scan_hint instead of
> invalidating it.
>
> - if (new contig > contig_hint == scan_hint) && (contig_hint_start <
> new contig start < scan_hint_start), then update scan_hint to the
> old contig_hint instead of invalidating it.
>
> - if (new contig == contig_hint > scan_hint) && (new contig start <
> contig_hint_start) && the new contig is to become a new contig_hint
> due to its better alignment, then update scan_hint to the old
> contig_hint instead of invalidating or keeping it.
>

Thanks. Does the change have any observable runtime effects?

Was this patch inspired by code inspection?