tree:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 
master
head:   532b5aa0b41ae908842166be4d17fffa53590bf0
commit: d0a1299c6bf7d80c8bb8e181f36a7c407a4cabca [283/286] cxgb4: add support 
for vxlan segmentation offload
reproduce:
        # apt-get install sparse
        git checkout d0a1299c6bf7d80c8bb8e181f36a7c407a4cabca
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/net/ethernet/chelsio/cxgb4/sge.c:1412:47: sparse: cast from 
>> restricted __sum16
>> drivers/net/ethernet/chelsio/cxgb4/sge.c:1412:44: sparse: incorrect type in 
>> assignment (different base types) @@ expected restricted __sum16 check @@ 
>> got unsignerestricted __sum16 check @@
   drivers/net/ethernet/chelsio/cxgb4/sge.c:1412:44: expected restricted 
__sum16 check
   drivers/net/ethernet/chelsio/cxgb4/sge.c:1412:44: got unsigned short 
<noident>
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:2241:43: sparse: cast to restricted 
__be64
   drivers/net/ethernet/chelsio/cxgb4/sge.c:1304:34: sparse: context imbalance 
in 't4_eth_xmit' - different lock contexts for basic block
   drivers/net/ethernet/chelsio/cxgb4/sge.c:1795:28: sparse: context imbalance 
in 'service_ofldq' - unexpected unlock

vim +1412 drivers/net/ethernet/chelsio/cxgb4/sge.c

  1344  
  1345          chip_ver = CHELSIO_CHIP_VERSION(adap->params.chip);
  1346          flits = calc_tx_flits(skb, chip_ver);
  1347          ndesc = flits_to_desc(flits);
  1348          credits = txq_avail(&q->q) - ndesc;
  1349  
  1350          if (unlikely(credits < 0)) {
  1351                  eth_txq_stop(q);
  1352                  dev_err(adap->pdev_dev,
  1353                          "%s: Tx ring %u full while queue awake!\n",
  1354                          dev->name, qidx);
  1355                  if (ptp_enabled)
  1356                          spin_unlock(&adap->ptp_lock);
  1357                  return NETDEV_TX_BUSY;
  1358          }
  1359  
  1360          if (is_eth_imm(skb, chip_ver))
  1361                  immediate = true;
  1362  
  1363          if (skb->encapsulation && chip_ver > CHELSIO_T5)
  1364                  tnl_type = cxgb_encap_offload_supported(skb);
  1365  
  1366          if (!immediate &&
  1367              unlikely(map_skb(adap->pdev_dev, skb, addr) < 0)) {
  1368                  q->mapping_err++;
  1369                  if (ptp_enabled)
  1370                          spin_unlock(&adap->ptp_lock);
  1371                  goto out_free;
  1372          }
  1373  
  1374          wr_mid = FW_WR_LEN16_V(DIV_ROUND_UP(flits, 2));
  1375          if (unlikely(credits < ETHTXQ_STOP_THRES)) {
  1376                  eth_txq_stop(q);
  1377                  wr_mid |= FW_WR_EQUEQ_F | FW_WR_EQUIQ_F;
  1378          }
  1379  
  1380          wr = (void *)&q->q.desc[q->q.pidx];
  1381          wr->equiq_to_len16 = htonl(wr_mid);
  1382          wr->r3 = cpu_to_be64(0);
  1383          end = (u64 *)wr + flits;
  1384  
  1385          len = immediate ? skb->len : 0;
  1386          ssi = skb_shinfo(skb);
  1387          if (ssi->gso_size) {
  1388                  struct cpl_tx_pkt_lso *lso = (void *)wr;
  1389                  bool v6 = (ssi->gso_type & SKB_GSO_TCPV6) != 0;
  1390                  int l3hdr_len = skb_network_header_len(skb);
  1391                  int eth_xtra_len = skb_network_offset(skb) - ETH_HLEN;
  1392                  struct cpl_tx_tnl_lso *tnl_lso = (void *)(wr + 1);
  1393  
  1394                  if (tnl_type)
  1395                          len += sizeof(*tnl_lso);
  1396                  else
  1397                          len += sizeof(*lso);
  1398  
  1399                  wr->op_immdlen = htonl(FW_WR_OP_V(FW_ETH_TX_PKT_WR) |
  1400                                         FW_WR_IMMDLEN_V(len));
  1401                  if (tnl_type) {
  1402                          struct iphdr *iph = ip_hdr(skb);
  1403  
  1404                          t6_fill_tnl_lso(skb, tnl_lso, tnl_type);
  1405                          cpl = (void *)(tnl_lso + 1);
  1406                          /* Driver is expected to compute partial 
checksum that
  1407                           * does not include the IP Total Length.
  1408                           */
  1409                          if (iph->version == 4) {
  1410                                  iph->check = 0;
  1411                                  iph->tot_len = 0;
> 1412                                  iph->check = (u16)(~ip_fast_csum((u8 
> *)iph,
  1413                                                                   
iph->ihl));
  1414                          }
  1415                          if (skb->ip_summed == CHECKSUM_PARTIAL)
  1416                                  cntrl = hwcsum(adap->params.chip, skb);
  1417                  } else {
  1418                          lso->c.lso_ctrl = 
htonl(LSO_OPCODE_V(CPL_TX_PKT_LSO) |
  1419                                            LSO_FIRST_SLICE_F | 
LSO_LAST_SLICE_F |
  1420                                            LSO_IPV6_V(v6) |
  1421                                            LSO_ETHHDR_LEN_V(eth_xtra_len 
/ 4) |
  1422                                            LSO_IPHDR_LEN_V(l3hdr_len / 
4) |
  1423                                            
LSO_TCPHDR_LEN_V(tcp_hdr(skb)->doff));
  1424                          lso->c.ipid_ofst = htons(0);
  1425                          lso->c.mss = htons(ssi->gso_size);
  1426                          lso->c.seqno_offset = htonl(0);
  1427                          if (is_t4(adap->params.chip))
  1428                                  lso->c.len = htonl(skb->len);
  1429                          else
  1430                                  lso->c.len =
  1431                                          
htonl(LSO_T5_XFER_SIZE_V(skb->len));
  1432                          cpl = (void *)(lso + 1);
  1433  
  1434                          if (CHELSIO_CHIP_VERSION(adap->params.chip)
  1435                              <= CHELSIO_T5)
  1436                                  cntrl = 
TXPKT_ETHHDR_LEN_V(eth_xtra_len);
  1437                          else
  1438                                  cntrl = 
T6_TXPKT_ETHHDR_LEN_V(eth_xtra_len);
  1439  
  1440                          cntrl |= TXPKT_CSUM_TYPE_V(v6 ?
  1441                                   TX_CSUM_TCPIP6 : TX_CSUM_TCPIP) |
  1442                                   TXPKT_IPHDR_LEN_V(l3hdr_len);
  1443                  }
  1444                  q->tso++;
  1445                  q->tx_cso += ssi->gso_segs;
  1446          } else {
  1447                  len += sizeof(*cpl);
  1448                  if (ptp_enabled)
  1449                          op = FW_PTP_TX_PKT_WR;
  1450                  else
  1451                          op = FW_ETH_TX_PKT_WR;
  1452                  wr->op_immdlen = htonl(FW_WR_OP_V(op) |
  1453                                         FW_WR_IMMDLEN_V(len));
  1454                  cpl = (void *)(wr + 1);
  1455                  if (skb->ip_summed == CHECKSUM_PARTIAL) {
  1456                          cntrl = hwcsum(adap->params.chip, skb) |
  1457                                  TXPKT_IPCSUM_DIS_F;
  1458                          q->tx_cso++;
  1459                  }
  1460          }
  1461  
  1462          if (skb_vlan_tag_present(skb)) {
  1463                  q->vlan_ins++;
  1464                  cntrl |= TXPKT_VLAN_VLD_F | 
TXPKT_VLAN_V(skb_vlan_tag_get(skb));
  1465  #ifdef CONFIG_CHELSIO_T4_FCOE
  1466                  if (skb->protocol == htons(ETH_P_FCOE))
  1467                          cntrl |= TXPKT_VLAN_V(
  1468                                   ((skb->priority & 0x7) << 
VLAN_PRIO_SHIFT));
  1469  #endif /* CONFIG_CHELSIO_T4_FCOE */
  1470          }
  1471  
  1472          ctrl0 = TXPKT_OPCODE_V(CPL_TX_PKT_XT) | 
TXPKT_INTF_V(pi->tx_chan) |
  1473                  TXPKT_PF_V(adap->pf);
  1474          if (ptp_enabled)
  1475                  ctrl0 |= TXPKT_TSTAMP_F;
  1476  #ifdef CONFIG_CHELSIO_T4_DCB
  1477          if (is_t4(adap->params.chip))
  1478                  ctrl0 |= TXPKT_OVLAN_IDX_V(q->dcb_prio);
  1479          else
  1480                  ctrl0 |= TXPKT_T5_OVLAN_IDX_V(q->dcb_prio);
  1481  #endif
  1482          cpl->ctrl0 = htonl(ctrl0);
  1483          cpl->pack = htons(0);
  1484          cpl->len = htons(skb->len);
  1485          cpl->ctrl1 = cpu_to_be64(cntrl);
  1486  
  1487          if (immediate) {
  1488                  inline_tx_skb(skb, &q->q, cpl + 1);
  1489                  dev_consume_skb_any(skb);
  1490          } else {
  1491                  int last_desc;
  1492  
  1493                  write_sgl(skb, &q->q, (struct ulptx_sgl *)(cpl + 1), 
end, 0,
  1494                            addr);
  1495                  skb_orphan(skb);
  1496  
  1497                  last_desc = q->q.pidx + ndesc - 1;
  1498                  if (last_desc >= q->q.size)
  1499                          last_desc -= q->q.size;
  1500                  q->q.sdesc[last_desc].skb = skb;
  1501                  q->q.sdesc[last_desc].sgl = (struct ulptx_sgl *)(cpl + 
1);
  1502          }
  1503  
  1504          txq_advance(&q->q, ndesc);
  1505  
  1506          ring_tx_db(adap, &q->q, ndesc);
  1507          if (ptp_enabled)
  1508                  spin_unlock(&adap->ptp_lock);
  1509          return NETDEV_TX_OK;
  1510  }
  1511  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Reply via email to