linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linuxfoundation.org>
To: Arnd Bergmann <arnd@kernel.org>
Cc: David Laight <David.Laight@aculab.com>,
	 "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Jens Axboe <axboe@kernel.dk>,
	 Matthew Wilcox <willy@infradead.org>,
	Christoph Hellwig <hch@infradead.org>,
	 Andrew Morton <akpm@linux-foundation.org>,
	 Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	 Dan Carpenter <dan.carpenter@linaro.org>,
	"Jason A . Donenfeld" <Jason@zx2c4.com>,
	 "pedro.falcato@gmail.com" <pedro.falcato@gmail.com>,
	Mateusz Guzik <mjguzik@gmail.com>,
	 "linux-mm@kvack.org" <linux-mm@kvack.org>,
	Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Subject: Re: [PATCH v2 1/8] minmax: Put all the clamp() definitions together
Date: Tue, 30 Jul 2024 11:02:44 -0700	[thread overview]
Message-ID: <CAHk-=wgLsFdNert_OfCmRon7Y9+ETnjxkz_UA5mv0=1RB71kww@mail.gmail.com> (raw)
In-Reply-To: <8111159a-c571-4c71-b731-184af56b5cb1@app.fastmail.com>

On Tue, 30 Jul 2024 at 07:15, Arnd Bergmann <arnd@kernel.org> wrote:
>
> There is another one that I see with gcc-8 randconfigs (arm64):

So I ended up undoing that part of my patch, so it's a non-issue, but
I wanted to figure out what went wrong.

It's actually quite funny.

> net/netfilter/ipvs/ip_vs_conn.c:1498:8: note: in expansion of macro 'clamp'
>  1498 |  max = clamp(max, min, max_avail);

So it turns out that min is seen by the compiler to be constant (8).
And max_avail() uses order_base_2(), which expands to this huge
comparison table for the constant case.

Now, in the end all of those comparisons will go away, but I think
what happens is that because they exist at the source level, the
compiler ends up expanding them, and then - for exactly the same
reason as before - the compiler can find a path in that tree of
conditionals where "max_avail" does indeed end up being a constant
smaller than 8.

The fact that that path is then never taken, and pruned away later,
doesn't help us, and the compiletime_assert happens because in one
intermediate form the compiler had folded the now trivial 'clamp()' of
two constants in with the conditionals that get thrown away, and the
warning happens even when it's not reachable.

Anyway, it does mean that yeah, the much more stupid static_assert()
that will never try to follow any chain of expressions si the way to
go.

For the type checking, this isn't as much of an issue.

The whole "is that a non-negative expression" also uses the same
machinery, but if the expression could be negative in some situation
(that goes away in the end) at worst it just means that the new rules
won't be as relaxed as they could be when the expressions get
sufficiently complicated.

                Linus


  reply	other threads:[~2024-07-30 18:03 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-28 14:15 [PATCH v2 0/8] minmax: reduce compilation time David Laight
2024-07-28 14:17 ` [PATCH v2 1/8] minmax: Put all the clamp() definitions together David Laight
2024-07-28 17:24   ` Linus Torvalds
2024-07-28 18:11     ` David Laight
2024-07-28 19:55       ` Linus Torvalds
2024-07-28 20:09         ` David Laight
2024-07-28 20:13           ` Linus Torvalds
2024-07-28 20:22             ` David Laight
2024-07-28 20:31               ` Linus Torvalds
2024-07-28 22:13                 ` David Laight
2024-07-28 22:22                   ` Linus Torvalds
2024-07-29  8:01                     ` David Laight
2024-07-28 21:01               ` Linus Torvalds
2024-07-28 21:53                 ` David Laight
2024-07-29  4:15                 ` Linus Torvalds
2024-07-29 22:25             ` Arnd Bergmann
2024-07-29 23:21               ` Linus Torvalds
2024-07-30  1:52                 ` Linus Torvalds
2024-07-30  3:59                 ` Linus Torvalds
2024-07-30 10:10                   ` Arnd Bergmann
2024-07-30 14:14                     ` Arnd Bergmann
2024-07-30 18:02                       ` Linus Torvalds [this message]
2024-07-30 19:52                         ` Linus Torvalds
2024-07-30 21:47                           ` David Laight
2024-07-30 22:44                             ` Linus Torvalds
2024-07-30 23:03                               ` Linus Torvalds
2024-07-31  8:09                                 ` David Laight
2024-07-31 10:50                                   ` Arnd Bergmann
2024-07-31 15:38                                   ` Linus Torvalds
2024-07-31 15:56                                     ` David Laight
2024-07-31 16:04                                       ` Linus Torvalds
2024-12-04 13:15                       ` Geert Uytterhoeven
2024-12-04 17:16                         ` David Laight
2024-07-30 16:35                     ` Linus Torvalds
2024-07-30 16:46                       ` Linus Torvalds
2024-07-30 12:03               ` David Laight
2024-07-28 18:23     ` David Laight
2024-07-28 14:18 ` [PATCH v2 2/8] minmax: Use _Static_assert() instead of static_assert() David Laight
2024-07-28 17:51   ` Christophe JAILLET
2024-07-28 18:12     ` David Laight
2024-07-28 14:19 ` [PATCH v2 3/8] compiler.h: Add __if_constexpr(expr, if_const, if_not_const) David Laight
2024-07-28 14:20 ` [PATCH v2 4/8] minmax: Simplify signedness check David Laight
2024-07-28 16:57   ` Linus Torvalds
2024-07-28 18:14     ` David Laight
2024-07-28 20:13       ` David Laight
2024-07-28 14:21 ` [PATCH v2 5/8] minmax: Factor out the zero-extension logic from umin/umax David Laight
2024-07-28 14:22 ` [PATCH v2 6/8] minmax: Optimise _Static_assert() check in clamp() David Laight
2024-07-28 14:23 ` [PATCH v2 7/8] minmax: Use __auto_type David Laight
2024-07-28 16:59   ` Linus Torvalds
2024-07-28 14:24 ` [PATCH v2 8/8] minmax: minmax: Add __types_ok3() and optimise defines with 3 arguments David Laight

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHk-=wgLsFdNert_OfCmRon7Y9+ETnjxkz_UA5mv0=1RB71kww@mail.gmail.com' \
    --to=torvalds@linuxfoundation.org \
    --cc=David.Laight@aculab.com \
    --cc=Jason@zx2c4.com \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=arnd@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=dan.carpenter@linaro.org \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=mjguzik@gmail.com \
    --cc=pedro.falcato@gmail.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox