Re: [PATCH next v4 0/5] minmax: Relax type checks in min() and max().

From: Jiri Slaby
Date: Mon Jan 08 2024 - 06:46:31 EST


Hi,

On 18. 09. 23, 10:14, David Laight wrote:
The min() (etc) functions in minmax.h require that the arguments have
exactly the same types.

However when the type check fails, rather than look at the types and
fix the type of a variable/constant, everyone seems to jump on min_t().
In reality min_t() ought to be rare - when something unusual is being
done, not normality.
...
David Laight (5):
minmax: Add umin(a, b) and umax(a, b)
minmax: Allow min()/max()/clamp() if the arguments have the same
signedness.
minmax: Fix indentation of __cmp_once() and __clamp_once()
minmax: Allow comparisons of 'int' against 'unsigned char/short'.
minmax: Relax check to allow comparison between unsigned arguments and
signed constants.

This slows down the build and increases the build memory consumption so that it causes OOMs.

In particular 6.7:
$ time make drivers/media/pci/solo6x10/solo6x10-p2m.i
...
CPP [M] drivers/media/pci/solo6x10/solo6x10-p2m.i
real 0m45,002s
user 0m40,840s
sys 0m5,922s


$ git revert 867046cc7027703f60a46339ffde91a1970f2901
$ time make drivers/media/pci/solo6x10/solo6x10-p2m.i
...
CPP [M] drivers/media/pci/solo6x10/solo6x10-p2m.i
real 0m11,132s
user 0m9,737s
sys 0m1,415s


$ git revert 4ead534fba42fc4fd41163297528d2aa731cd121
$ time make drivers/media/pci/solo6x10/solo6x10-p2m.i
...
CPP [M] drivers/media/pci/solo6x10/solo6x10-p2m.i
real 0m3,711s
user 0m3,041s
sys 0m0,710s



Note it's only a preprocessor run. If you run a compiler on top of that, it even dies.

There is nothing special in that file, just:
if (SOLO_SDRAM_END(solo_dev) > solo_dev->sdram_size) {

which at some point expands to
max(__SOLO_JPEG_MIN_SIZE(__solo), \
min((__solo->sdram_size - SOLO_JPEG_EXT_ADDR(__solo)), 0x00ff0000))

and that expands to a lot of stuff.

Note that _line_ is 519 kbytes on 6.6 already. And 6 MB on 6.7.

The file is 4.3M vs. 122M.

Could you investigate/fix/revert (at least) the above two commits?

thanks,
--
js