From: Jonathan Cameron <jic23@kernel.org>
To: "Arnd Bergmann" <arnd@arndb.de>
Cc: "Andy Shevchenko" <andy.shevchenko@gmail.com>,
"kernel test robot" <lkp@intel.com>,
"Kim Seer Paller" <kimseer.paller@analog.com>,
llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
linux-iio@vger.kernel.org
Subject: Re: [jic23-iio:testing 6/10] drivers/iio/adc/max14001.c:135:13: warning: result of comparison of constant 18446744073709551615 with expression of type 'typeof (_Generic((mask), char: (unsigned char)0, unsigned char: (unsigned char)0, signed char: (unsigned char)0, unsigned short: (un...
Date: Thu, 20 Jul 2023 19:22:30 +0100 [thread overview]
Message-ID: <20230720192230.38958380@jic23-huawei> (raw)
In-Reply-To: <20230720191838.73473d2c@jic23-huawei>
On Thu, 20 Jul 2023 19:18:38 +0100
Jonathan Cameron <jic23@kernel.org> wrote:
> On Thu, 20 Jul 2023 11:29:55 +0200
> "Arnd Bergmann" <arnd@arndb.de> wrote:
>
> > On Wed, Jun 21, 2023, at 10:25, Andy Shevchenko wrote:
> > > On Wed, Jun 21, 2023 at 10:19 AM kernel test robot <lkp@intel.com> wrote:
> > >>
> > >> tree: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git testing
> > >> head: 25e201cc6ff270abc062e13ff912292097cb2827
> > >> commit: d3e93b67f934a477c5851d575a2278f07c6242fb [6/10] iio: adc: max14001: New driver
> > >> config: x86_64-allyesconfig (https://download.01.org/0day-ci/archive/20230621/202306211545.7b6CdqsL-lkp@intel.com/config)
> > >> compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a)
> > >> reproduce: (https://download.01.org/0day-ci/archive/20230621/202306211545.7b6CdqsL-lkp@intel.com/reproduce)
> > >>
> > >> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > >> the same patch/commit), kindly add following tags
> > >> | Reported-by: kernel test robot <lkp@intel.com>
> > >> | Closes: https://lore.kernel.org/oe-kbuild-all/202306211545.7b6CdqsL-lkp@intel.com/
> > >>
> > >> All warnings (new ones prefixed by >>):
> > >
> > > Okay, you even haven't compiled your code :-(
> > > This should probably use one of the functions from bitfield.h.
> > > Like u32_encode_bits().
> >
> > I see the warning is now in linux-next. I see it only shows up with
> > clang and not gcc, but it would be nice to address it.
>
> Sorry, I managed to forget this one was still outstanding and picked up the driver.
>
> >
> > >
> > >> >> drivers/iio/adc/max14001.c:135:13: warning: result of comparison of constant 18446744073709551615 with expression of type 'typeof (_Generic((mask), char: (unsigned char)0, unsigned char: (unsigned char)0, signed char: (unsigned char)0, unsigned short: (unsigned short)0, short: (unsigned short)0, unsigned int: (unsigned int)0, int: (unsigned int)0, unsigned long: (unsigned long)0, long: (unsigned long)0, unsigned long long: (unsigned long long)0, long long: (unsigned long long)0, default: (mask)))' (aka 'unsigned int') is always false [-Wtautological-constant-out-of-range-compare]
> > >> reg_data = FIELD_PREP(mask, val);
> > >> ^~~~~~~~~~~~~~~~~~~~~
> > >> include/linux/bitfield.h:114:3: note: expanded from macro 'FIELD_PREP'
> > >> __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \
> > >> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >> include/linux/bitfield.h:71:53: note: expanded from macro '__BF_FIELD_CHECK'
> > >> BUILD_BUG_ON_MSG(__bf_cast_unsigned(_mask, _mask) > \
> > >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
> > >> include/linux/build_bug.h:39:58: note: expanded from macro 'BUILD_BUG_ON_MSG'
> > >> #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
> > >> ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
> > >> include/linux/compiler_types.h:397:22: note: expanded from macro 'compiletime_assert'
> > >> _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> > >> ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >> include/linux/compiler_types.h:385:23: note: expanded from macro '_compiletime_assert'
> > >> __compiletime_assert(condition, msg, prefix, suffix)
> > >> ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > >> include/linux/compiler_types.h:377:9: note: expanded from macro '__compiletime_assert'
> > >> if (!(condition)) \
> > >> ^~~~~~~~~
> > >> 1 warning generated.
> >
> > It looks like the problem is the use of FIELD_PREP() with a variable
> > 'val' instead of a constant. I tried marking the function __always_inline
> > so the compiler can see the actual value ('1') that gets passed in
> > as a constant, but that did not change anything.
> >
> >
> > It also looks suspicious that the value first gets read from the
> > register and then replaced with the FIELD_PREP() output, while the
> > original value gets discarded. Is this intentional?
>
> There are a lot of other fields in that register, so unlikely this was the intent.
> A number of them default to non 0 as well.
>
> >
> > ret = max14001_read(st, reg_addr, ®_data);
> > if (ret)
> > return ret;
> > reg_data = FIELD_PREP(mask, val);
> > ret = max14001_write(st, reg_addr, reg_data);
> >
> >
> > I have managed to shut up the warning by rearranging the code like:
> >
> > diff --git a/drivers/iio/adc/max14001.c b/drivers/iio/adc/max14001.c
> > index 18ace09601985..f2ce8f8947982 100644
> > --- a/drivers/iio/adc/max14001.c
> > +++ b/drivers/iio/adc/max14001.c
> > @@ -117,11 +117,9 @@ static int max14001_write_verification_reg(struct max14001_state *st,
> >
> > static int max14001_reg_update(struct max14001_state *st,
> > unsigned int reg_addr,
> > - unsigned int mask,
> > - unsigned int val)
> > + unsigned int reg_data)
> > {
> > int ret;
> > - unsigned int reg_data;
> >
> > /* Enable SPI Registers Write */
> > ret = max14001_write(st, MAX14001_WEN, MAX14001_WRITE_WEN);
> > @@ -132,8 +130,6 @@ static int max14001_reg_update(struct max14001_state *st,
> > if (ret)
> > return ret;
> >
> > - reg_data = FIELD_PREP(mask, val);
> > -
> > ret = max14001_write(st, reg_addr, reg_data);
> > if (ret)
> > return ret;
> > @@ -299,7 +295,7 @@ static int max14001_probe(struct spi_device *spi)
> >
> > /* select external voltage reference source for the ADC */
> > ret = max14001_reg_update(st, MAX14001_CFG,
> > - MAX14001_CFG_EXRF, 1);
> > + FIELD_PREP(MAX14001_CFG_EXRF, 1));
> >
> > if (ret < 0)
> > return ret;
>
> I'd prefer to just drop this reg_update function entirely. Put the call inline
> so that we can use FIELD_PREP() directly rather than (after fixing the probably bug)
> passing in both the value and the mask.
>
> >
> > but it looks like there is still a bug in max14001_reg_update(),
> > so I'd prefer Kim Seer Paller to revisit this issue and submit
> > a properly tested patch.
>
> Absolutely agree. If it's outstanding in few weeks though we can go
> with an educated 'guess' for the fix but I'd really rather not if Kim
> can post a fix in the meantime.
>
On closer inspection of my inbox, there are other reported problems that
need resolving so I'll do a rebase and drop the driver until this stuff is resolved.
Jonathan
> Jonathan
>
> >
> > Arnd
>
next prev parent reply other threads:[~2023-07-20 18:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-21 7:18 [jic23-iio:testing 6/10] drivers/iio/adc/max14001.c:135:13: warning: result of comparison of constant 18446744073709551615 with expression of type 'typeof (_Generic((mask), char: (unsigned char)0, unsigned char: (unsigned char)0, signed char: (unsigned char)0, unsigned short: (un kernel test robot
2023-06-21 8:25 ` Andy Shevchenko
2023-06-21 8:58 ` [jic23-iio:testing 6/10] drivers/iio/adc/max14001.c:135:13: warning: result of comparison of constant 18446744073709551615 with expression of type 'typeof (_Generic((mask), char: (unsigned char)0, unsigned char: (unsigned char)0, signed char: (unsi Paller, Kim Seer
2023-06-21 12:05 ` Jonathan Cameron
2023-06-22 12:52 ` Paller, Kim Seer
2023-07-21 8:38 ` Arnd Bergmann
2023-07-20 9:29 ` [jic23-iio:testing 6/10] drivers/iio/adc/max14001.c:135:13: warning: result of comparison of constant 18446744073709551615 with expression of type 'typeof (_Generic((mask), char: (unsigned char)0, unsigned char: (unsigned char)0, signed char: (unsigned char)0, unsigned short: (un Arnd Bergmann
2023-07-20 18:18 ` Jonathan Cameron
2023-07-20 18:22 ` Jonathan Cameron [this message]
2023-07-21 7:36 ` [jic23-iio:testing 6/10] drivers/iio/adc/max14001.c:135:13: warning: result of comparison of constant 18446744073709551615 with expression of type 'typeof (_Generic((mask), char: (unsigned char)0, unsigned char: (unsigned char)0, signed char: (unsi Paller, Kim Seer
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=20230720192230.38958380@jic23-huawei \
--to=jic23@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=kimseer.paller@analog.com \
--cc=linux-iio@vger.kernel.org \
--cc=lkp@intel.com \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@lists.linux.dev \
/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