All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rikard Falkeborn <rikard.falkeborn@gmail.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>,
	Emil Velikov <emil.l.velikov@gmail.com>
Cc: Syed Nayyar Waris <syednwaris@gmail.com>,
	Rikard Falkeborn <rikard.falkeborn@gmail.com>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Kees Cook <keescook@chromium.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	William Breathitt Gray <vilhelm.gray@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Linux-Arch <linux-arch@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v7 1/4] bitops: Introduce the the for_each_set_clump macro
Date: Mon, 1 Jun 2020 00:37:16 +0200	[thread overview]
Message-ID: <20200531223716.GA20752@rikard> (raw)
In-Reply-To: <CAHp75Vdxa1_ANBLEOB6g25x3O0V5h3yjZve8qpz-xkisD3KTLg@mail.gmail.com>

+ Emil who was working on a patch for this

On Sun, May 31, 2020 at 02:00:45PM +0300, Andy Shevchenko wrote:
> On Sun, May 31, 2020 at 4:11 AM Syed Nayyar Waris <syednwaris@gmail.com> wrote:
> > On Sat, May 30, 2020 at 2:50 PM Andy Shevchenko
> > <andy.shevchenko@gmail.com> wrote:
> > > On Sat, May 30, 2020 at 11:45 AM Syed Nayyar Waris <syednwaris@gmail.com> wrote:
> > > > On Sat, May 30, 2020 at 3:49 AM Andy Shevchenko
> > > > <andy.shevchenko@gmail.com> wrote:
> 
> ...
> 
Sorry about that, it seems it's only triggered by gcc-9, that's why I
missed it.

> > #if (l) == 0
> > #define GENMASK_INPUT_CHECK(h, l)  0
> > #elif
> > #define GENMASK_INPUT_CHECK(h, l) \
> >         (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
> >                 __builtin_constant_p((l) > (h)), (l) > (h), 0)))
> > #endif
> >
> > I have verified that this works. Basically this just avoids the sanity
> > check when the 'lower' bound 'l' is zero. Let me know if it looks
> > fine.

I don't understand how you mean this? You can't use l before you have
defined GENMASK_INPUT_CHECK to take l as input? Am I missing something?

How about the following (with an added comment about why the casts are
necessary):

diff --git a/include/linux/bits.h b/include/linux/bits.h
index 4671fbf28842..5fdb9909fbff 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -23,7 +23,7 @@
 #include <linux/build_bug.h>
 #define GENMASK_INPUT_CHECK(h, l) \
        (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
-               __builtin_constant_p((l) > (h)), (l) > (h), 0)))
+               __builtin_constant_p((int)(l) > (int)(h)), (int)(l) > (int)(h), 0)))
 #else
 /*
  * BUILD_BUG_ON_ZERO is not available in h files included from asm files,

I can send a proper patch if this is ok.
> 
> Unfortunately, it's not enough. We need to take care about the following cases

The __GENMASK macro is only valid for values of h and l between 0 and 63
(or 31, if unsigned long is 32 bits). Negative values or values >=
sizeof(unsigned long) (or unsigned long long for GENMASK_ULL) result in
compiler warnings (-Wshift-count-negative or -Wshift-count-overflow). So
when I wrote the GENMASK_INPUT_CHECK macro, the intention was to catch
cases where l and h were swapped and let the existing compiler warnings
catch negative or too large values.

> 1) h or l negative;

Any of these cases will trigger a compiler warning (h negative triggers 
Wshift-count-overflow, l negative triggers Wshift-count-negative).

> 2) h == 0, if l == 0, I dunno what is this. it's basically either 0 or warning;

h == l == 0 is a complicated way of saying 1 (or BIT(0)). l negative
triggers compiler warning.

> 3) l == 0;

if h is negative, compiler warning (see 1). If h == 0, see 2. If h is
positive, there is no error in GENMASK_INPUT_CHECK.

> 4) h and l > 0.

The comparisson works as intended.

> 
> Now, on top of that (since it's a macro) we have to keep in mind that
> h and l can be signed and / or unsigned types.
> And macro shall work for all 4 cases (by type signedess).

If we cast to int, we don't need to worry about the signedness. If
someone enters a value that can't be cast to int, there will still
be a compiler warning about shift out of range.

Rikard

> > Regarding min, max macro that you suggested I am also looking further into it.
> 
> Since this has been introduced in v5.7 and not only your code is
> affected by this I think we need to ping original author either to fix
> or revert.
> 
> So, I Cc'ed to the author and reviewers, because they probably know
> better why that had been done in the first place and breaking existing
> code.
> 
> -- 
> With Best Regards,
> Andy Shevchenko

  reply	other threads:[~2020-05-31 22:37 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-24  5:00 [PATCH v7 0/4] Introduce the for_each_set_clump macro Syed Nayyar Waris
2020-05-24  5:00 ` Syed Nayyar Waris
2020-05-24  5:00 ` Syed Nayyar Waris
2020-05-24  5:00 ` Syed Nayyar Waris
2020-05-24  5:01 ` [PATCH v7 1/4] bitops: Introduce the " Syed Nayyar Waris
2020-05-24 14:44   ` kbuild test robot
2020-05-24 14:44     ` kbuild test robot
2020-05-29 18:08     ` Syed Nayyar Waris
2020-05-29 18:38       ` Andy Shevchenko
2020-05-29 18:38         ` Andy Shevchenko
2020-05-29 20:02         ` Syed Nayyar Waris
2020-05-29 21:31           ` William Breathitt Gray
2020-05-29 21:53             ` Syed Nayyar Waris
2020-05-29 21:42           ` Andy Shevchenko
2020-05-29 21:42             ` Andy Shevchenko
2020-05-29 22:07             ` Andy Shevchenko
2020-05-29 22:11             ` Syed Nayyar Waris
2020-05-29 22:19               ` Andy Shevchenko
2020-05-30  8:45                 ` Syed Nayyar Waris
2020-05-30  9:20                   ` Andy Shevchenko
2020-05-31  1:11                     ` Syed Nayyar Waris
2020-05-31 11:00                       ` Andy Shevchenko
2020-05-31 22:37                         ` Rikard Falkeborn [this message]
2020-06-01  0:31                           ` Syed Nayyar Waris
2020-06-01  8:33                           ` Andy Shevchenko
2020-06-02 19:01                             ` Rikard Falkeborn
2020-06-03  8:49                               ` Andy Shevchenko
2020-06-03 21:53                                 ` Rikard Falkeborn
2020-06-03 21:58                                   ` Andy Shevchenko
2020-06-03 21:59                                     ` Andy Shevchenko
2020-06-03 22:02                                   ` [PATCH] linux/bits.h: fix unsigned less than zero warnings Rikard Falkeborn
2020-06-04  6:41                                     ` Andy Shevchenko
2020-06-04 16:49                                       ` Joe Perches
2020-06-04 23:30                                       ` Rikard Falkeborn
2020-06-07 20:34                                         ` [PATCH v2 1/2] " Rikard Falkeborn
2020-06-07 20:34                                           ` [PATCH v2 2/2] bits: Add tests of GENMASK Rikard Falkeborn
2020-06-08  7:33                                             ` Geert Uytterhoeven
2020-06-08 18:42                                               ` Rikard Falkeborn
2020-06-08 22:18                                                 ` [PATCH v3 1/2] linux/bits.h: fix unsigned less than zero warnings Rikard Falkeborn
2020-06-08 22:18                                                   ` [PATCH v3 2/2] bits: Add tests of GENMASK Rikard Falkeborn
2020-06-09 14:11                                                     ` Andy Shevchenko
2020-06-21  4:36                                                     ` Andrew Morton
2020-06-21  5:42                                                       ` [PATCH v4 1/2] linux/bits.h: fix unsigned less than zero warnings Rikard Falkeborn
2020-06-21  5:42                                                         ` [PATCH v4 2/2] bits: Add tests of GENMASK Rikard Falkeborn
2021-04-22 19:40                                                           ` Nico Pache
2021-04-22 21:30                                                             ` Nico Pache
2020-07-09 12:30                                                         ` [PATCH v4 1/2] linux/bits.h: fix unsigned less than zero warnings Herbert Xu
2020-07-09 12:30                                                           ` Herbert Xu
2020-07-09 12:30                                                           ` Herbert Xu
2020-07-09 18:13                                                           ` Linus Torvalds
2020-07-10  6:38                                                             ` Herbert Xu
2020-06-15 19:52                                                   ` [PATCH v3 " Emil Velikov
2020-06-08  8:08                                             ` [PATCH v2 2/2] bits: Add tests of GENMASK Andy Shevchenko
2020-06-08  8:08                                               ` Andy Shevchenko
2020-06-08 18:44                                               ` Rikard Falkeborn
2020-06-08 11:09                                           ` [PATCH v2 1/2] linux/bits.h: fix unsigned less than zero warnings Andy Shevchenko
2020-05-24  5:04 ` [PATCH v7 2/4] lib/test_bitmap.c: Add for_each_set_clump test cases Syed Nayyar Waris
2020-05-30 19:20   ` kbuild test robot
2020-05-30 19:20     ` kbuild test robot
2020-06-04 20:42     ` Syed Nayyar Waris
2020-06-05 12:24       ` Andy Shevchenko
2020-06-05 12:24         ` Andy Shevchenko
2020-06-06 23:15         ` Syed Nayyar Waris
2020-06-08 13:18           ` Andy Shevchenko
2020-06-08 13:18             ` Andy Shevchenko
2020-06-10  5:38           ` Rong Chen
2020-06-10  5:38             ` Rong Chen
2020-05-24  5:05 ` [PATCH v7 3/4] gpio: thunderx: Utilize for_each_set_clump macro Syed Nayyar Waris
2020-05-24  5:06 ` [PATCH v7 4/4] gpio: xilinx: " Syed Nayyar Waris
2020-05-24  5:06   ` Syed Nayyar Waris
2020-05-25  9:36 ` [PATCH v7 0/4] Introduce the " Bartosz Golaszewski
2020-05-25  9:36   ` Bartosz Golaszewski
2020-06-15 12:46   ` Syed Nayyar Waris
2020-06-15 12:46     ` Syed Nayyar Waris

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=20200531223716.GA20752@rikard \
    --to=rikard.falkeborn@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=arnd@arndb.de \
    --cc=emil.l.velikov@gmail.com \
    --cc=keescook@chromium.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=syednwaris@gmail.com \
    --cc=vilhelm.gray@gmail.com \
    --cc=yamada.masahiro@socionext.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.