netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: 'Willem de Bruijn' <willemdebruijn.kernel@gmail.com>,
	Mahmoud Maatuq <mahmoudmatook.mm@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-kselftest@vger.kernel.org"
	<linux-kselftest@vger.kernel.org>,
	"kuba@kernel.org" <kuba@kernel.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"pabeni@redhat.com" <pabeni@redhat.com>,
	"edumazet@google.com" <edumazet@google.com>,
	"shuah@kernel.org" <shuah@kernel.org>
Cc: "linux-kernel-mentees@lists.linuxfoundation.org"
	<linux-kernel-mentees@lists.linuxfoundation.org>,
	Mahmoud Maatuq <mahmoudmatook.mm@gmail.com>
Subject: RE: [PATCH 1/2] selftests: Provide local define of min() and max()
Date: Mon, 21 Aug 2023 13:04:54 +0000	[thread overview]
Message-ID: <7e8c2597c71647f38cd4672cbef53a66@AcuMS.aculab.com> (raw)
In-Reply-To: <64e22df53d1e6_3580162945b@willemb.c.googlers.com.notmuch>

From: Willem de Bruijn
> Sent: Sunday, August 20, 2023 4:15 PM
> 
> Mahmoud Maatuq wrote:
> > to avoid manual calculation of min and max values
> > and fix coccinelle warnings such WARNING opportunity for min()/max()
> > adding one common definition that could be used in multiple files
> > under selftests.
> > there are also some defines for min/max scattered locally inside sources
> > under selftests.
> > this also prepares for cleaning up those redundant defines and include
> > kselftest.h instead.
> >
> > Signed-off-by: Mahmoud Maatuq <mahmoudmatook.mm@gmail.com>
> > ---
> >  tools/testing/selftests/kselftest.h | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h
> > index 829be379545a..e8eb7e9afbc6 100644
> > --- a/tools/testing/selftests/kselftest.h
> > +++ b/tools/testing/selftests/kselftest.h
> > @@ -55,6 +55,13 @@
> >  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
> >  #endif
> >
> > +#ifndef min
> > +# define min(x, y) ((x) < (y) ? (x) : (y))
> > +#endif
> > +#ifndef max
> > +# define max(x, y) ((x) < (y) ? (y) : (x))
> > +#endif
> > +
> 
> Should this more closely follow include/linux/minmax.h, which is a lot
> more strict?
> 
> I'm fine with this simpler, more relaxed, version for testing, but
> calling it out for people to speak up.
> 
> Only the first two of these comments in minmax.h apply to this
> userspace code.
> 
> /*
>  * min()/max()/clamp() macros must accomplish three things:
>  *
>  * - avoid multiple evaluations of the arguments (so side-effects like
>  *   "x++" happen only once) when non-constant.
>  * - perform strict type-checking (to generate warnings instead of
>  *   nasty runtime surprises). See the "unnecessary" pointer comparison
>  *   in __typecheck().
>  * - retain result as a constant expressions when called with only
>  *   constant expressions (to avoid tripping VLA warnings in stack
>  *   allocation usage).
>  */
> 
> Note that a more strict version that includes __typecheck would
> warn on the type difference between total_len and cfg_mss. Fine
> with changing the type of cfg_mss in the follow-on patch to address
> that.

That typecheck() is horrid.
It may well have caused more bugs due to incorrect casts that
it actually detected.

I'd suggest the version that just avoids multiple evaluations.
Or just error signed v unsigned comparisons.
See  https://lore.kernel.org/all/b4ce9dad748e489f9314a2dc95615033@AcuMS.aculab.com/
for an example patch set.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

  reply	other threads:[~2023-08-21 13:05 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-19 19:50 [PATCH 0/2] selftests: Introduce common min()/max() and apply them in net tests Mahmoud Maatuq
2023-08-19 19:50 ` [PATCH 1/2] selftests: Provide local define of min() and max() Mahmoud Maatuq
2023-08-20 15:15   ` Willem de Bruijn
2023-08-21 13:04     ` David Laight [this message]
2023-08-22 14:34       ` Willem de Bruijn
2023-08-22 14:48         ` David Laight
2023-08-23 19:35           ` Mahmoud Matook
2023-08-24  8:53             ` David Laight
2023-08-19 19:50 ` [PATCH 2/2] selftests/net: replace ternary operator with min()/max() Mahmoud Maatuq
2023-08-20 15:10   ` Willem de Bruijn
2023-08-23 19:40     ` Mahmoud Matook

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=7e8c2597c71647f38cd4672cbef53a66@AcuMS.aculab.com \
    --to=david.laight@aculab.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel-mentees@lists.linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=mahmoudmatook.mm@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=shuah@kernel.org \
    --cc=willemdebruijn.kernel@gmail.com \
    /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;
as well as URLs for NNTP newsgroup(s).