net: dont update dev->trans_start in 10GB drivers
authorEric Dumazet <eric.dumazet@gmail.com>
Wed, 27 May 2009 19:26:37 +0000 (19:26 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 29 May 2009 08:46:26 +0000 (01:46 -0700)
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>
16 files changed:
drivers/net/benet/be_main.c
drivers/net/bnx2x_main.c
drivers/net/chelsio/sge.c
drivers/net/cxgb3/sge.c
drivers/net/enic/enic_main.c
drivers/net/ixgb/ixgb_main.c
drivers/net/ixgbe/ixgbe_main.c
drivers/net/mlx4/en_tx.c
drivers/net/myri10ge/myri10ge.c
drivers/net/netxen/netxen_nic_main.c
drivers/net/qlge/qlge_main.c
drivers/net/s2io.c
drivers/net/sfc/selftest.c
drivers/net/sfc/tx.c
drivers/net/tehuti.c
drivers/net/vxge/vxge-main.c

index ae2f6b58ba25532ff659fc2910aa6859bb5b4160..5f17d80300ae246886cd97749932fe52ce142116 100644 (file)
@@ -478,8 +478,6 @@ static int be_xmit(struct sk_buff *skb, struct net_device *netdev)
 
        be_txq_notify(&adapter->ctrl, txq->id, wrb_cnt);
 
-       netdev->trans_start = jiffies;
-
        be_tx_stats_update(adapter, wrb_cnt, copied, stopped);
        return NETDEV_TX_OK;
 }
index e01539c33b8a7a28e7ef4cf610ede9ba03fe1f00..fbf1352e9c1cbd5701202a65ed95f962c6e6d486 100644 (file)
@@ -10617,7 +10617,6 @@ static int bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
        mmiowb();
 
        fp->tx_bd_prod += nbd;
-       dev->trans_start = jiffies;
 
        if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) {
                /* We want bnx2x_tx_int to "see" the updated tx_bd_prod
index 5e97a1a71d887a92817d180aa8111f5a5034e098..3711d64e45effadfe4569c3cb37c7e40e476c414 100644 (file)
@@ -1879,7 +1879,6 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
                cpl->vlan_valid = 0;
 
 send:
-       dev->trans_start = jiffies;
        ret = t1_sge_tx(skb, adapter, 0, dev);
 
        /* If transmit busy, and we reallocated skb's due to headroom limit,
index 73d569e758ec2fa0c65aae0ab8da11f8ad527d80..49e64af7b093a6fbcd5e25caba4f38ae417e863c 100644 (file)
@@ -1286,7 +1286,6 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device *dev)
        if (vlan_tx_tag_present(skb) && pi->vlan_grp)
                qs->port_stats[SGE_PSTAT_VLANINS]++;
 
-       dev->trans_start = jiffies;
        spin_unlock(&q->lock);
 
        /*
index 9080f07da8fe01f23e81a52eef0690151017b47c..8005b602f7768ae1fb98a2dcf9b863a4d96ae3ce 100644 (file)
@@ -661,8 +661,6 @@ static int enic_hard_start_xmit(struct sk_buff *skb, struct net_device *netdev)
        if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + 1)
                netif_stop_queue(netdev);
 
-       netdev->trans_start = jiffies;
-
        spin_unlock_irqrestore(&enic->wq_lock[0], flags);
 
        return NETDEV_TX_OK;
index 04cb81a739c2e2146988cb39d10f868776d9364b..6eb7f37a113b4b52ed28aa2f32f267738733ebf1 100644 (file)
@@ -1488,7 +1488,6 @@ ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 
        if (count) {
                ixgb_tx_queue(adapter, count, vlan_id, tx_flags);
-               netdev->trans_start = jiffies;
                /* Make sure there is space in the ring for the next send. */
                ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED);
 
index dff1da8ae5c4fe563f2ccd252371e67ddb6f1ce7..924aa5ed02cee9c0068869ed532b5f57de0abbcc 100644 (file)
@@ -4863,7 +4863,6 @@ static int ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        if (count) {
                ixgbe_tx_queue(adapter, tx_ring, tx_flags, count, skb->len,
                               hdr_len);
-               netdev->trans_start = jiffies;
                ixgbe_maybe_stop_tx(netdev, tx_ring, DESC_NEEDED);
 
        } else {
index ac6fc499b280e86067069c7beafceeb5dfbe990e..1c83a96fde359e725d6d586780e0bdd70cbbd711 100644 (file)
@@ -819,7 +819,6 @@ int mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
        /* Ring doorbell! */
        wmb();
        writel(ring->doorbell_qpn, mdev->uar_map + MLX4_SEND_DOORBELL);
-       dev->trans_start = jiffies;
 
        /* Poll CQ here */
        mlx4_en_xmit_poll(priv, tx_ind);
index 7e28b4610122add23d2044dc8089a8679cdbb324..c9a30d3a66fb3c2a40ff4a0a39b93a4e7d4363a8 100644 (file)
@@ -2892,7 +2892,6 @@ again:
                tx->stop_queue++;
                netif_tx_stop_queue(netdev_queue);
        }
-       dev->trans_start = jiffies;
        return 0;
 
 abort_linearize:
index 50477f5c3ecbd0b70fe6a790111b72bc0074cea2..98737ef72936a34cef220d06cdfb30be0d941424 100644 (file)
@@ -1496,7 +1496,6 @@ netxen_nic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        netxen_nic_update_cmd_producer(adapter, tx_ring, producer);
 
        adapter->stats.xmitcalled++;
-       netdev->trans_start = jiffies;
 
        return NETDEV_TX_OK;
 
index c92ced2479478729e5e329463f7acd1e49599f90..0b0778d9919c3e9bfb1a5dee98998344423657d1 100644 (file)
@@ -2108,7 +2108,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
        wmb();
 
        ql_write_db_reg(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
-       ndev->trans_start = jiffies;
        QPRINTK(qdev, TX_QUEUED, DEBUG, "tx queued, slot %d, len %d\n",
                tx_ring->prod_idx, skb->len);
 
index 80562ea77de3a6d157c14d5f8cd60d69b440d2b7..2bc73ede4312ff63159079bd00f5949f2b4d1ec5 100644 (file)
@@ -4299,7 +4299,6 @@ static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
                s2io_stop_tx_queue(sp, fifo->fifo_no);
        }
        mac_control->stats_info->sw_stat.mem_allocated += skb->truesize;
-       dev->trans_start = jiffies;
        spin_unlock_irqrestore(&fifo->tx_lock, flags);
 
        if (sp->config.intr_type == MSI_X)
index 043795715955dbc671aeb2755104e0ebad51e261..b67ccca3fc1a07920c9d7a3e6cecc9f3653eebe9 100644 (file)
@@ -438,6 +438,7 @@ static int efx_begin_loopback(struct efx_tx_queue *tx_queue)
                        kfree_skb(skb);
                        return -EPIPE;
                }
+               efx->net_dev->trans_start = jiffies;
        }
 
        return 0;
index d6681edb7014d799e92ab3978abe2e38c6fd664a..14a14788566c6a4962413eb105f8da6739ea8e77 100644 (file)
@@ -360,13 +360,6 @@ inline int efx_xmit(struct efx_nic *efx,
 
        /* Map fragments for DMA and add to TX queue */
        rc = efx_enqueue_skb(tx_queue, skb);
-       if (unlikely(rc != NETDEV_TX_OK))
-               goto out;
-
-       /* Update last TX timer */
-       efx->net_dev->trans_start = jiffies;
-
- out:
        return rc;
 }
 
index 7f4a9683ba1e4962ebcf08025cce066383ec0e0d..093807a182f2b100c6a9028fa2aedd859151eb39 100644 (file)
@@ -1718,8 +1718,9 @@ static int bdx_tx_transmit(struct sk_buff *skb, struct net_device *ndev)
        WRITE_REG(priv, f->m.reg_WPTR, f->m.wptr & TXF_WPTR_WR_PTR);
 
 #endif
-       ndev->trans_start = jiffies;
-
+#ifdef BDX_LLTX
+       ndev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
+#endif
        priv->net_stats.tx_packets++;
        priv->net_stats.tx_bytes += skb->len;
 
index b7f08f3e524b512331a570de319a1578ea97a88a..6c838b3e063a6fc6905e1eb6b429d0472b12a2e9 100644 (file)
@@ -677,7 +677,7 @@ vxge_xmit_compl(struct __vxge_hw_fifo *fifo_hw, void *dtr,
        return VXGE_HW_OK;
 }
 
-/* select a vpath to trasmit the packet */
+/* select a vpath to transmit the packet */
 static u32 vxge_get_vpath_no(struct vxgedev *vdev, struct sk_buff *skb,
        int *do_lock)
 {
@@ -992,7 +992,9 @@ vxge_xmit(struct sk_buff *skb, struct net_device *dev)
                                        VXGE_HW_FIFO_TXD_TX_CKO_UDP_EN);
 
        vxge_hw_fifo_txdl_post(fifo_hw, dtr);
-       dev->trans_start = jiffies;
+#ifdef NETIF_F_LLTX
+       dev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
+#endif
        spin_unlock_irqrestore(&fifo->tx_lock, flags);
 
        VXGE_COMPLETE_VPATH_TX(fifo);