* [tip:x86/vdso 3/4] arch/x86/include/asm/arch_hweight.h:49:15: error: invalid input size for constraint 'D'
@ 2023-02-07 5:39 kernel test robot
2023-02-07 10:46 ` [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu Sebastian Andrzej Siewior
0 siblings, 1 reply; 4+ messages in thread
From: kernel test robot @ 2023-02-07 5:39 UTC (permalink / raw)
To: Sebastian Andrzej Siewior
Cc: llvm, oe-kbuild-all, linux-kernel, x86, Thomas Gleixner
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/vdso
head: 5646bbd6684acf5c9b9dedb863b7d2f6f5a330fb
commit: 92d33063c081a82d25dd08a9cce03947c8ed9164 [3/4] x86/vdso: Provide getcpu for x86-32.
config: x86_64-randconfig-r031-20230206 (https://download.01.org/0day-ci/archive/20230207/202302071338.m7nBGR5i-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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
# https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=92d33063c081a82d25dd08a9cce03947c8ed9164
git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
git fetch --no-tags tip x86/vdso
git checkout 92d33063c081a82d25dd08a9cce03947c8ed9164
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from arch/x86/entry/vdso/vdso32/vgetcpu.c:2:
In file included from arch/x86/entry/vdso/vdso32/../vgetcpu.c:8:
In file included from include/linux/kernel.h:22:
In file included from include/linux/bitops.h:68:
In file included from arch/x86/include/asm/bitops.h:420:
>> arch/x86/include/asm/arch_hweight.h:49:15: error: invalid input size for constraint 'D'
: REG_IN (w));
^
In file included from arch/x86/entry/vdso/vdso32/vgetcpu.c:2:
In file included from arch/x86/entry/vdso/vdso32/../vgetcpu.c:8:
In file included from include/linux/kernel.h:25:
In file included from include/linux/math.h:6:
>> arch/x86/include/asm/div64.h:85:34: error: invalid output size for constraint '=a'
asm ("mulq %2; divq %3" : "=a" (q)
^
In file included from arch/x86/entry/vdso/vdso32/vgetcpu.c:2:
arch/x86/entry/vdso/vdso32/../vgetcpu.c:13:1: warning: no previous prototype for function '__vdso_getcpu' [-Wmissing-prototypes]
__vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
^
arch/x86/entry/vdso/vdso32/../vgetcpu.c:12:9: note: declare 'static' if the function is not intended to be used outside of this translation unit
notrace long
^
static
1 warning and 2 errors generated.
vim +/D +49 arch/x86/include/asm/arch_hweight.h
d61931d89be506 Borislav Petkov 2010-03-05 35
d14edb1648221e Denys Vlasenko 2015-08-04 36 #ifdef CONFIG_X86_32
d61931d89be506 Borislav Petkov 2010-03-05 37 static inline unsigned long __arch_hweight64(__u64 w)
d61931d89be506 Borislav Petkov 2010-03-05 38 {
d61931d89be506 Borislav Petkov 2010-03-05 39 return __arch_hweight32((u32)w) +
d61931d89be506 Borislav Petkov 2010-03-05 40 __arch_hweight32((u32)(w >> 32));
d14edb1648221e Denys Vlasenko 2015-08-04 41 }
d61931d89be506 Borislav Petkov 2010-03-05 42 #else
d14edb1648221e Denys Vlasenko 2015-08-04 43 static __always_inline unsigned long __arch_hweight64(__u64 w)
d14edb1648221e Denys Vlasenko 2015-08-04 44 {
f5967101e9de12 Borislav Petkov 2016-05-30 45 unsigned long res;
d14edb1648221e Denys Vlasenko 2015-08-04 46
566b62a3676cae Uros Bizjak 2018-10-14 47 asm (ALTERNATIVE("call __sw_hweight64", "popcntq %1, %0", X86_FEATURE_POPCNT)
d61931d89be506 Borislav Petkov 2010-03-05 48 : "="REG_OUT (res)
d61931d89be506 Borislav Petkov 2010-03-05 @49 : REG_IN (w));
d61931d89be506 Borislav Petkov 2010-03-05 50
d61931d89be506 Borislav Petkov 2010-03-05 51 return res;
d61931d89be506 Borislav Petkov 2010-03-05 52 }
d14edb1648221e Denys Vlasenko 2015-08-04 53 #endif /* CONFIG_X86_32 */
d61931d89be506 Borislav Petkov 2010-03-05 54
:::::: The code at line 49 was first introduced by commit
:::::: d61931d89be506372d01a90d1755f6d0a9fafe2d x86: Add optimized popcnt variants
:::::: TO: Borislav Petkov <borislav.petkov@amd.com>
:::::: CC: H. Peter Anvin <hpa@zytor.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu. 2023-02-07 5:39 [tip:x86/vdso 3/4] arch/x86/include/asm/arch_hweight.h:49:15: error: invalid input size for constraint 'D' kernel test robot @ 2023-02-07 10:46 ` Sebastian Andrzej Siewior 2023-02-07 16:45 ` Damian Tometzki 2023-02-07 16:53 ` Nathan Chancellor 0 siblings, 2 replies; 4+ messages in thread From: Sebastian Andrzej Siewior @ 2023-02-07 10:46 UTC (permalink / raw) To: kernel test robot, Nathan Chancellor, Nick Desaulniers, Tom Rix Cc: llvm, oe-kbuild-all, linux-kernel, x86, Thomas Gleixner, Andy Lutomirski, Ingo Molnar, Borislav Petkov, Dave Hansen, H. Peter Anvin The 64bit register constrains in __arch_hweight64() can not be fulfilled in a 32bit build. The function is only declared, not used within vclock_gettime.c and gcc does not care. LLVM complains and aborts. Move the "fake a 32 bit kernel configuration" bits from vclock_gettime.c into a common header file. Use this from vclock_gettime.c and vgetcpu.c. Fixes: 92d33063c081a ("x86/vdso: Provide getcpu for x86-32.") Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- arch/x86/entry/vdso/vdso32/fake_32bit_build.h | 25 +++++++++++++++++ arch/x86/entry/vdso/vdso32/vclock_gettime.c | 27 +------------------ arch/x86/entry/vdso/vdso32/vgetcpu.c | 1 + 3 files changed, 27 insertions(+), 26 deletions(-) create mode 100644 arch/x86/entry/vdso/vdso32/fake_32bit_build.h diff --git a/arch/x86/entry/vdso/vdso32/fake_32bit_build.h b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h new file mode 100644 index 0000000000000..db1b15f686e32 --- /dev/null +++ b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifdef CONFIG_X86_64 + +/* + * in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel + * configuration + */ +#undef CONFIG_64BIT +#undef CONFIG_X86_64 +#undef CONFIG_COMPAT +#undef CONFIG_PGTABLE_LEVELS +#undef CONFIG_ILLEGAL_POINTER_VALUE +#undef CONFIG_SPARSEMEM_VMEMMAP +#undef CONFIG_NR_CPUS +#undef CONFIG_PARAVIRT_XXL + +#define CONFIG_X86_32 1 +#define CONFIG_PGTABLE_LEVELS 2 +#define CONFIG_PAGE_OFFSET 0 +#define CONFIG_ILLEGAL_POINTER_VALUE 0 +#define CONFIG_NR_CPUS 1 + +#define BUILD_VDSO32_64 + +#endif diff --git a/arch/x86/entry/vdso/vdso32/vclock_gettime.c b/arch/x86/entry/vdso/vdso32/vclock_gettime.c index 283ed9d004267..86981decfea83 100644 --- a/arch/x86/entry/vdso/vdso32/vclock_gettime.c +++ b/arch/x86/entry/vdso/vdso32/vclock_gettime.c @@ -1,29 +1,4 @@ // SPDX-License-Identifier: GPL-2.0 #define BUILD_VDSO32 - -#ifdef CONFIG_X86_64 - -/* - * in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel - * configuration - */ -#undef CONFIG_64BIT -#undef CONFIG_X86_64 -#undef CONFIG_COMPAT -#undef CONFIG_PGTABLE_LEVELS -#undef CONFIG_ILLEGAL_POINTER_VALUE -#undef CONFIG_SPARSEMEM_VMEMMAP -#undef CONFIG_NR_CPUS -#undef CONFIG_PARAVIRT_XXL - -#define CONFIG_X86_32 1 -#define CONFIG_PGTABLE_LEVELS 2 -#define CONFIG_PAGE_OFFSET 0 -#define CONFIG_ILLEGAL_POINTER_VALUE 0 -#define CONFIG_NR_CPUS 1 - -#define BUILD_VDSO32_64 - -#endif - +#include "fake_32bit_build.h" #include "../vclock_gettime.c" diff --git a/arch/x86/entry/vdso/vdso32/vgetcpu.c b/arch/x86/entry/vdso/vdso32/vgetcpu.c index b777f84ffae9b..3a9791f5e9989 100644 --- a/arch/x86/entry/vdso/vdso32/vgetcpu.c +++ b/arch/x86/entry/vdso/vdso32/vgetcpu.c @@ -1,2 +1,3 @@ // SPDX-License-Identifier: GPL-2.0 +#include "fake_32bit_build.h" #include "../vgetcpu.c" -- 2.39.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu. 2023-02-07 10:46 ` [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu Sebastian Andrzej Siewior @ 2023-02-07 16:45 ` Damian Tometzki 2023-02-07 16:53 ` Nathan Chancellor 1 sibling, 0 replies; 4+ messages in thread From: Damian Tometzki @ 2023-02-07 16:45 UTC (permalink / raw) To: Sebastian Andrzej Siewior Cc: kernel test robot, Nathan Chancellor, Nick Desaulniers, Tom Rix, llvm, oe-kbuild-all, linux-kernel, x86, Thomas Gleixner, Andy Lutomirski, Ingo Molnar, Borislav Petkov, Dave Hansen, H. Peter Anvin Hello Sebastian, Linux Kernel build 6.2.0rc7 was successfully with clang-17. Many Thanks Damian Tometzki On Tue, 07. Feb 11:46, Sebastian Andrzej Siewior wrote: > The 64bit register constrains in __arch_hweight64() can not be > fulfilled in a 32bit build. The function is only declared, not used > within vclock_gettime.c and gcc does not care. LLVM complains and > aborts. > > Move the "fake a 32 bit kernel configuration" bits from vclock_gettime.c > into a common header file. Use this from vclock_gettime.c and vgetcpu.c. > > Fixes: 92d33063c081a ("x86/vdso: Provide getcpu for x86-32.") > Reported-by: kernel test robot <lkp@intel.com> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > --- > arch/x86/entry/vdso/vdso32/fake_32bit_build.h | 25 +++++++++++++++++ > arch/x86/entry/vdso/vdso32/vclock_gettime.c | 27 +------------------ > arch/x86/entry/vdso/vdso32/vgetcpu.c | 1 + > 3 files changed, 27 insertions(+), 26 deletions(-) > create mode 100644 arch/x86/entry/vdso/vdso32/fake_32bit_build.h > > diff --git a/arch/x86/entry/vdso/vdso32/fake_32bit_build.h b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h > new file mode 100644 > index 0000000000000..db1b15f686e32 > --- /dev/null > +++ b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h > @@ -0,0 +1,25 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifdef CONFIG_X86_64 > + > +/* > + * in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel > + * configuration > + */ > +#undef CONFIG_64BIT > +#undef CONFIG_X86_64 > +#undef CONFIG_COMPAT > +#undef CONFIG_PGTABLE_LEVELS > +#undef CONFIG_ILLEGAL_POINTER_VALUE > +#undef CONFIG_SPARSEMEM_VMEMMAP > +#undef CONFIG_NR_CPUS > +#undef CONFIG_PARAVIRT_XXL > + > +#define CONFIG_X86_32 1 > +#define CONFIG_PGTABLE_LEVELS 2 > +#define CONFIG_PAGE_OFFSET 0 > +#define CONFIG_ILLEGAL_POINTER_VALUE 0 > +#define CONFIG_NR_CPUS 1 > + > +#define BUILD_VDSO32_64 > + > +#endif > diff --git a/arch/x86/entry/vdso/vdso32/vclock_gettime.c b/arch/x86/entry/vdso/vdso32/vclock_gettime.c > index 283ed9d004267..86981decfea83 100644 > --- a/arch/x86/entry/vdso/vdso32/vclock_gettime.c > +++ b/arch/x86/entry/vdso/vdso32/vclock_gettime.c > @@ -1,29 +1,4 @@ > // SPDX-License-Identifier: GPL-2.0 > #define BUILD_VDSO32 > - > -#ifdef CONFIG_X86_64 > - > -/* > - * in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel > - * configuration > - */ > -#undef CONFIG_64BIT > -#undef CONFIG_X86_64 > -#undef CONFIG_COMPAT > -#undef CONFIG_PGTABLE_LEVELS > -#undef CONFIG_ILLEGAL_POINTER_VALUE > -#undef CONFIG_SPARSEMEM_VMEMMAP > -#undef CONFIG_NR_CPUS > -#undef CONFIG_PARAVIRT_XXL > - > -#define CONFIG_X86_32 1 > -#define CONFIG_PGTABLE_LEVELS 2 > -#define CONFIG_PAGE_OFFSET 0 > -#define CONFIG_ILLEGAL_POINTER_VALUE 0 > -#define CONFIG_NR_CPUS 1 > - > -#define BUILD_VDSO32_64 > - > -#endif > - > +#include "fake_32bit_build.h" > #include "../vclock_gettime.c" > diff --git a/arch/x86/entry/vdso/vdso32/vgetcpu.c b/arch/x86/entry/vdso/vdso32/vgetcpu.c > index b777f84ffae9b..3a9791f5e9989 100644 > --- a/arch/x86/entry/vdso/vdso32/vgetcpu.c > +++ b/arch/x86/entry/vdso/vdso32/vgetcpu.c > @@ -1,2 +1,3 @@ > // SPDX-License-Identifier: GPL-2.0 > +#include "fake_32bit_build.h" > #include "../vgetcpu.c" > -- > 2.39.1 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu. 2023-02-07 10:46 ` [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu Sebastian Andrzej Siewior 2023-02-07 16:45 ` Damian Tometzki @ 2023-02-07 16:53 ` Nathan Chancellor 1 sibling, 0 replies; 4+ messages in thread From: Nathan Chancellor @ 2023-02-07 16:53 UTC (permalink / raw) To: Sebastian Andrzej Siewior Cc: kernel test robot, Nick Desaulniers, Tom Rix, llvm, oe-kbuild-all, linux-kernel, x86, Thomas Gleixner, Andy Lutomirski, Ingo Molnar, Borislav Petkov, Dave Hansen, H. Peter Anvin On Tue, Feb 07, 2023 at 11:46:33AM +0100, Sebastian Andrzej Siewior wrote: > The 64bit register constrains in __arch_hweight64() can not be > fulfilled in a 32bit build. The function is only declared, not used > within vclock_gettime.c and gcc does not care. LLVM complains and > aborts. > > Move the "fake a 32 bit kernel configuration" bits from vclock_gettime.c > into a common header file. Use this from vclock_gettime.c and vgetcpu.c. > > Fixes: 92d33063c081a ("x86/vdso: Provide getcpu for x86-32.") > Reported-by: kernel test robot <lkp@intel.com> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Thank you so much for the fix! Boris inquired why this happens with clang and I wrote a little blurb here if that is helpful at all: https://lore.kernel.org/Y+J+UQ1vAKr6RHuH@dev-arch.thelio-3990X/ Regardless, this works for me. Tested-by: Nathan Chancellor <nathan@kernel.org> > --- > arch/x86/entry/vdso/vdso32/fake_32bit_build.h | 25 +++++++++++++++++ > arch/x86/entry/vdso/vdso32/vclock_gettime.c | 27 +------------------ > arch/x86/entry/vdso/vdso32/vgetcpu.c | 1 + > 3 files changed, 27 insertions(+), 26 deletions(-) > create mode 100644 arch/x86/entry/vdso/vdso32/fake_32bit_build.h > > diff --git a/arch/x86/entry/vdso/vdso32/fake_32bit_build.h b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h > new file mode 100644 > index 0000000000000..db1b15f686e32 > --- /dev/null > +++ b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h > @@ -0,0 +1,25 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifdef CONFIG_X86_64 > + > +/* > + * in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel > + * configuration > + */ > +#undef CONFIG_64BIT > +#undef CONFIG_X86_64 > +#undef CONFIG_COMPAT > +#undef CONFIG_PGTABLE_LEVELS > +#undef CONFIG_ILLEGAL_POINTER_VALUE > +#undef CONFIG_SPARSEMEM_VMEMMAP > +#undef CONFIG_NR_CPUS > +#undef CONFIG_PARAVIRT_XXL > + > +#define CONFIG_X86_32 1 > +#define CONFIG_PGTABLE_LEVELS 2 > +#define CONFIG_PAGE_OFFSET 0 > +#define CONFIG_ILLEGAL_POINTER_VALUE 0 > +#define CONFIG_NR_CPUS 1 > + > +#define BUILD_VDSO32_64 > + > +#endif > diff --git a/arch/x86/entry/vdso/vdso32/vclock_gettime.c b/arch/x86/entry/vdso/vdso32/vclock_gettime.c > index 283ed9d004267..86981decfea83 100644 > --- a/arch/x86/entry/vdso/vdso32/vclock_gettime.c > +++ b/arch/x86/entry/vdso/vdso32/vclock_gettime.c > @@ -1,29 +1,4 @@ > // SPDX-License-Identifier: GPL-2.0 > #define BUILD_VDSO32 > - > -#ifdef CONFIG_X86_64 > - > -/* > - * in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel > - * configuration > - */ > -#undef CONFIG_64BIT > -#undef CONFIG_X86_64 > -#undef CONFIG_COMPAT > -#undef CONFIG_PGTABLE_LEVELS > -#undef CONFIG_ILLEGAL_POINTER_VALUE > -#undef CONFIG_SPARSEMEM_VMEMMAP > -#undef CONFIG_NR_CPUS > -#undef CONFIG_PARAVIRT_XXL > - > -#define CONFIG_X86_32 1 > -#define CONFIG_PGTABLE_LEVELS 2 > -#define CONFIG_PAGE_OFFSET 0 > -#define CONFIG_ILLEGAL_POINTER_VALUE 0 > -#define CONFIG_NR_CPUS 1 > - > -#define BUILD_VDSO32_64 > - > -#endif > - > +#include "fake_32bit_build.h" > #include "../vclock_gettime.c" > diff --git a/arch/x86/entry/vdso/vdso32/vgetcpu.c b/arch/x86/entry/vdso/vdso32/vgetcpu.c > index b777f84ffae9b..3a9791f5e9989 100644 > --- a/arch/x86/entry/vdso/vdso32/vgetcpu.c > +++ b/arch/x86/entry/vdso/vdso32/vgetcpu.c > @@ -1,2 +1,3 @@ > // SPDX-License-Identifier: GPL-2.0 > +#include "fake_32bit_build.h" > #include "../vgetcpu.c" > -- > 2.39.1 > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-02-07 16:53 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-02-07 5:39 [tip:x86/vdso 3/4] arch/x86/include/asm/arch_hweight.h:49:15: error: invalid input size for constraint 'D' kernel test robot 2023-02-07 10:46 ` [PATCH] x86/vdso: Fake 32bit VDSO build on 64bit compile for vgetcpu Sebastian Andrzej Siewior 2023-02-07 16:45 ` Damian Tometzki 2023-02-07 16:53 ` Nathan Chancellor
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox