From: Ridong Chen <ridong.chen@linux.dev>
To: kasong@tencent.com, linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
Barry Song <baohua@kernel.org>,
Axel Rasmussen <axelrasmussen@google.com>,
Yuanchu Xie <yuanchu@google.com>, Wei Xu <weixugc@google.com>,
Baoquan He <baoquan.he@linux.dev>,
Shakeel Butt <shakeel.butt@linux.dev>,
Johannes Weiner <hannes@cmpxchg.org>,
Michal Hocko <mhocko@kernel.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
Muchun Song <muchun.song@linux.dev>, Chris Li <chrisl@kernel.org>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
David Hildenbrand <david@kernel.org>,
Lorenzo Stoakes <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
Vlastimil Babka <vbabka@kernel.org>, Yu Zhao <yuzhao@google.com>,
Zi Yan <ziy@nvidia.com>, Qi Zheng <qi.zheng@linux.dev>,
cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
Kairui Song <ryncsn@gmail.com>
Subject: Re: [PATCH v3 5/6] mm/mglru: use explicit tier range in read_ctrl_pos()
Date: Sun, 30 Aug 2026 17:43:06 +0800 [thread overview]
Message-ID: <d469a60a-3aaf-43d3-955a-238042115a3e@linux.dev> (raw)
In-Reply-To: <20260826-mglru-flags-cleanup-v3-5-d9f1c75549c8@tencent.com>
On 8/26/2026 1:53 AM, Kairui Song via B4 Relay wrote:
> From: Kairui Song <kasong@tencent.com>
>
> read_ctrl_pos() encodes the tier range in a single "tier" parameter
> via "tier % MAX_NR_TIERS" as the start and "min(tier, MAX_NR_TIERS-1)"
> as the end. This is hard to follow, maintain, or extend. Tier values
> 0..3 select a single tier, while tier == MAX_NR_TIERS selects the
> full range.
>
> Replace it with explicit (tier_min, tier_max) parameters using a
> closed [tier_min, tier_max] interval, and add LRU_TIER_MIN and
> LRU_TIER_MAX for the tier bounds. The call sites now become
> self-documenting:
>
> - get_tier_idx: (LRU_TIER_MIN, LRU_TIER_MIN) for the first tier,
> (tier, tier) for each subsequent tier
> - get_type_to_scan: (LRU_TIER_MIN, LRU_TIER_MAX) for the full range
>
> No functional change.
>
> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
> Reviewed-by: Baoquan He <baoquan.he@linux.dev>
> Reviewed-by: Barry Song <baohua@kernel.org>
> Signed-off-by: Kairui Song <kasong@tencent.com>
> ---
> include/linux/mmzone.h | 2 ++
> mm/vmscan.c | 18 ++++++++++--------
> 2 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index c9ecf370cd9f..9b27cf53bdbc 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -492,6 +492,8 @@ enum lruvec_flags {
> * folio->flags, masked by LRU_REFS_MASK.
> */
> #define MAX_NR_TIERS 4U
> +#define LRU_TIER_MIN 0U
> +#define LRU_TIER_MAX (MAX_NR_TIERS - 1)
>
> #ifndef __GENERATING_BOUNDS_H
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 52ef4c3705bd..cdc2e44875da 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -3198,8 +3198,8 @@ struct ctrl_pos {
> int gain;
> };
>
> -static void read_ctrl_pos(struct lruvec *lruvec, int type, int tier, int gain,
> - struct ctrl_pos *pos)
> +static void read_ctrl_pos(struct lruvec *lruvec, int type, int tier_min,
> + int tier_max, int gain, struct ctrl_pos *pos)
> {
> int i;
> struct lru_gen_folio *lrugen = &lruvec->lrugen;
> @@ -3208,7 +3208,7 @@ static void read_ctrl_pos(struct lruvec *lruvec, int type, int tier, int gain,
> pos->gain = gain;
> pos->refaulted = pos->total = 0;
>
> - for (i = tier % MAX_NR_TIERS; i <= min(tier, MAX_NR_TIERS - 1); i++) {
> + for (i = tier_min; i <= tier_max; i++) {
> pos->refaulted += lrugen->avg_refaulted[type][i] +
> atomic_long_read(&lrugen->refaulted[hist][type][i]);
> pos->total += lrugen->avg_total[type][i] +
> @@ -4809,9 +4809,9 @@ static int get_tier_idx(struct lruvec *lruvec, int type)
> * This value is chosen because any other tier would have at least twice
> * as many refaults as the first tier.
> */
> - read_ctrl_pos(lruvec, type, 0, 2, &sp);
> - for (tier = 1; tier < MAX_NR_TIERS; tier++) {
> - read_ctrl_pos(lruvec, type, tier, 3, &pv);
> + read_ctrl_pos(lruvec, type, LRU_TIER_MIN, LRU_TIER_MIN, 2, &sp);
> + for (tier = LRU_TIER_MIN + 1; tier <= LRU_TIER_MAX; tier++) {
> + read_ctrl_pos(lruvec, type, tier, tier, 3, &pv);
> if (!positive_ctrl_err(&sp, &pv))
> break;
> }
> @@ -4832,8 +4832,10 @@ static int get_type_to_scan(struct lruvec *lruvec, int swappiness)
> * Compare the sum of all tiers of anon with that of file to determine
> * which type to scan.
> */
> - read_ctrl_pos(lruvec, LRU_GEN_ANON, MAX_NR_TIERS, swappiness, &sp);
> - read_ctrl_pos(lruvec, LRU_GEN_FILE, MAX_NR_TIERS, MAX_SWAPPINESS - swappiness, &pv);
> + read_ctrl_pos(lruvec, LRU_GEN_ANON, LRU_TIER_MIN, LRU_TIER_MAX,
> + swappiness, &sp);
> + read_ctrl_pos(lruvec, LRU_GEN_FILE, LRU_TIER_MIN, LRU_TIER_MAX,
> + MAX_SWAPPINESS - swappiness, &pv);
>
> return positive_ctrl_err(&sp, &pv);
> }
>
Reviewed-by: Ridong Chen <ridong.chen@linux.dev>
Thanks.
--
Best regards
Ridong
next prev parent reply other threads:[~2026-08-30 9:43 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 17:53 [PATCH v3 0/6] mm/mglru: clean up folio counters and flag usage Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-25 17:53 ` [PATCH v3 1/6] mm/memcontrol: make lru_zone_size atomic and simplify sanity check Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-29 3:34 ` Barry Song
2026-08-25 17:53 ` [PATCH v3 2/6] mm/mglru: introduce helpers for manipulating gen and refs flags Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-25 18:20 ` Kairui Song
2026-08-26 10:48 ` Qi Zheng
2026-08-27 7:32 ` Baolin Wang
[not found] ` <apRx-xd0csgBU4sL@KASONG-MC4>
2026-08-31 8:52 ` Baolin Wang
2026-08-29 4:21 ` Barry Song
2026-08-29 7:47 ` Kairui Song
2026-08-29 8:26 ` Barry Song
2026-08-30 18:34 ` Kairui Song
2026-08-30 9:08 ` Ridong Chen
2026-08-30 8:39 ` Ridong Chen
2026-08-30 17:19 ` Kairui Song
2026-08-25 17:53 ` [PATCH v3 3/6] mm/migrate: copy all referenced state via folio_migrate_lru_refs Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-27 7:33 ` Baolin Wang
2026-08-27 10:55 ` David Hildenbrand (Arm)
2026-08-28 5:26 ` Lian Wang
2026-08-29 9:56 ` Barry Song
2026-08-30 9:23 ` Ridong Chen
2026-08-25 17:53 ` [PATCH v3 4/6] mm/mglru: move max_seq read into walk_update_folio Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-28 5:28 ` Lian Wang
2026-08-29 10:04 ` Barry Song
2026-08-25 17:53 ` [PATCH v3 5/6] mm/mglru: use explicit tier range in read_ctrl_pos() Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-28 5:29 ` Lian Wang
2026-08-29 14:31 ` Kairui Song
2026-08-30 9:43 ` Ridong Chen [this message]
2026-08-25 17:53 ` [PATCH v3 6/6] mm/mglru: fix potential generation folio number leak Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-28 23:19 ` [PATCH v3 0/6] mm/mglru: clean up folio counters and flag usage Andrew Morton
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=d469a60a-3aaf-43d3-955a-238042115a3e@linux.dev \
--to=ridong.chen@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=baoquan.he@linux.dev \
--cc=cgroups@vger.kernel.org \
--cc=chrisl@kernel.org \
--cc=david@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kasong@tencent.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=qi.zheng@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=ryncsn@gmail.com \
--cc=shakeel.butt@linux.dev \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=yuanchu@google.com \
--cc=yuzhao@google.com \
--cc=ziy@nvidia.com \
/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.