tree: https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git master head: 6d6dbfe7fe1e6e1fdeda2a947036339a513ca690 commit: a890630241c76a5865b89a4fbdc39f1319754dee [4/14] netfilter: nf_tables: prefer direct calls for set lookups config: nios2-randconfig-s032-20210528 (attached as .config) compiler: nios2-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.3-341-g8af24329-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git/commit/?id=a890630241c76a5865b89a4fbdc39f1319754dee git remote add nf-next https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git git fetch --no-tags nf-next master git checkout a890630241c76a5865b89a4fbdc39f1319754dee # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=nios2 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All errors (new ones prefixed by >>): >> net/netfilter/nft_set_pipapo.c:412:6: error: static declaration of 'nft_pipapo_lookup' follows non-static declaration 412 | bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, | ^~~~~~~~~~~~~~~~~ In file included from net/netfilter/nft_set_pipapo.c:343: net/netfilter/nft_set_pipapo.h:181:6: note: previous declaration of 'nft_pipapo_lookup' was here 181 | bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, | ^~~~~~~~~~~~~~~~~ vim +/nft_pipapo_lookup +412 net/netfilter/nft_set_pipapo.c 3c4287f62044a9 Stefano Brivio 2020-01-22 399 3c4287f62044a9 Stefano Brivio 2020-01-22 400 /** 3c4287f62044a9 Stefano Brivio 2020-01-22 401 * nft_pipapo_lookup() - Lookup function 3c4287f62044a9 Stefano Brivio 2020-01-22 402 * @net: Network namespace 3c4287f62044a9 Stefano Brivio 2020-01-22 403 * @set: nftables API set representation 3db86c397f608b Andrew Lunn 2020-07-13 404 * @key: nftables API element representation containing key data 3c4287f62044a9 Stefano Brivio 2020-01-22 405 * @ext: nftables API extension pointer, filled with matching reference 3c4287f62044a9 Stefano Brivio 2020-01-22 406 * 3c4287f62044a9 Stefano Brivio 2020-01-22 407 * For more details, see DOC: Theory of Operation. 3c4287f62044a9 Stefano Brivio 2020-01-22 408 * 3c4287f62044a9 Stefano Brivio 2020-01-22 409 * Return: true on match, false otherwise. 3c4287f62044a9 Stefano Brivio 2020-01-22 410 */ a890630241c76a Florian Westphal 2021-05-13 411 INDIRECT_CALLABLE_SCOPE f0b3d338064e1f Stefano Brivio 2021-05-10 @412 bool nft_pipapo_lookup(const struct net *net, const struct nft_set *set, 3c4287f62044a9 Stefano Brivio 2020-01-22 413 const u32 *key, const struct nft_set_ext **ext) 3c4287f62044a9 Stefano Brivio 2020-01-22 414 { 3c4287f62044a9 Stefano Brivio 2020-01-22 415 struct nft_pipapo *priv = nft_set_priv(set); 3c4287f62044a9 Stefano Brivio 2020-01-22 416 unsigned long *res_map, *fill_map; 3c4287f62044a9 Stefano Brivio 2020-01-22 417 u8 genmask = nft_genmask_cur(net); 3c4287f62044a9 Stefano Brivio 2020-01-22 418 const u8 *rp = (const u8 *)key; 3c4287f62044a9 Stefano Brivio 2020-01-22 419 struct nft_pipapo_match *m; 3c4287f62044a9 Stefano Brivio 2020-01-22 420 struct nft_pipapo_field *f; 3c4287f62044a9 Stefano Brivio 2020-01-22 421 bool map_index; 3c4287f62044a9 Stefano Brivio 2020-01-22 422 int i; 3c4287f62044a9 Stefano Brivio 2020-01-22 423 3c4287f62044a9 Stefano Brivio 2020-01-22 424 local_bh_disable(); 3c4287f62044a9 Stefano Brivio 2020-01-22 425 3c4287f62044a9 Stefano Brivio 2020-01-22 426 map_index = raw_cpu_read(nft_pipapo_scratch_index); 3c4287f62044a9 Stefano Brivio 2020-01-22 427 3c4287f62044a9 Stefano Brivio 2020-01-22 428 m = rcu_dereference(priv->match); 3c4287f62044a9 Stefano Brivio 2020-01-22 429 3c4287f62044a9 Stefano Brivio 2020-01-22 430 if (unlikely(!m || !*raw_cpu_ptr(m->scratch))) 3c4287f62044a9 Stefano Brivio 2020-01-22 431 goto out; 3c4287f62044a9 Stefano Brivio 2020-01-22 432 3c4287f62044a9 Stefano Brivio 2020-01-22 433 res_map = *raw_cpu_ptr(m->scratch) + (map_index ? m->bsize_max : 0); 3c4287f62044a9 Stefano Brivio 2020-01-22 434 fill_map = *raw_cpu_ptr(m->scratch) + (map_index ? 0 : m->bsize_max); 3c4287f62044a9 Stefano Brivio 2020-01-22 435 3c4287f62044a9 Stefano Brivio 2020-01-22 436 memset(res_map, 0xff, m->bsize_max * sizeof(*res_map)); 3c4287f62044a9 Stefano Brivio 2020-01-22 437 3c4287f62044a9 Stefano Brivio 2020-01-22 438 nft_pipapo_for_each_field(f, i, m) { 3c4287f62044a9 Stefano Brivio 2020-01-22 439 bool last = i == m->field_count - 1; e807b13cb3e3bc Stefano Brivio 2020-03-07 440 int b; 3c4287f62044a9 Stefano Brivio 2020-01-22 441 e807b13cb3e3bc Stefano Brivio 2020-03-07 442 /* For each bit group: select lookup table bucket depending on 3c4287f62044a9 Stefano Brivio 2020-01-22 443 * packet bytes value, then AND bucket value 3c4287f62044a9 Stefano Brivio 2020-01-22 444 */ 4051f43116cdc7 Stefano Brivio 2020-03-07 445 if (likely(f->bb == 8)) 4051f43116cdc7 Stefano Brivio 2020-03-07 446 pipapo_and_field_buckets_8bit(f, res_map, rp); 4051f43116cdc7 Stefano Brivio 2020-03-07 447 else e807b13cb3e3bc Stefano Brivio 2020-03-07 448 pipapo_and_field_buckets_4bit(f, res_map, rp); 4051f43116cdc7 Stefano Brivio 2020-03-07 449 NFT_PIPAPO_GROUP_BITS_ARE_8_OR_4; 3c4287f62044a9 Stefano Brivio 2020-01-22 450 e807b13cb3e3bc Stefano Brivio 2020-03-07 451 rp += f->groups / NFT_PIPAPO_GROUPS_PER_BYTE(f); 3c4287f62044a9 Stefano Brivio 2020-01-22 452 3c4287f62044a9 Stefano Brivio 2020-01-22 453 /* Now populate the bitmap for the next field, unless this is 3c4287f62044a9 Stefano Brivio 2020-01-22 454 * the last field, in which case return the matched 'ext' 3c4287f62044a9 Stefano Brivio 2020-01-22 455 * pointer if any. 3c4287f62044a9 Stefano Brivio 2020-01-22 456 * 3c4287f62044a9 Stefano Brivio 2020-01-22 457 * Now res_map contains the matching bitmap, and fill_map is the 3c4287f62044a9 Stefano Brivio 2020-01-22 458 * bitmap for the next field. 3c4287f62044a9 Stefano Brivio 2020-01-22 459 */ 3c4287f62044a9 Stefano Brivio 2020-01-22 460 next_match: 3c4287f62044a9 Stefano Brivio 2020-01-22 461 b = pipapo_refill(res_map, f->bsize, f->rules, fill_map, f->mt, 3c4287f62044a9 Stefano Brivio 2020-01-22 462 last); 3c4287f62044a9 Stefano Brivio 2020-01-22 463 if (b < 0) { 3c4287f62044a9 Stefano Brivio 2020-01-22 464 raw_cpu_write(nft_pipapo_scratch_index, map_index); 3c4287f62044a9 Stefano Brivio 2020-01-22 465 local_bh_enable(); 3c4287f62044a9 Stefano Brivio 2020-01-22 466 3c4287f62044a9 Stefano Brivio 2020-01-22 467 return false; 3c4287f62044a9 Stefano Brivio 2020-01-22 468 } 3c4287f62044a9 Stefano Brivio 2020-01-22 469 3c4287f62044a9 Stefano Brivio 2020-01-22 470 if (last) { 3c4287f62044a9 Stefano Brivio 2020-01-22 471 *ext = &f->mt[b].e->ext; 3c4287f62044a9 Stefano Brivio 2020-01-22 472 if (unlikely(nft_set_elem_expired(*ext) || 3c4287f62044a9 Stefano Brivio 2020-01-22 473 !nft_set_elem_active(*ext, genmask))) 3c4287f62044a9 Stefano Brivio 2020-01-22 474 goto next_match; 3c4287f62044a9 Stefano Brivio 2020-01-22 475 3c4287f62044a9 Stefano Brivio 2020-01-22 476 /* Last field: we're just returning the key without 3c4287f62044a9 Stefano Brivio 2020-01-22 477 * filling the initial bitmap for the next field, so the 3c4287f62044a9 Stefano Brivio 2020-01-22 478 * current inactive bitmap is clean and can be reused as 3c4287f62044a9 Stefano Brivio 2020-01-22 479 * *next* bitmap (not initial) for the next packet. 3c4287f62044a9 Stefano Brivio 2020-01-22 480 */ 3c4287f62044a9 Stefano Brivio 2020-01-22 481 raw_cpu_write(nft_pipapo_scratch_index, map_index); 3c4287f62044a9 Stefano Brivio 2020-01-22 482 local_bh_enable(); 3c4287f62044a9 Stefano Brivio 2020-01-22 483 3c4287f62044a9 Stefano Brivio 2020-01-22 484 return true; 3c4287f62044a9 Stefano Brivio 2020-01-22 485 } 3c4287f62044a9 Stefano Brivio 2020-01-22 486 3c4287f62044a9 Stefano Brivio 2020-01-22 487 /* Swap bitmap indices: res_map is the initial bitmap for the 3c4287f62044a9 Stefano Brivio 2020-01-22 488 * next field, and fill_map is guaranteed to be all-zeroes at 3c4287f62044a9 Stefano Brivio 2020-01-22 489 * this point. 3c4287f62044a9 Stefano Brivio 2020-01-22 490 */ 3c4287f62044a9 Stefano Brivio 2020-01-22 491 map_index = !map_index; 3c4287f62044a9 Stefano Brivio 2020-01-22 492 swap(res_map, fill_map); 3c4287f62044a9 Stefano Brivio 2020-01-22 493 e807b13cb3e3bc Stefano Brivio 2020-03-07 494 rp += NFT_PIPAPO_GROUPS_PADDING(f); 3c4287f62044a9 Stefano Brivio 2020-01-22 495 } 3c4287f62044a9 Stefano Brivio 2020-01-22 496 3c4287f62044a9 Stefano Brivio 2020-01-22 497 out: 3c4287f62044a9 Stefano Brivio 2020-01-22 498 local_bh_enable(); 3c4287f62044a9 Stefano Brivio 2020-01-22 499 return false; 3c4287f62044a9 Stefano Brivio 2020-01-22 500 } 3c4287f62044a9 Stefano Brivio 2020-01-22 501 :::::: The code at line 412 was first introduced by commit :::::: f0b3d338064e1fe7531f0d2977e35f3b334abfb4 netfilter: nft_set_pipapo_avx2: Add irq_fpu_usable() check, fallback to non-AVX2 version :::::: TO: Stefano Brivio <sbrivio@xxxxxxxxxx> :::::: CC: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip