[PATCH v2 07/19 5.15.y] minmax: simplify and clarify min_t()/max_t() implementation
Farber, Eliav
farbere at amazon.com
Tue Oct 7 13:43:19 PDT 2025
> On Mon, 6 Oct 2025 12:47:45 +0200
> Greg KH <gregkh at linuxfoundation.org> wrote:
>
> (I've had to trim the 'To' list to send this...)
>
> > On Fri, Oct 03, 2025 at 12:59:54PM +0000, Eliav Farber wrote:
> > > From: Linus Torvalds <torvalds at linux-foundation.org>
> > >
> > > [ Upstream commit 017fa3e89187848fd056af757769c9e66ac3e93d ]
> > >
> > > This simplifies the min_t() and max_t() macros by no longer making
> > > them work in the context of a C constant expression.
> > >
> > > That means that you can no longer use them for static initializers
> > > or for array sizes in type definitions, but there were only a couple
> > > of such uses, and all of them were converted (famous last words) to
> > > use MIN_T/MAX_T instead.
> > >
> > > Cc: David Laight <David.Laight at aculab.com>
> > > Cc: Lorenzo Stoakes <lorenzo.stoakes at oracle.com>
> > > Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> > > Signed-off-by: Eliav Farber <farbere at amazon.com>
> >
> > Eliav, your testing infrastructure needs some work, this patch breaks
> > the build on this kernel tree:
> >
> > In file included from ./include/linux/kernel.h:16,
> > from ./include/linux/list.h:9,
> > from ./include/linux/wait.h:7,
> > from ./include/linux/wait_bit.h:8,
> > from ./include/linux/fs.h:6,
> > from fs/erofs/internal.h:10,
> > from fs/erofs/zdata.h:9,
> > from fs/erofs/zdata.c:6:
> > fs/erofs/zdata.c: In function ‘z_erofs_decompress_pcluster’:
> > fs/erofs/zdata.h:185:61: error: ISO C90 forbids variable length array ‘pages_onstack’ [-Werror=vla]
> > 185 | min_t(unsigned int, THREAD_SIZE / 8 / sizeof(struct page *), 96U)
> > | ^~~~
>
> That constant seems to get (renamed and) changed to 32 in a later patch.
> I'm not sure of the rational for the min() at all.
> I think THREAD_SIZE is the size of the kernel stack? Or at least related to it.
> The default seems to be 8k on x86-64 and 4k or 8k on i386.
> So it is pretty much always going to be 96.
>
> Linus added MIN() that can be used for array sizes.
> But I'd guess this could just be changed to 32 - need to ask the erofs guys.
Changing the definition of Z_EROFS_VMAP_ONSTACK_PAGES to use
MIN_T(unsigned int, THREAD_SIZE / 8 / sizeof(struct page *), 96U)
instead of
min_t(unsigned int, THREAD_SIZE / 8 / sizeof(struct page *), 96U).
fixes the build failure.
This aligns with the change made in upstream commit
4477b39c32fd("minmax: add a few more MIN_T/MAX_T users"):
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4477b39c32fdc03363affef4b11d48391e6dc9ff
---
Regards, Eliav
More information about the linux-um
mailing list