Re: [PATCH 1/1] mm/mm_init: compute hash mask with unsigned arithmetic
From: Andrew Morton
Date: Sun Aug 09 2026 - 21:14:11 EST
On Sun, 9 Aug 2026 22:25:35 +0800 Longlong Xia <xialonglong2025@xxxxxxx> wrote:
> 在 2026/8/9 22:03, Mike Rapoport 写道:
> > Hi,
> >
> > On Sun, Aug 09, 2026 at 08:31:19PM +0800, Longlong Xia wrote:
> >> From: Longlong Xia <xialonglong@xxxxxxxxxx>
> >>
> >> alloc_large_system_hash() allows up to 2^31 buckets, so log2qty can
> >> reach 31. At that limit, the current expression relies on signed
> >> integer wrapping to produce the unsigned hash mask.
> >>
> >> Use an unsigned literal so the mask is computed with unsigned
> >> arithmetic. Supported compiler settings already produce the same
> >> result, so this is a source-level cleanup with no functional change.
> > If complier already takes care of this then why do we want this patch?
> >
> Fair point. Since supported compilers already produce the intended
> result and this patch has no functional impact, the benefit is only
> making the unsigned arithmetic explicit. So please disregard this patch.
It's a very small thing, but I believe the patch improves the code.
I mean, we erroneously compute a large negative number then subtract 1
from it then copy that larger negative number into a signed scalar.
The copied bit pattern happens to be what we'd have got if the code had
been correct, but the code isn't correct!