Re: [regression] linux-6.6.y, minmax: virtual memory exhausted in i586 chroot during kernel compilation

From: Greg KH
Date: Tue Feb 13 2024 - 11:07:35 EST


On Tue, Feb 13, 2024 at 03:13:10PM +0000, David Laight wrote:
> From: Linux regression tracking (Thorsten Leemhuis)
> > Sent: 13 February 2024 15:01
> >
> > On 13.02.24 15:50, Greg KH wrote:
> > > On Mon, Feb 12, 2024 at 05:16:58PM +0100, Linux regression tracking (Thorsten Leemhuis) wrote:
> > >>
> > >> I noticed a regression report in bugzilla.kernel.org that seems to be
> > >> specific to the linux-6.6.y series:
> > >>
> > >> Quoting from https://bugzilla.kernel.org/show_bug.cgi?id=218484 :
> > >>
> > >>> After upgrading to version 6.6.16, the kernel compilation on a i586
> > >>> arch (on a 32bit chroot in a 64bit host) fails with a message:
> > >>>
> > >>> virtual memory exhausted: Cannot allocate memory
> > >>>
> > >>> this happens even lowering the number of parallel compilation
> > >>> threads. On a x86_64 arch the same problem doesn't occur. It's not
> > >>> clear whether some weird recursion is triggered that exhausts the
> > >>> memory, but it seems that the problem is caused by the patchset
> > >>> 'minmax' added to the 6.6.16 version, in particular it seems caused
> > >>> by these patches:
> > >>>
> > >>> - minmax-allow-min-max-clamp-if-the-arguments-have-the-same-signedness.patch
> > >>> - minmax-fix-indentation-of-__cmp_once-and-__clamp_once.patch
> > >>> - minmax-allow-comparisons-of-int-against-unsigned-char-short.patch
> > >>> - minmax-relax-check-to-allow-comparison-between-unsigned-arguments-and-signed-constants.patch
> > >>>
> > >>> Reverting those patches fixes the memory exhaustion problem during compilation.
> > >>
> > >> The reporter later added:
> > >>
> > >>> From a quick test the same problem doesn't occur in 6.8-rc4.
> > >> See the ticket for more details.
> > >
> > > I think this was already fixed in 6.7 or Linus's tree, but I can't seem
> > > to find the commit at the moment.
> >
> > I thought so as well, but was in the same situation. But your comment
> > made me look again and now I found it: that was 31e97d7c9ae3de ("media:
> > solo6x10: replace max(a, min(b, c)) by clamp(b, a, c)"), which indeed is
> > not yet in 6.6.y.
>
> The code is actually (now) doing:
> clamp(b, clamp(c, a, d), d)
> but previously was four nested min()/max().
> Even the a/b/c/d aren't trivial.
> It always was a pretty long line, but the longer expansions made it explode.
>
> I was mildly surprised to see the minmax changes backported.
> Not complaining though.

They were needed to fix build errors in a different driver that was
depending on the type checking changes in them. That's why I added
them.

> But 31e97d7c9ae3de needs backporting as well.

Now queued up, thanks.

greg k-h