Hi Kuniyuki, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on bpf-next/master] url: https://github.com/0day-ci/linux/commits/Kuniyuki-Iwashima/Socket-migration-for-SO_REUSEPORT/20201201-225221 base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master config: arm-randconfig-r025-20201201 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project ac40a2d8f16b8a8c68fc811d67f647740e965cb8) 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 arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/0day-ci/linux/commit/9bf64de730c19cb543dbfbce6181938b27c6ebf5 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Kuniyuki-Iwashima/Socket-migration-for-SO_REUSEPORT/20201201-225221 git checkout 9bf64de730c19cb543dbfbce6181938b27c6ebf5 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> net/core/sock_reuseport.c:320:14: warning: no previous prototype for function '__reuseport_select_sock' [-Wmissing-prototypes] struct sock *__reuseport_select_sock(struct sock *sk, u32 hash, ^ net/core/sock_reuseport.c:320:1: note: declare 'static' if the function is not intended to be used outside of this translation unit struct sock *__reuseport_select_sock(struct sock *sk, u32 hash, ^ static 1 warning generated. vim +/__reuseport_select_sock +320 net/core/sock_reuseport.c 307 308 /** 309 * reuseport_select_sock - Select a socket from an SO_REUSEPORT group. 310 * @sk: First socket in the group. 311 * @hash: When no BPF filter is available, use this hash to select. 312 * @skb: skb to run through BPF filter. 313 * @hdr_len: BPF filter expects skb data pointer at payload data. If 314 * the skb does not yet point at the payload, this parameter represents 315 * how far the pointer needs to advance to reach the payload. 316 * @migration: represents if it is selecting a listener for SYN or 317 * migrating ESTABLISHED/SYN_RECV sockets or NEW_SYN_RECV socket. 318 * Returns a socket that should receive the packet (or NULL on error). 319 */ > 320 struct sock *__reuseport_select_sock(struct sock *sk, u32 hash, 321 struct sk_buff *skb, int hdr_len, 322 u8 migration) 323 { 324 struct sock_reuseport *reuse; 325 struct bpf_prog *prog; 326 struct sock *sk2 = NULL; 327 u16 socks; 328 329 rcu_read_lock(); 330 reuse = rcu_dereference(sk->sk_reuseport_cb); 331 332 /* if memory allocation failed or add call is not yet complete */ 333 if (!reuse) 334 goto out; 335 336 socks = READ_ONCE(reuse->num_socks); 337 if (likely(socks)) { 338 /* paired with smp_wmb() in reuseport_add_sock() */ 339 smp_rmb(); 340 341 prog = rcu_dereference(reuse->prog); 342 if (!prog) 343 goto select_by_hash; 344 345 if (migration) 346 goto out; 347 348 if (!skb) 349 goto select_by_hash; 350 351 if (prog->type == BPF_PROG_TYPE_SK_REUSEPORT) 352 sk2 = bpf_run_sk_reuseport(reuse, sk, prog, skb, hash); 353 else 354 sk2 = run_bpf_filter(reuse, socks, prog, skb, hdr_len); 355 356 select_by_hash: 357 /* no bpf or invalid bpf result: fall back to hash usage */ 358 if (!sk2) { 359 int i, j; 360 361 i = j = reciprocal_scale(hash, socks); 362 while (reuse->socks[i]->sk_state == TCP_ESTABLISHED) { 363 i++; 364 if (i >= reuse->num_socks) 365 i = 0; 366 if (i == j) 367 goto out; 368 } 369 sk2 = reuse->socks[i]; 370 } 371 } 372 373 out: 374 rcu_read_unlock(); 375 return sk2; 376 } 377 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org