aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2009-05-27 15:26:37 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-29 04:46:26 -0400
commit28679751a924c11f7135641f26e99249385de5b4 (patch)
tree79e05e9ee10e62b02c52e3a5af11dd3dfa28a0e2
parent3f1f39c42b24d5c20eb593ce80b9c4d5ec1e2148 (diff)
net: dont update dev->trans_start in 10GB drivers
Followup of commits 9d21493b4beb8f918ba248032fefa393074a5e2b and 08baf561083bc27a953aa087dd8a664bb2b88e8e (net: tx scalability works : trans_start) (net: txq_trans_update() helper) Now that core network takes care of trans_start updates, dont do it in drivers themselves, if possible. Multi queue drivers can avoid one cache miss (on dev->trans_start) in their start_xmit() handler. Exceptions are NETIF_F_LLTX drivers (vxge & tehuti) Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/benet/be_main.c2
-rw-r--r--drivers/net/bnx2x_main.c1
-rw-r--r--drivers/net/chelsio/sge.c1
-rw-r--r--drivers/net/cxgb3/sge.c1
-rw-r--r--drivers/net/enic/enic_main.c2
-rw-r--r--drivers/net/ixgb/ixgb_main.c1
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c1
-rw-r--r--drivers/net/mlx4/en_tx.c1
-rw-r--r--drivers/net/myri10ge/myri10ge.c1
-rw-r--r--drivers/net/netxen/netxen_nic_main.c1
-rw-r--r--drivers/net/qlge/qlge_main.c1
-rw-r--r--drivers/net/s2io.c1
-rw-r--r--drivers/net/sfc/selftest.c1
-rw-r--r--drivers/net/sfc/tx.c7
-rw-r--r--drivers/net/tehuti.c5
-rw-r--r--drivers/net/vxge/vxge-main.c6
16 files changed, 8 insertions, 25 deletions
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c
index ae2f6b58ba25..5f17d80300ae 100644
--- a/drivers/net/benet/be_main.c
+++ b/drivers/net/benet/be_main.c
@@ -478,8 +478,6 @@ static int be_xmit(struct sk_buff *skb, struct net_device *netdev)
478 478
479 be_txq_notify(&adapter->ctrl, txq->id, wrb_cnt); 479 be_txq_notify(&adapter->ctrl, txq->id, wrb_cnt);
480 480
481 netdev->trans_start = jiffies;
482
483 be_tx_stats_update(adapter, wrb_cnt, copied, stopped); 481 be_tx_stats_update(adapter, wrb_cnt, copied, stopped);
484 return NETDEV_TX_OK; 482 return NETDEV_TX_OK;
485} 483}
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c
index e01539c33b8a..fbf1352e9c1c 100644
--- a/drivers/net/bnx2x_main.c
+++ b/drivers/net/bnx2x_main.c
@@ -10617,7 +10617,6 @@ static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
10617 mmiowb(); 10617 mmiowb();
10618 10618
10619 fp->tx_bd_prod += nbd; 10619 fp->tx_bd_prod += nbd;
10620 dev->trans_start = jiffies;
10621 10620
10622 if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) { 10621 if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) {
10623 /* We want bnx2x_tx_int to "see" the updated tx_bd_prod 10622 /* We want bnx2x_tx_int to "see" the updated tx_bd_prod
diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c
index 5e97a1a71d88..3711d64e45ef 100644
--- a/drivers/net/chelsio/sge.c
+++ b/drivers/net/chelsio/sge.c
@@ -1879,7 +1879,6 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
1879 cpl->vlan_valid = 0; 1879 cpl->vlan_valid = 0;
1880 1880
1881send: 1881send:
1882 dev->trans_start = jiffies;
1883 ret = t1_sge_tx(skb, adapter, 0, dev); 1882 ret = t1_sge_tx(skb, adapter, 0, dev);
1884 1883
1885 /* If transmit busy, and we reallocated skb's due to headroom limit, 1884 /* If transmit busy, and we reallocated skb's due to headroom limit,
diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c
index 73d569e758ec..49e64af7b093 100644
--- a/drivers/net/cxgb3/sge.c
+++ b/drivers/net/cxgb3/sge.c
@@ -1286,7 +1286,6 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev)
1286 if (vlan_tx_tag_present(skb) && pi->vlan_grp) 1286 if (vlan_tx_tag_present(skb) && pi->vlan_grp)
1287 qs->port_stats[SGE_PSTAT_VLANINS]++; 1287 qs->port_stats[SGE_PSTAT_VLANINS]++;
1288 1288
1289 dev->trans_start = jiffies;
1290 spin_unlock(&q->lock); 1289 spin_unlock(&q->lock);
1291 1290
1292 /* 1291 /*
diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index 9080f07da8fe..8005b602f776 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c
@@ -661,8 +661,6 @@ static int enic_hard_start_xmit(struct sk_buff *skb, struct net_device *netdev)
661 if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + 1) 661 if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + 1)
662 netif_stop_queue(netdev); 662 netif_stop_queue(netdev);
663 663
664 netdev->trans_start = jiffies;
665
666 spin_unlock_irqrestore(&enic->wq_lock[0], flags); 664 spin_unlock_irqrestore(&enic->wq_lock[0], flags);
667 665
668 return NETDEV_TX_OK; 666 return NETDEV_TX_OK;
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
index 04cb81a739c2..6eb7f37a113b 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -1488,7 +1488,6 @@ ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1488 1488
1489 if (count) { 1489 if (count) {
1490 ixgb_tx_queue(adapter, count, vlan_id, tx_flags); 1490 ixgb_tx_queue(adapter, count, vlan_id, tx_flags);
1491 netdev->trans_start = jiffies;
1492 /* Make sure there is space in the ring for the next send. */ 1491 /* Make sure there is space in the ring for the next send. */
1493 ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED); 1492 ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED);
1494 1493
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index dff1da8ae5c4..924aa5ed02ce 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -4863,7 +4863,6 @@ static int ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
4863 if (count) { 4863 if (count) {
4864 ixgbe_tx_queue(adapter, tx_ring, tx_flags, count, skb->len, 4864 ixgbe_tx_queue(adapter, tx_ring, tx_flags, count, skb->len,
4865 hdr_len); 4865 hdr_len);
4866 netdev->trans_start = jiffies;
4867 ixgbe_maybe_stop_tx(netdev, tx_ring, DESC_NEEDED); 4866 ixgbe_maybe_stop_tx(netdev, tx_ring, DESC_NEEDED);
4868 4867
4869 } else { 4868 } else {
diff --git a/drivers/net/mlx4/en_tx.c b/drivers/net/mlx4/en_tx.c
index ac6fc499b280..1c83a96fde35 100644
--- a/drivers/net/mlx4/en_tx.c
+++ b/drivers/net/mlx4/en_tx.c
@@ -819,7 +819,6 @@ int mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
819 /* Ring doorbell! */ 819 /* Ring doorbell! */
820 wmb(); 820 wmb();
821 writel(ring->doorbell_qpn, mdev->uar_map + MLX4_SEND_DOORBELL); 821 writel(ring->doorbell_qpn, mdev->uar_map + MLX4_SEND_DOORBELL);
822 dev->trans_start = jiffies;
823 822
824 /* Poll CQ here */ 823 /* Poll CQ here */
825 mlx4_en_xmit_poll(priv, tx_ind); 824 mlx4_en_xmit_poll(priv, tx_ind);
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index 7e28b4610122..c9a30d3a66fb 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -2892,7 +2892,6 @@ again:
2892 tx->stop_queue++; 2892 tx->stop_queue++;
2893 netif_tx_stop_queue(netdev_queue); 2893 netif_tx_stop_queue(netdev_queue);
2894 } 2894 }
2895 dev->trans_start = jiffies;
2896 return 0; 2895 return 0;
2897 2896
2898abort_linearize: 2897abort_linearize:
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 50477f5c3ecb..98737ef72936 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -1496,7 +1496,6 @@ netxen_nic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1496 netxen_nic_update_cmd_producer(adapter, tx_ring, producer); 1496 netxen_nic_update_cmd_producer(adapter, tx_ring, producer);
1497 1497
1498 adapter->stats.xmitcalled++; 1498 adapter->stats.xmitcalled++;
1499 netdev->trans_start = jiffies;
1500 1499
1501 return NETDEV_TX_OK; 1500 return NETDEV_TX_OK;
1502 1501
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index c92ced247947..0b0778d9919c 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -2108,7 +2108,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
2108 wmb(); 2108 wmb();
2109 2109
2110 ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg); 2110 ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
2111 ndev->trans_start = jiffies;
2112 QPRINTK(qdev, TX_QUEUED, DEBUG, "tx queued, slot %d, len %d\n", 2111 QPRINTK(qdev, TX_QUEUED, DEBUG, "tx queued, slot %d, len %d\n",
2113 tx_ring->prod_idx, skb->len); 2112 tx_ring->prod_idx, skb->len);
2114 2113
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index 80562ea77de3..2bc73ede4312 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -4299,7 +4299,6 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
4299 s2io_stop_tx_queue(sp, fifo->fifo_no); 4299 s2io_stop_tx_queue(sp, fifo->fifo_no);
4300 } 4300 }
4301 mac_control->stats_info->sw_stat.mem_allocated += skb->truesize; 4301 mac_control->stats_info->sw_stat.mem_allocated += skb->truesize;
4302 dev->trans_start = jiffies;
4303 spin_unlock_irqrestore(&fifo->tx_lock, flags); 4302 spin_unlock_irqrestore(&fifo->tx_lock, flags);
4304 4303
4305 if (sp->config.intr_type == MSI_X) 4304 if (sp->config.intr_type == MSI_X)
diff --git a/drivers/net/sfc/selftest.c b/drivers/net/sfc/selftest.c
index 043795715955..b67ccca3fc1a 100644
--- a/drivers/net/sfc/selftest.c
+++ b/drivers/net/sfc/selftest.c
@@ -438,6 +438,7 @@ static int efx_begin_loopback(struct efx_tx_queue *tx_queue)
438 kfree_skb(skb); 438 kfree_skb(skb);
439 return -EPIPE; 439 return -EPIPE;
440 } 440 }
441 efx->net_dev->trans_start = jiffies;
441 } 442 }
442 443
443 return 0; 444 return 0;
diff --git a/drivers/net/sfc/tx.c b/drivers/net/sfc/tx.c
index d6681edb7014..14a14788566c 100644
--- a/drivers/net/sfc/tx.c
+++ b/drivers/net/sfc/tx.c
@@ -360,13 +360,6 @@ inline int efx_xmit(struct efx_nic *efx,
360 360
361 /* Map fragments for DMA and add to TX queue */ 361 /* Map fragments for DMA and add to TX queue */
362 rc = efx_enqueue_skb(tx_queue, skb); 362 rc = efx_enqueue_skb(tx_queue, skb);
363 if (unlikely(rc != NETDEV_TX_OK))
364 goto out;
365
366 /* Update last TX timer */
367 efx->net_dev->trans_start = jiffies;
368
369 out:
370 return rc; 363 return rc;
371} 364}
372 365
diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c
index 7f4a9683ba1e..093807a182f2 100644
--- a/drivers/net/tehuti.c
+++ b/drivers/net/tehuti.c
@@ -1718,8 +1718,9 @@ static int bdx_tx_transmit(struct sk_buff *skb, struct net_device *ndev)
1718 WRITE_REG(priv, f->m.reg_WPTR, f->m.wptr & TXF_WPTR_WR_PTR); 1718 WRITE_REG(priv, f->m.reg_WPTR, f->m.wptr & TXF_WPTR_WR_PTR);
1719 1719
1720#endif 1720#endif
1721 ndev->trans_start = jiffies; 1721#ifdef BDX_LLTX
1722 1722 ndev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
1723#endif
1723 priv->net_stats.tx_packets++; 1724 priv->net_stats.tx_packets++;
1724 priv->net_stats.tx_bytes += skb->len; 1725 priv->net_stats.tx_bytes += skb->len;
1725 1726
diff --git a/drivers/net/vxge/vxge-main.c b/drivers/net/vxge/vxge-main.c
index b7f08f3e524b..6c838b3e063a 100644
--- a/drivers/net/vxge/vxge-main.c
+++ b/drivers/net/vxge/vxge-main.c
@@ -677,7 +677,7 @@ vxge_xmit_compl(struct __vxge_hw_fifo *fifo_hw, void *dtr,
677 return VXGE_HW_OK; 677 return VXGE_HW_OK;
678} 678}
679 679
680/* select a vpath to trasmit the packet */ 680/* select a vpath to transmit the packet */
681static u32 vxge_get_vpath_no(struct vxgedev *vdev, struct sk_buff *skb, 681static u32 vxge_get_vpath_no(struct vxgedev *vdev, struct sk_buff *skb,
682 int *do_lock) 682 int *do_lock)
683{ 683{
@@ -992,7 +992,9 @@ vxge_xmit(struct sk_buff *skb, struct net_device *dev)
992 VXGE_HW_FIFO_TXD_TX_CKO_UDP_EN); 992 VXGE_HW_FIFO_TXD_TX_CKO_UDP_EN);
993 993
994 vxge_hw_fifo_txdl_post(fifo_hw, dtr); 994 vxge_hw_fifo_txdl_post(fifo_hw, dtr);
995 dev->trans_start = jiffies; 995#ifdef NETIF_F_LLTX
996 dev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
997#endif
996 spin_unlock_irqrestore(&fifo->tx_lock, flags); 998 spin_unlock_irqrestore(&fifo->tx_lock, flags);
997 999
998 VXGE_COMPLETE_VPATH_TX(fifo); 1000 VXGE_COMPLETE_VPATH_TX(fifo);