Hi Dmytro,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    
https://github.com/0day-ci/linux/commits/Dmytro-Shytyi/Re-PATCH-net-next-net-Variable-SLAAC-SLAAC-with-prefixes-of-arbitrary-length-in-PIO/20201111-014800
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 
8be33ecfc1ffd2da20cc29e957e4cb6eb99310cb
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.3.0
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://github.com/0day-ci/linux/commit/0d851d20831574b490bbb131cb68f722dc2419ca
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Dmytro-Shytyi/Re-PATCH-net-next-net-Variable-SLAAC-SLAAC-with-prefixes-of-arbitrary-length-in-PIO/20201111-014800
        git checkout 0d851d20831574b490bbb131cb68f722dc2419ca
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sh 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All error/warnings (new ones prefixed by >>):

   net/ipv6/addrconf.c: In function 'ipv6_create_tempaddr':
>> net/ipv6/addrconf.c:1329:2: error: expected expression before '__int128'
    1329 |  __int128 host_id;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:1330:2: error: expected expression before '__int128'
    1330 |  __int128 net_prfx;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:1331:2: error: expected expression before '__int128'
    1331 |  __int128 ipv6addr;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:1332:2: error: expected expression before '__int128'
    1332 |  __int128 mask_128;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:1333:2: error: expected expression before '__int128'
    1333 |  __int128 mask_host_id;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:1334:2: error: expected expression before '__int128'
    1334 |  __int128 mask_net_prfx;
         |  ^~~~~~~~
>> net/ipv6/addrconf.c:1335:2: warning: ISO C90 forbids mixed declarations and 
>> code [-Wdeclaration-after-statement]
    1335 |  int i;
         |  ^~~
>> net/ipv6/addrconf.c:1338:10: error: 'mask_128' undeclared (first use in this 
>> function)
    1338 |  memset(&mask_128, 0xFF, 16);
         |          ^~~~~~~~
   net/ipv6/addrconf.c:1338:10: note: each undeclared identifier is reported 
only once for each function it appears in
>> net/ipv6/addrconf.c:1370:11: error: 'host_id' undeclared (first use in this 
>> function)
    1370 |   memcpy(&host_id, temp.s6_addr32, sizeof(host_id));
         |           ^~~~~~~
>> net/ipv6/addrconf.c:1371:11: error: 'net_prfx' undeclared (first use in this 
>> function)
    1371 |   memcpy(&net_prfx, addr.s6_addr, sizeof(net_prfx));
         |           ^~~~~~~~
>> net/ipv6/addrconf.c:1373:3: error: 'mask_host_id' undeclared (first use in 
>> this function); did you mean 'mask_host_id_arr'?
    1373 |   mask_host_id = ifp->prefix_len != 128 ? (mask_128 << 
ifp->prefix_len) : 0x0;
         |   ^~~~~~~~~~~~
         |   mask_host_id_arr
>> net/ipv6/addrconf.c:1380:3: error: 'mask_net_prfx' undeclared (first use in 
>> this function)
    1380 |   mask_net_prfx = mask_128 ^ mask_host_id;
         |   ^~~~~~~~~~~~~
>> net/ipv6/addrconf.c:1383:3: error: 'ipv6addr' undeclared (first use in this 
>> function); did you mean 'ipv6_hdr'?
    1383 |   ipv6addr = net_prfx | host_id;
         |   ^~~~~~~~
         |   ipv6_hdr
   net/ipv6/addrconf.c: In function 'addrconf_prefix_rcv_add_addr':
   net/ipv6/addrconf.c:2626:3: error: expected expression before '__int128'
    2626 |   __int128 mask_128;
         |   ^~~~~~~~
   net/ipv6/addrconf.c:2627:3: error: expected expression before '__int128'
    2627 |   __int128 mask_net_prfx;
         |   ^~~~~~~~
   net/ipv6/addrconf.c:2628:3: error: expected expression before '__int128'
    2628 |   __int128 net_prfx;
         |   ^~~~~~~~
   net/ipv6/addrconf.c:2629:3: error: expected expression before '__int128'
    2629 |   __int128 curr_net_prfx;
         |   ^~~~~~~~
   net/ipv6/addrconf.c:2630:3: warning: ISO C90 forbids mixed declarations and 
code [-Wdeclaration-after-statement]
    2630 |   int hostid_len;
         |   ^~~
   net/ipv6/addrconf.c:2634:11: error: 'mask_128' undeclared (first use in this 
function)
    2634 |   memset(&mask_128, 0xFF, 16);
         |           ^~~~~~~~
   net/ipv6/addrconf.c:2642:4: error: 'mask_net_prfx' undeclared (first use in 
this function)
    2642 |    mask_net_prfx = pinfo->prefix_len != 128 ? (mask_128 << 
pinfo->prefix_len) : 0x0;
         |    ^~~~~~~~~~~~~
   net/ipv6/addrconf.c:2650:12: error: 'net_prfx' undeclared (first use in this 
function)
    2650 |    memcpy(&net_prfx, pinfo->prefix.s6_addr32, 16);
         |            ^~~~~~~~
>> net/ipv6/addrconf.c:2654:12: error: 'curr_net_prfx' undeclared (first use in 
>> this function)
    2654 |    memcpy(&curr_net_prfx, ifp->addr.s6_addr32, 16);
         |            ^~~~~~~~~~~~~
>> net/ipv6/addrconf.c:2630:7: warning: variable 'hostid_len' set but not used 
>> [-Wunused-but-set-variable]
    2630 |   int hostid_len;
         |       ^~~~~~~~~~
   net/ipv6/addrconf.c: In function 'ipv6_generate_address_variable_plen':
   net/ipv6/addrconf.c:3424:2: error: expected expression before '__int128'
    3424 |  __int128 host_id;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:3425:2: error: expected expression before '__int128'
    3425 |  __int128 net_prfx;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:3426:2: error: expected expression before '__int128'
    3426 |  __int128 ipv6addr;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:3427:2: error: expected expression before '__int128'
    3427 |  __int128 mask_128;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:3428:2: error: expected expression before '__int128'
    3428 |  __int128 mask_host_id;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:3429:2: error: expected expression before '__int128'
    3429 |  __int128 mask_net_prfx;
         |  ^~~~~~~~
   net/ipv6/addrconf.c:3430:2: warning: ISO C90 forbids mixed declarations and 
code [-Wdeclaration-after-statement]
    3430 |  int i;
         |  ^~~
   net/ipv6/addrconf.c:3433:10: error: 'mask_128' undeclared (first use in this 
function)
    3433 |  memset(&mask_128, 0xFF, 16);
         |          ^~~~~~~~
   net/ipv6/addrconf.c:3477:10: error: 'host_id' undeclared (first use in this 
function)
    3477 |  memcpy(&host_id, temp.s6_addr32, 16);
         |          ^~~~~~~
   net/ipv6/addrconf.c:3478:10: error: 'net_prfx' undeclared (first use in this 
function)
    3478 |  memcpy(&net_prfx, address->s6_addr32, 16);
         |          ^~~~~~~~
   net/ipv6/addrconf.c:3480:2: error: 'mask_host_id' undeclared (first use in 
this function); did you mean 'mask_host_id_arr'?
    3480 |  mask_host_id = rcvd_prfx_len != 128 ? (mask_128 << rcvd_prfx_len) : 
0x0;
         |  ^~~~~~~~~~~~
         |  mask_host_id_arr
   net/ipv6/addrconf.c:3487:2: error: 'mask_net_prfx' undeclared (first use in 
this function)
    3487 |  mask_net_prfx = mask_128 ^ mask_host_id;
         |  ^~~~~~~~~~~~~
   net/ipv6/addrconf.c:3490:2: error: 'ipv6addr' undeclared (first use in this 
function); did you mean 'ipv6_hdr'?
    3490 |  ipv6addr = net_prfx | host_id;
         |  ^~~~~~~~
         |  ipv6_hdr

vim +/__int128 +1329 net/ipv6/addrconf.c

  1313  
  1314  static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
  1315  {
  1316          struct inet6_dev *idev = ifp->idev;
  1317          unsigned long tmp_tstamp, age;
  1318          unsigned long regen_advance;
  1319          unsigned long now = jiffies;
  1320          s32 cnf_temp_preferred_lft;
  1321          struct inet6_ifaddr *ift;
  1322          struct ifa6_config cfg;
  1323          long max_desync_factor;
  1324  
  1325          struct in6_addr temp, addr;
  1326  
  1327          int ret = 0;
  1328  
> 1329          __int128 host_id;
  1330          __int128 net_prfx;
  1331          __int128 ipv6addr;
  1332          __int128 mask_128;
  1333          __int128 mask_host_id;
  1334          __int128 mask_net_prfx;
> 1335          int i;
  1336          unsigned char mask_host_id_arr[128];
  1337  
> 1338          memset(&mask_128, 0xFF, 16);
  1339          write_lock_bh(&idev->lock);
  1340  
  1341  retry:
  1342          in6_dev_hold(idev);
  1343          if (idev->cnf.use_tempaddr <= 0) {
  1344                  write_unlock_bh(&idev->lock);
  1345                  pr_info("%s: use_tempaddr is disabled\n", __func__);
  1346                  in6_dev_put(idev);
  1347                  ret = -1;
  1348                  goto out;
  1349          }
  1350          spin_lock_bh(&ifp->lock);
  1351          if (ifp->regen_count++ >= idev->cnf.regen_max_retry) {
  1352                  idev->cnf.use_tempaddr = -1;    /*XXX*/
  1353                  spin_unlock_bh(&ifp->lock);
  1354                  write_unlock_bh(&idev->lock);
  1355                  pr_warn("%s: regeneration time exceeded - disabled 
temporary address support\n",
  1356                          __func__);
  1357                  in6_dev_put(idev);
  1358                  ret = -1;
  1359                  goto out;
  1360          }
  1361          in6_ifa_hold(ifp);
  1362  
  1363          if (ifp->prefix_len == 64) {
  1364                  memcpy(addr.s6_addr, ifp->addr.s6_addr, 8);
  1365                  ipv6_gen_rnd_iid(&addr);
  1366          } else if (ifp->prefix_len > 0 && ifp->prefix_len <= 128) {
  1367                  memcpy(addr.s6_addr, ifp->addr.s6_addr, 16);
  1368                  get_random_bytes(temp.s6_addr32, 16);
  1369  
> 1370                  memcpy(&host_id, temp.s6_addr32, sizeof(host_id));
> 1371                  memcpy(&net_prfx, addr.s6_addr, sizeof(net_prfx));
  1372  
> 1373                  mask_host_id = ifp->prefix_len != 128 ? (mask_128 << 
> ifp->prefix_len) : 0x0;
  1374                  memcpy(mask_host_id_arr, &mask_host_id, 16);
  1375                  for (i = 0; i < 128; i++)
  1376                          mask_host_id_arr[i] = 
reverse_bits(mask_host_id_arr[i]);
  1377                  memcpy(&mask_host_id, mask_host_id_arr, 16);
  1378                  host_id = host_id & mask_host_id;
  1379  
> 1380                  mask_net_prfx = mask_128 ^ mask_host_id;
  1381                  net_prfx = net_prfx & mask_net_prfx;
  1382  
> 1383                  ipv6addr = net_prfx | host_id;
  1384                  memcpy(addr.s6_addr, &ipv6addr, 16);
  1385          }
  1386          age = (now - ifp->tstamp) / HZ;
  1387  
  1388          regen_advance = idev->cnf.regen_max_retry *
  1389                          idev->cnf.dad_transmits *
  1390                          max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), 
HZ/100) / HZ;
  1391  
  1392          /* recalculate max_desync_factor each time and update
  1393           * idev->desync_factor if it's larger
  1394           */
  1395          cnf_temp_preferred_lft = READ_ONCE(idev->cnf.temp_prefered_lft);
  1396          max_desync_factor = min_t(__u32,
  1397                                    idev->cnf.max_desync_factor,
  1398                                    cnf_temp_preferred_lft - 
regen_advance);
  1399  
  1400          if (unlikely(idev->desync_factor > max_desync_factor)) {
  1401                  if (max_desync_factor > 0) {
  1402                          get_random_bytes(&idev->desync_factor,
  1403                                           sizeof(idev->desync_factor));
  1404                          idev->desync_factor %= max_desync_factor;
  1405                  } else {
  1406                          idev->desync_factor = 0;
  1407                  }
  1408          }
  1409  
  1410          memset(&cfg, 0, sizeof(cfg));
  1411          cfg.valid_lft = min_t(__u32, ifp->valid_lft,
  1412                                idev->cnf.temp_valid_lft + age);
  1413          cfg.preferred_lft = cnf_temp_preferred_lft + age - 
idev->desync_factor;
  1414          cfg.preferred_lft = min_t(__u32, ifp->prefered_lft, 
cfg.preferred_lft);
  1415  
  1416          cfg.plen = ifp->prefix_len;
  1417          tmp_tstamp = ifp->tstamp;
  1418          spin_unlock_bh(&ifp->lock);
  1419  
  1420          write_unlock_bh(&idev->lock);
  1421  
  1422          /* A temporary address is created only if this calculated 
Preferred
  1423           * Lifetime is greater than REGEN_ADVANCE time units.  In 
particular,
  1424           * an implementation must not create a temporary address with a 
zero
  1425           * Preferred Lifetime.
  1426           * Use age calculation as in addrconf_verify to avoid 
unnecessary
  1427           * temporary addresses being generated.
  1428           */
  1429          age = (now - tmp_tstamp + ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
  1430          if (cfg.preferred_lft <= regen_advance + age) {
  1431                  in6_ifa_put(ifp);
  1432                  in6_dev_put(idev);
  1433                  ret = -1;
  1434                  goto out;
  1435          }
  1436  
  1437          cfg.ifa_flags = IFA_F_TEMPORARY;
  1438          /* set in addrconf_prefix_rcv() */
  1439          if (ifp->flags & IFA_F_OPTIMISTIC)
  1440                  cfg.ifa_flags |= IFA_F_OPTIMISTIC;
  1441  
  1442          cfg.pfx = &addr;
  1443          cfg.scope = ipv6_addr_scope(cfg.pfx);
  1444  
  1445          ift = ipv6_add_addr(idev, &cfg, block, NULL);
  1446          if (IS_ERR(ift)) {
  1447                  in6_ifa_put(ifp);
  1448                  in6_dev_put(idev);
  1449                  pr_info("%s: retry temporary address regeneration\n", 
__func__);
  1450                  write_lock_bh(&idev->lock);
  1451                  goto retry;
  1452          }
  1453  
  1454          spin_lock_bh(&ift->lock);
  1455          ift->ifpub = ifp;
  1456          ift->cstamp = now;
  1457          ift->tstamp = tmp_tstamp;
  1458          spin_unlock_bh(&ift->lock);
  1459  
  1460          addrconf_dad_start(ift);
  1461          in6_ifa_put(ift);
  1462          in6_dev_put(idev);
  1463  out:
  1464          return ret;
  1465  }
  1466  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to