On Thu, Sep 17, 2020 at 12:20 AM Gilad Ben-Yossef <gilad(a)benyossef.com> wrote:
hmm...
On Wed, Sep 16, 2020 at 4:48 PM kernel test robot <lkp(a)intel.com> wrote:
>
> url:
https://github.com/0day-ci/linux/commits/Gilad-Ben-Yossef/add-optional-ca...
> base:
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
master
> config: arm64-randconfig-r015-20200916 (attached as .config)
> compiler: clang version 12.0.0 (
https://github.com/llvm/llvm-project
9e3842d60351f986d77dfe0a94f76e4fd895f188)
> reproduce (this is a W=1 build):
> wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install arm64 cross compiling tool for clang build
> # apt-get install binutils-aarch64-linux-gnu
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp(a)intel.com>
>
> All warnings (new ones prefixed by >>):
>
> >> drivers/crypto/ccree/cc_driver.c:120:18: warning: result of comparison of
constant 18446744073709551615 with expression of type 'u32' (aka 'unsigned
int') is always false [-Wtautological-constant-out-of-range-compare]
> cache_params |= FIELD_PREP(mask, val);
> ^~~~~~~~~~~~~~~~~~~~~
> include/linux/bitfield.h:94:3: note: expanded from macro 'FIELD_PREP'
> __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: ");
\
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> include/linux/bitfield.h:52:28: note: expanded from macro
'__BF_FIELD_CHECK'
> BUILD_BUG_ON_MSG((_mask) > (typeof(_reg))~0ull, \
> ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 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:319:22: note: expanded from macro
'compiletime_assert'
> _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
> ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> include/linux/compiler_types.h:307:23: note: expanded from macro
'_compiletime_assert'
> __compiletime_assert(condition, msg, prefix, suffix)
> ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> include/linux/compiler_types.h:299:9: note: expanded from macro
'__compiletime_assert'
> if (!(condition)) \
> ^~~~~~~~~
I am unable to understand this warning. It looks like it is
complaining about a FIELD_GET sanity check that is always false, which
makes sense since we're using a constant.
Anyone can enlighten me if I've missed something?
Looked at some of this code recently. I think it may have an issue
for masks where sizeof(mask) < sizeof(unsigned long long).
In your code, via 0day bot:
107 u32 cache_params, ace_const, val, mask;
...
120 cache_params |= FIELD_PREP(mask, val);
then in include/linux/bitfield.h, we have:
92 #define FIELD_PREP(_mask, _val) \
93 ({ \
94 __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \
44 #define __BF_FIELD_CHECK(_mask, _reg, _val, _pfx) \
...
52 BUILD_BUG_ON_MSG((_mask) > (typeof(_reg))~0ull, \
53 _pfx "type of reg too small for mask"); \
so the 0ULL in FIELD_PREP is important. In __BF_FIELD_CHECK, the
typeof(_reg) is unsigned long long (because 0ULL was passed). So we
have a comparison between a u32 and a u64; indeed any u32 can never be
greater than a u64 that we know has the value of ULLONG_MAX.
I did send a series splitting these up, I wonder if they'd help here:
https://lore.kernel.org/lkml/20200708230402.1644819-3-ndesaulniers@google...
--
Thanks,
~Nick Desaulniers