diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2009-05-27 15:26:37 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-05-29 04:46:26 -0400 |
commit | 28679751a924c11f7135641f26e99249385de5b4 (patch) | |
tree | 79e05e9ee10e62b02c52e3a5af11dd3dfa28a0e2 /drivers | |
parent | 3f1f39c42b24d5c20eb593ce80b9c4d5ec1e2148 (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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/benet/be_main.c | 2 | ||||
-rw-r--r-- | drivers/net/bnx2x_main.c | 1 | ||||
-rw-r--r-- | drivers/net/chelsio/sge.c | 1 | ||||
-rw-r--r-- | drivers/net/cxgb3/sge.c | 1 | ||||
-rw-r--r-- | drivers/net/enic/enic_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ixgb/ixgb_main.c | 1 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 1 | ||||
-rw-r--r-- | drivers/net/mlx4/en_tx.c | 1 | ||||
-rw-r--r-- | drivers/net/myri10ge/myri10ge.c | 1 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_main.c | 1 | ||||
-rw-r--r-- | drivers/net/qlge/qlge_main.c | 1 | ||||
-rw-r--r-- | drivers/net/s2io.c | 1 | ||||
-rw-r--r-- | drivers/net/sfc/selftest.c | 1 | ||||
-rw-r--r-- | drivers/net/sfc/tx.c | 7 | ||||
-rw-r--r-- | drivers/net/tehuti.c | 5 | ||||
-rw-r--r-- | drivers/net/vxge/vxge-main.c | 6 |
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 | ||
1881 | send: | 1881 | send: |
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 | ||
2898 | abort_linearize: | 2897 | abort_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 */ |
681 | static u32 vxge_get_vpath_no(struct vxgedev *vdev, struct sk_buff *skb, | 681 | static 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); |