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