* Re: [linux-next:master 3203/9634] arch/powerpc/include/asm/bitops.h:126:26: error: constraint 'n' expects an integer constant expression [not found] ` <Z81TSQHHaNq_Aj4x@gpd3> @ 2025-03-09 18:48 ` Christophe Leroy 2025-03-09 20:47 ` Andrea Righi 0 siblings, 1 reply; 2+ messages in thread From: Christophe Leroy @ 2025-03-09 18:48 UTC (permalink / raw) To: Andrea Righi, kernel test robot Cc: oe-kbuild-all, Tejun Heo, Yury Norov, clang-built-linux, llvm@lists.linux.dev Le 09/03/2025 à 09:37, Andrea Righi a écrit : > [Vous ne recevez pas souvent de courriers de arighi@nvidia.com. D?couvrez pourquoi ceci est important ? https://aka.ms/LearnAboutSenderIdentification ] > > On Sun, Mar 09, 2025 at 04:56:45AM +0800, kernel test robot wrote: >> tree: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kernel.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fnext%2Flinux-next.git&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C01ad01407fee4a03676d08dd5ee5a99d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638771062684017698%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=lK0Vy%2F4o95CtQF5szPezehhmcdFjDEGgf6JWYRIG%2FcY%3D&reserved=0 master >> head: 0a2f889128969dab41861b6e40111aa03dc57014 >> commit: 48849271e66114cb980a3bc44218b04d0f8cdcdd [3203/9634] sched_ext: idle: Per-node idle cpumasks >> config: powerpc-randconfig-r112-20250308 (https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdownload.01.org%2F0day-ci%2Farchive%2F20250309%2F202503090435.wITkzD2e-lkp%40intel.com%2Fconfig&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C01ad01407fee4a03676d08dd5ee5a99d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638771062687408543%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=dNaCIS1An989v%2BhSzWt0F1M33pxzf0WO6G09wU3%2F90s%3D&reserved=0) >> compiler: clang version 18.1.8 (https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C01ad01407fee4a03676d08dd5ee5a99d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638771062687416861%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=bBHENBhnCpqHz2ErtwY4iMTakfvmq5kumF0BVqN6hKQ%3D&reserved=0 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff) >> reproduce: (https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdownload.01.org%2F0day-ci%2Farchive%2F20250309%2F202503090435.wITkzD2e-lkp%40intel.com%2Freproduce&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C01ad01407fee4a03676d08dd5ee5a99d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638771062687424999%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Wm6O%2BaoClsBaKLXtVLOi4uDpPVx6z%2FoXnE6LF%2BMnBH8%3D&reserved=0) >> >> 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://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore.kernel.org%2Foe-kbuild-all%2F202503090435.wITkzD2e-lkp%40intel.com%2F&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C01ad01407fee4a03676d08dd5ee5a99d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638771062687433012%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=vh%2BADDGxZZJblkU6V0NlC9VPlK2ZgQQWfTCdRMtfXNY%3D&reserved=0 >> >> All errors (new ones prefixed by >>): >> >> In file included from kernel/sched/build_policy.c:16: >> In file included from include/linux/sched/clock.h:5: >> In file included from include/linux/smp.h:13: >> In file included from include/linux/cpumask.h:11: >> In file included from include/linux/kernel.h:23: >> In file included from include/linux/bitops.h:68: >>>> arch/powerpc/include/asm/bitops.h:126:26: error: constraint 'n' expects an integer constant expression >> 126 | DEFINE_CLROP(clear_bits, "") >> | ^ >> 1 error generated. > > I've expanded the for_each_node_numadist() macro to better understand > what's going on, it seems that clang isn't happy with a node_clear() inside > the for loop, and it's not complaining about a similar node_clear() outside > the for loop. > > Also, it seems to happen only with clang (gcc is always happy). > > Here's the relevant code (with the macro expanded and comments removed): > > === > static DEFINE_PER_CPU(nodemask_t, per_cpu_unvisited); > > static s32 pick_idle_cpu_from_online_nodes(const struct cpumask *cpus_allowed, int node, u64 flags) > { > nodemask_t *unvisited; > s32 cpu = -EBUSY; > > preempt_disable(); > unvisited = this_cpu_ptr(&per_cpu_unvisited); > > nodes_copy(*unvisited, node_states[N_ONLINE]); > node_clear(node, *unvisited); > > for (int __start = node, > node = nearest_node_nodemask(__start, unvisited); > node < MAX_NUMNODES; > // node_clear(node, *unvisited), <- clang is happy with this one commented! > node = nearest_node_nodemask(__start, unvisited)) { > cpu = pick_idle_cpu_in_node(cpus_allowed, node, flags); > if (cpu >= 0) > break; > } > preempt_enable(); > > return cpu; > } > === > > The code looks correct to me, but I don't know much about powerpc assembly. > Christophe, maybe you have a better idea of what's happening here? #define DEFINE_CLROP(fn, prefix) \ static inline void fn(unsigned long mask, volatile unsigned long *_p) \ { \ unsigned long old; \ unsigned long *p = (unsigned long *)_p; \ \ if (IS_ENABLED(CONFIG_PPC32) && \ __builtin_constant_p(mask) && is_rlwinm_mask_valid(~mask)) {\ asm volatile ( \ prefix \ "1:" "lwarx %0,0,%3\n" \ "rlwinm %0,%0,0,%2\n" \ "stwcx. %0,0,%3\n" \ "bne- 1b\n" \ : "=&r" (old), "+m" (*p) \ : "n" (~mask), "r" (p) \ : "cc", "memory"); \ } else { \ asm volatile ( \ prefix \ "1:" PPC_LLARX "%0,0,%3,0\n" \ "andc %0,%0,%2\n" \ PPC_STLCX "%0,0,%3\n" \ "bne- 1b\n" \ : "=&r" (old), "+m" (*p) \ : "r" (mask), "r" (p) \ : "cc", "memory"); \ } \ } clang says "constraint 'n' expects an integer constant expression" ? The only place I see 'n' constraint in that macro is the '"n" (~mask)' in the if __builtin_constant_p(mask) branch. As far as I know if mask is a constant (~mask) is also a constant ? Must be a clang bug ? Maybe try with __builtin_constant_p(~mask) instead of __builtin_constant_p(mask) Christophe > > Thanks, > -Andrea > >> >> >> vim +/n +126 arch/powerpc/include/asm/bitops.h >> >> fb350784d8d179 Christophe Leroy 2021-09-21 125 >> fb350784d8d179 Christophe Leroy 2021-09-21 @126 DEFINE_CLROP(clear_bits, "") >> fb350784d8d179 Christophe Leroy 2021-09-21 127 DEFINE_CLROP(clear_bits_unlock, PPC_RELEASE_BARRIER) >> fb350784d8d179 Christophe Leroy 2021-09-21 128 >> >> :::::: The code at line 126 was first introduced by commit >> :::::: fb350784d8d17952afa93383bb47aaa6b715c459 powerpc/bitops: Use immediate operand when possible >> >> :::::: TO: Christophe Leroy <christophe.leroy@csgroup.eu> >> :::::: CC: Michael Ellerman <mpe@ellerman.id.au> >> >> -- >> 0-DAY CI Kernel Test Service >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fintel%2Flkp-tests%2Fwiki&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C01ad01407fee4a03676d08dd5ee5a99d%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638771062687441670%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=y4xmCm57X1U8WeYk2lPntirA60ajGxiW6u2xjp3t580%3D&reserved=0 ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [linux-next:master 3203/9634] arch/powerpc/include/asm/bitops.h:126:26: error: constraint 'n' expects an integer constant expression 2025-03-09 18:48 ` [linux-next:master 3203/9634] arch/powerpc/include/asm/bitops.h:126:26: error: constraint 'n' expects an integer constant expression Christophe Leroy @ 2025-03-09 20:47 ` Andrea Righi 0 siblings, 0 replies; 2+ messages in thread From: Andrea Righi @ 2025-03-09 20:47 UTC (permalink / raw) To: Christophe Leroy Cc: kernel test robot, oe-kbuild-all, Tejun Heo, Yury Norov, clang-built-linux, llvm@lists.linux.dev Hi Christophe, On Sun, Mar 09, 2025 at 07:48:56PM +0100, Christophe Leroy wrote: ... > #define DEFINE_CLROP(fn, prefix) \ > static inline void fn(unsigned long mask, volatile unsigned long *_p) \ > { \ > unsigned long old; \ > unsigned long *p = (unsigned long *)_p; \ > \ > if (IS_ENABLED(CONFIG_PPC32) && \ > __builtin_constant_p(mask) && is_rlwinm_mask_valid(~mask)) {\ > asm volatile ( \ > prefix \ > "1:" "lwarx %0,0,%3\n" \ > "rlwinm %0,%0,0,%2\n" \ > "stwcx. %0,0,%3\n" \ > "bne- 1b\n" \ > : "=&r" (old), "+m" (*p) \ > : "n" (~mask), "r" (p) \ > : "cc", "memory"); \ > } else { \ > asm volatile ( \ > prefix \ > "1:" PPC_LLARX "%0,0,%3,0\n" \ > "andc %0,%0,%2\n" \ > PPC_STLCX "%0,0,%3\n" \ > "bne- 1b\n" \ > : "=&r" (old), "+m" (*p) \ > : "r" (mask), "r" (p) \ > : "cc", "memory"); \ > } \ > } > > > clang says "constraint 'n' expects an integer constant expression" ? > > The only place I see 'n' constraint in that macro is the '"n" (~mask)' in > the if __builtin_constant_p(mask) branch. As far as I know if mask is a > constant (~mask) is also a constant ? Right, that's my understanding as well. > > Must be a clang bug ? Possibly... > > Maybe try with __builtin_constant_p(~mask) instead of > __builtin_constant_p(mask) I tried using ~mask, and even tried to use just mask throughout the entire macro (although the code would be incorrect), but I still get the same build error. The only way that I found to fix this is by adding !IS_ENABLED(CONFIG_CC_IS_CLANG) to the if, which isn't really elegant, but maybe it's a reasonable workaround? I'll also open a clang issue in the meantime. Thanks, -Andrea ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-03-09 20:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <202503090435.wITkzD2e-lkp@intel.com>
[not found] ` <Z81TSQHHaNq_Aj4x@gpd3>
2025-03-09 18:48 ` [linux-next:master 3203/9634] arch/powerpc/include/asm/bitops.h:126:26: error: constraint 'n' expects an integer constant expression Christophe Leroy
2025-03-09 20:47 ` Andrea Righi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox