Building the Linux kernel with Clang and LLVM
 help / color / mirror / Atom feed
* [bpf-next:master 35/79] kernel/bpf/hashtab.c:1292:14: error: call to undeclared function 'arch_cmpxchg_local'; ISO C99 and later do not support implicit function declarations
@ 2026-10-18 12:06 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-18 12:06 UTC (permalink / raw)
  To: Josef Bacik; +Cc: llvm, oe-kbuild-all, Alexei Starovoitov

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
head:   a6303535c2ad9d49598d52556183911f02287791
commit: ccb88db8dac8fabde58656d5d4a33711e89c480a [35/79] bpf: Don't hand out a linked element as extra element
config: hexagon-randconfig-1001-20261018 (https://download.01.org/0day-ci/archive/20261018/202610182048.aEaiBP8W-lkp@intel.com/config)
compiler: clang version 21.1.8 (https://github.com/llvm/llvm-project 2078da43e25a4623cab2d0d60decddf709aaea28)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261018/202610182048.aEaiBP8W-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/202610182048.aEaiBP8W-lkp@intel.com/

All errors (new ones prefixed by >>):

>> kernel/bpf/hashtab.c:1292:14: error: call to undeclared function 'arch_cmpxchg_local'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    1292 |                         } while (!try_cmpxchg_local(pl_new, &l_new, NULL));
         |                                   ^
   include/linux/atomic/atomic-instrumented.h:5022:2: note: expanded from macro 'try_cmpxchg_local'
    5022 |         raw_try_cmpxchg_local(__ai_ptr, __ai_oldp, __VA_ARGS__); \
         |         ^
   include/linux/atomic/atomic-arch-fallback.h:392:9: note: expanded from macro 'raw_try_cmpxchg_local'
     392 |         ___r = raw_cmpxchg_local((_ptr), ___o, (_new)); \
         |                ^
   include/linux/atomic/atomic-arch-fallback.h:384:27: note: expanded from macro 'raw_cmpxchg_local'
     384 | #define raw_cmpxchg_local arch_cmpxchg_local
         |                           ^
>> kernel/bpf/hashtab.c:1292:14: error: incompatible integer to pointer conversion assigning to 'typeof (*(__ai_ptr))' (aka 'struct htab_elem *') from 'int' [-Wint-conversion]
    1292 |                         } while (!try_cmpxchg_local(pl_new, &l_new, NULL));
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/atomic/atomic-instrumented.h:5022:2: note: expanded from macro 'try_cmpxchg_local'
    5022 |         raw_try_cmpxchg_local(__ai_ptr, __ai_oldp, __VA_ARGS__); \
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/atomic/atomic-arch-fallback.h:392:7: note: expanded from macro 'raw_try_cmpxchg_local'
     392 |         ___r = raw_cmpxchg_local((_ptr), ___o, (_new)); \
         |              ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2 errors generated.


vim +/arch_cmpxchg_local +1292 kernel/bpf/hashtab.c

  1268	
  1269	static struct htab_elem *alloc_htab_elem(struct bpf_htab *htab, void *key,
  1270						 void *value, u32 key_size, u32 hash,
  1271						 bool percpu, bool onallcpus,
  1272						 struct htab_elem *old_elem, u64 map_flags)
  1273	{
  1274		u32 size = htab->map.value_size;
  1275		bool prealloc = htab_is_prealloc(htab);
  1276		struct htab_elem *l_new, **pl_new;
  1277		void __percpu *pptr;
  1278	
  1279		if (prealloc) {
  1280			if (old_elem) {
  1281				/* if we're updating the existing element,
  1282				 * use per-cpu extra elems to avoid freelist_pop/push.
  1283				 * The caller puts old_elem into the slot once it is
  1284				 * unlinked. Until then the slot is empty for an NMI
  1285				 * or a kprobe that updates this map on this cpu.
  1286				 */
  1287				pl_new = this_cpu_ptr(htab->extra_elems);
  1288				l_new = READ_ONCE(*pl_new);
  1289				do {
  1290					if (!l_new)
  1291						return ERR_PTR(-EBUSY);
> 1292				} while (!try_cmpxchg_local(pl_new, &l_new, NULL));
  1293			} else {
  1294				struct pcpu_freelist_node *l;
  1295	
  1296				l = __pcpu_freelist_pop(&htab->freelist);
  1297				if (!l)
  1298					return ERR_PTR(-E2BIG);
  1299				l_new = container_of(l, struct htab_elem, fnode);
  1300				bpf_map_inc_elem_count(&htab->map);
  1301			}
  1302		} else {
  1303			void *container;
  1304	
  1305			if (is_map_full(htab))
  1306				if (!old_elem)
  1307					/* when map is full and update() is replacing
  1308					 * old element, it's ok to allocate, since
  1309					 * old element will be freed immediately.
  1310					 * Otherwise return an error
  1311					 */
  1312					return ERR_PTR(-E2BIG);
  1313			inc_elem_count(htab);
  1314			container = bpf_mem_cache_alloc(&htab->ma);
  1315			if (!container) {
  1316				l_new = ERR_PTR(-ENOMEM);
  1317				goto dec_count;
  1318			}
  1319			l_new = container + htab->elem_offset;
  1320		}
  1321	
  1322		if (htab_has_hash(htab))
  1323			memcpy(l_new->key, key, key_size);
  1324	
  1325		if (percpu) {
  1326			if (prealloc) {
  1327				pptr = htab_elem_get_ptr(l_new, key_size);
  1328			} else {
  1329				/* alloc_percpu zero-fills */
  1330				void *ptr = bpf_mem_cache_alloc(&htab->pcpu_ma);
  1331	
  1332				if (!ptr) {
  1333					bpf_mem_cache_free(&htab->ma, htab_elem_container(htab, l_new));
  1334					l_new = ERR_PTR(-ENOMEM);
  1335					goto dec_count;
  1336				}
  1337				htab_elem_set_ptr_to_pptr(htab, l_new, ptr);
  1338				pptr = *(void __percpu **)ptr;
  1339			}
  1340	
  1341			pcpu_init_value(htab, pptr, value, onallcpus, map_flags);
  1342	
  1343			if (!prealloc)
  1344				htab_elem_set_ptr(l_new, key_size, pptr);
  1345		} else if (fd_htab_map_needs_adjust(htab)) {
  1346			size = round_up(size, 8);
  1347			memcpy(htab_elem_value(l_new, key_size), value, size);
  1348		} else if (map_flags & BPF_F_LOCK) {
  1349			copy_map_value_locked(&htab->map,
  1350					      htab_elem_value(l_new, key_size),
  1351					      value, false);
  1352		} else {
  1353			copy_map_value(&htab->map, htab_elem_value(l_new, key_size), value);
  1354		}
  1355	
  1356		if (htab_has_hash(htab))
  1357			htab_elem_set_hash(l_new, hash);
  1358		else
  1359			WRITE_ONCE(*(unsigned long *)l_new->key,
  1360				   htab_zero_extend_key(key, key_size));
  1361		return l_new;
  1362	dec_count:
  1363		dec_elem_count(htab);
  1364		return l_new;
  1365	}
  1366	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-18 12:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-18 12:06 [bpf-next:master 35/79] kernel/bpf/hashtab.c:1292:14: error: call to undeclared function 'arch_cmpxchg_local'; ISO C99 and later do not support implicit function declarations kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox