RE: [PATCH v2 07/19 5.15.y] minmax: simplify and clarify min_t()/max_t() implementation
"Farber, Eliav" <[email protected]>
| Newsgroups | org.kernel.vger.linux-sparse,dev.linux.lists.linux-staging,dev.linux.lists.linux-sunxi,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-um,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-edac,org.kernel.vger.linux-ext4,org.kernel.vger.linux-hwmon,org.kernel.vger.linux-input,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-media,org.kernel.vger.linux-scsi,org.kernel.vger.netdev,org.kernel.vger.netfilter-devel,org.kernel.vger.platform-driver-x86,org.kernel.vger.stable,org.kvack.linux-mm |
|---|---|
| Message-ID | <CH0PR18MB5433D33DA8E0066EB0FEB5D7C6E0A@CH0PR18MB5433.namprd18.prod.outlook.com> |
> On Mon, 6 Oct 2025 12:47:45 +0200 > Greg KH <[email protected]> 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 <[email protected]> > > > > > > [ 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 <[email protected]> > > > Cc: Lorenzo Stoakes <[email protected]> > > > Signed-off-by: Linus Torvalds <[email protected]> > > > Signed-off-by: Eliav Farber <[email protected]> > > > > 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