aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/cxgb4vf/sge.c
diff options
context:
space:
mode:
authorJiri Pirko <jpirko@redhat.com>2011-07-20 00:54:16 -0400
committerDavid S. Miller <davem@davemloft.net>2011-07-21 16:47:54 -0400
commit87737663d5d7668c8553c572a5a7c26e86c5842b (patch)
tree9a8f3d1c26ace7787364b8a681f7b4c4eed97775 /drivers/net/cxgb4vf/sge.c
parent133b08513a99d44d9ed916bb83e46343f6ad2855 (diff)
cxgb4vf: do vlan cleanup
- unify vlan and nonvlan rx path - kill pi->vlan_grp and cxgb4vf_vlan_rx_register - allow to turn on/off rx/tx vlan accel via ethtool (set_features) Signed-off-by: Jiri Pirko <jpirko@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/cxgb4vf/sge.c')
-rw-r--r--drivers/net/cxgb4vf/sge.c34
1 files changed, 7 insertions, 27 deletions
diff --git a/drivers/net/cxgb4vf/sge.c b/drivers/net/cxgb4vf/sge.c
index 5fd75fdaa631..cffb328c46c3 100644
--- a/drivers/net/cxgb4vf/sge.c
+++ b/drivers/net/cxgb4vf/sge.c
@@ -1491,20 +1491,10 @@ static void do_gro(struct sge_eth_rxq *rxq, const struct pkt_gl *gl,
1491 skb->ip_summed = CHECKSUM_UNNECESSARY; 1491 skb->ip_summed = CHECKSUM_UNNECESSARY;
1492 skb_record_rx_queue(skb, rxq->rspq.idx); 1492 skb_record_rx_queue(skb, rxq->rspq.idx);
1493 1493
1494 if (unlikely(pkt->vlan_ex)) { 1494 if (pkt->vlan_ex)
1495 struct port_info *pi = netdev_priv(rxq->rspq.netdev); 1495 __vlan_hwaccel_put_tag(skb, be16_to_cpu(pkt->vlan));
1496 struct vlan_group *grp = pi->vlan_grp;
1497
1498 rxq->stats.vlan_ex++;
1499 if (likely(grp)) {
1500 ret = vlan_gro_frags(&rxq->rspq.napi, grp,
1501 be16_to_cpu(pkt->vlan));
1502 goto stats;
1503 }
1504 }
1505 ret = napi_gro_frags(&rxq->rspq.napi); 1496 ret = napi_gro_frags(&rxq->rspq.napi);
1506 1497
1507stats:
1508 if (ret == GRO_HELD) 1498 if (ret == GRO_HELD)
1509 rxq->stats.lro_pkts++; 1499 rxq->stats.lro_pkts++;
1510 else if (ret == GRO_MERGED || ret == GRO_MERGED_FREE) 1500 else if (ret == GRO_MERGED || ret == GRO_MERGED_FREE)
@@ -1525,7 +1515,6 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
1525 const struct pkt_gl *gl) 1515 const struct pkt_gl *gl)
1526{ 1516{
1527 struct sk_buff *skb; 1517 struct sk_buff *skb;
1528 struct port_info *pi;
1529 const struct cpl_rx_pkt *pkt = (void *)&rsp[1]; 1518 const struct cpl_rx_pkt *pkt = (void *)&rsp[1];
1530 bool csum_ok = pkt->csum_calc && !pkt->err_vec; 1519 bool csum_ok = pkt->csum_calc && !pkt->err_vec;
1531 struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq); 1520 struct sge_eth_rxq *rxq = container_of(rspq, struct sge_eth_rxq, rspq);
@@ -1553,7 +1542,6 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
1553 __skb_pull(skb, PKTSHIFT); 1542 __skb_pull(skb, PKTSHIFT);
1554 skb->protocol = eth_type_trans(skb, rspq->netdev); 1543 skb->protocol = eth_type_trans(skb, rspq->netdev);
1555 skb_record_rx_queue(skb, rspq->idx); 1544 skb_record_rx_queue(skb, rspq->idx);
1556 pi = netdev_priv(skb->dev);
1557 rxq->stats.pkts++; 1545 rxq->stats.pkts++;
1558 1546
1559 if (csum_ok && (rspq->netdev->features & NETIF_F_RXCSUM) && 1547 if (csum_ok && (rspq->netdev->features & NETIF_F_RXCSUM) &&
@@ -1569,20 +1557,12 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
1569 } else 1557 } else
1570 skb_checksum_none_assert(skb); 1558 skb_checksum_none_assert(skb);
1571 1559
1572 /* 1560 if (pkt->vlan_ex) {
1573 * Deliver the packet to the stack.
1574 */
1575 if (unlikely(pkt->vlan_ex)) {
1576 struct vlan_group *grp = pi->vlan_grp;
1577
1578 rxq->stats.vlan_ex++; 1561 rxq->stats.vlan_ex++;
1579 if (likely(grp)) 1562 __vlan_hwaccel_put_tag(skb, be16_to_cpu(pkt->vlan));
1580 vlan_hwaccel_receive_skb(skb, grp, 1563 }
1581 be16_to_cpu(pkt->vlan)); 1564
1582 else 1565 netif_receive_skb(skb);
1583 dev_kfree_skb_any(skb);
1584 } else
1585 netif_receive_skb(skb);
1586 1566
1587 return 0; 1567 return 0;
1588} 1568}