From: Baoquan He <baoquan.he@linux.dev>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Arnd Bergmann <arnd@kernel.org>,
Johannes Weiner <hannes@cmpxchg.org>,
Arnd Bergmann <arnd@arndb.de>,
David Hildenbrand <david@kernel.org>,
Michal Hocko <mhocko@kernel.org>, Qi Zheng <qi.zheng@linux.dev>,
Shakeel Butt <shakeel.butt@linux.dev>,
Lorenzo Stoakes <ljs@kernel.org>,
Kairui Song <kasong@tencent.com>, Barry Song <baohua@kernel.org>,
Axel Rasmussen <axelrasmussen@google.com>,
Yuanchu Xie <yuanchu@google.com>, Wei Xu <weixugc@google.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
Ridong Chen <chenridong@xiaomi.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm/vmscan: avoid false-positive -Wuninitialized warning, again
Date: Thu, 17 Sep 2026 10:56:22 +0800 [thread overview]
Message-ID: <aqtW1iW9WLJfl7hp@fedora> (raw)
In-Reply-To: <20260916163044.3daa3811d9b2bf7d958f1f27@linux-foundation.org>
On 09/16/26 at 04:30pm, Andrew Morton wrote:
> On Wed, 16 Sep 2026 16:28:16 -0700 Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > >
> > > --- a/mm/vmscan.c
> > > +++ b/mm/vmscan.c
> > > @@ -3274,8 +3274,10 @@ struct ctrl_pos {
> > > int gain;
> > > };
> > >
> > > -static void read_ctrl_pos(struct lruvec *lruvec, int type, int tier_min,
> > > - int tier_max, int gain, struct ctrl_pos *pos)
> > > +/* __noipa works around gcc-16 warning for uninitizled use of pos->refaulted */
> > > +static __noipa 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;
> >
> > Current code has changed here somewhat, but I expect the error is still
> > there. I fixed that "uninitizled" while in there. Altered patch is
> > below.
>
>
> Then the build blew up in unexpected ways. gcc-15.2.0.
>
> The failure looks like a legit min() signedness thing which has been
> there quite a while. I'm thinking that __noipa surfaced this for some
> reason?
>
> CC mm/vmscan.o
> In file included from <command-line>:
> mm/vmscan.c: In function 'read_ctrl_pos':
> ././include/linux/compiler_types.h:702:45: error: call to '__compiletime_assert_798' declared with attribute error: min(tier, 4U - 1) signedness error
> 702 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> | ^
>
> I'll queue a fix to switch this to min_t (yuck) for now. It would of
> course be better to use more appropriate types in this code. Unless
> tiers can be negative!
I drafted one to change 'tier' as 'unsigned int'. While in mm-new this
issue has gone away because Kairui's patch change 'tier' to 'tier_min'
and 'tier_max' and remove min().
commit b447513eee2f ("mm/mglru: use explicit tier range in read_ctrl_pos()")
I personally think your one line change is better for backporting to
stable tree.
From: Baoquan He <hebaoquan@kylinos.cn>
Subject: [PATCH] mm/vmscan: fix min() signedness mismatch in read_ctrl_pos()
read_ctrl_pos() declares 'tier' as int, but MAX_NR_TIERS is 4U, so
min(tier, MAX_NR_TIERS - 1) compares int with unsigned int and min()
reports a signedness error:
error: min(tier, 4U - 1) signedness error
'tier' is never negative, it is a tier index or MAX_NR_TIERS to mean
all tiers. Make it unsigned int, then min() compares two unsigned
values and no min_t() needed.
Signed-off-by: Baoquan He <hebaoquan@kylinos.cn>
---
diff --git a/mm/vmscan.c b/mm/vmscan.c
index f11491ee9ed5..1844d92a6732 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -3195,10 +3195,10 @@ 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, unsigned int tier,
+ int gain, struct ctrl_pos *pos)
{
- int i;
+ unsigned int i;
struct lru_gen_folio *lrugen = &lruvec->lrugen;
int hist = lru_hist_from_seq(lrugen->min_seq[type]);
@@ -4801,7 +4801,7 @@ static int scan_folios(unsigned long nr_to_scan, struct lruvec *lruvec,
static int get_tier_idx(struct lruvec *lruvec, int type)
{
- int tier;
+ unsigned int tier;
struct ctrl_pos sp, pv = {};
/*
next prev parent reply other threads:[~2026-09-17 2:56 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 8:34 [PATCH] mm/vmscan: avoid false-positive -Wuninitialized warning, again Arnd Bergmann
2026-09-16 23:08 ` Andrew Morton
2026-09-16 23:28 ` Andrew Morton
2026-09-16 23:30 ` Andrew Morton
2026-09-17 2:56 ` Baoquan He [this message]
2026-09-17 5:50 ` Arnd Bergmann
2026-09-17 6:03 ` Andrew Morton
2026-09-17 10:15 ` Arnd Bergmann
2026-09-17 13:44 ` Arnd Bergmann
2026-09-17 10:19 ` David Laight
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=aqtW1iW9WLJfl7hp@fedora \
--to=baoquan.he@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=arnd@kernel.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=chenridong@xiaomi.com \
--cc=david@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kasong@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@kernel.org \
--cc=qi.zheng@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=weixugc@google.com \
--cc=yuanchu@google.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.