net: dont update dev->trans_start
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 28 May 2009 00:00:41 +0000 (00:00 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 29 May 2009 08:46:27 +0000 (01:46 -0700)
Second round of drivers for Gb cards (and NIU one I forgot in the 10GB round)

Now that core network takes care of trans_start updates, dont do it
in drivers themselves, if possible. Drivers can avoid one cache miss
(on dev->trans_start) in their start_xmit() handler.

Exceptions are NETIF_F_LLTX drivers

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
21 files changed:
drivers/net/acenic.c
drivers/net/atl1c/atl1c_main.c
drivers/net/atl1e/atl1e_main.c
drivers/net/atlx/atl1.c
drivers/net/bnx2.c
drivers/net/dl2k.c
drivers/net/e1000/e1000_main.c
drivers/net/e1000e/netdev.c
drivers/net/hamachi.c
drivers/net/igb/igb_main.c
drivers/net/igbvf/netdev.c
drivers/net/jme.c
drivers/net/niu.c
drivers/net/ns83820.c
drivers/net/qla3xxx.c
drivers/net/r8169.c
drivers/net/sis190.c
drivers/net/skge.c
drivers/net/sky2.c
drivers/net/tg3.c
drivers/net/yellowfin.c

index 57bc7152785050b893cad09fd85b2f639daf1696..08419ee1029069a60260156b202710d5d4cd7d3b 100644 (file)
@@ -2573,7 +2573,6 @@ restart:
                        netif_wake_queue(dev);
        }
 
-       dev->trans_start = jiffies;
        return NETDEV_TX_OK;
 
 overflow:
index fc1092b835d28fa0417b2a13ecf1ee4c6108acdc..ac76136d70f9e965962805ce1c72c26582d174a0 100644 (file)
@@ -2113,7 +2113,6 @@ static int atl1c_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        atl1c_tx_map(adapter, skb, tpd, type);
        atl1c_tx_queue(adapter, skb, tpd, type);
 
-       netdev->trans_start = jiffies;
        spin_unlock_irqrestore(&adapter->tx_lock, flags);
        return NETDEV_TX_OK;
 }
index c271b7537fab588a7454bba2f682982275efa79c..a01383d53a03a379de558b45f42476e23d848f3a 100644 (file)
@@ -1893,7 +1893,7 @@ static int atl1e_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        atl1e_tx_map(adapter, skb, tpd);
        atl1e_tx_queue(adapter, tpd_req, tpd);
 
-       netdev->trans_start = jiffies;
+       netdev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */
        spin_unlock_irqrestore(&adapter->tx_lock, flags);
        return NETDEV_TX_OK;
 }
index 13f0bdc32449565e1e13966927f872281aa88550..fccfbf2cf932bf563fc7cadcc01c8b0b6dfa9e4f 100644 (file)
@@ -2431,7 +2431,6 @@ static int atl1_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        atl1_tx_queue(adapter, count, ptpd);
        atl1_update_mailbox(adapter);
        mmiowb();
-       netdev->trans_start = jiffies;
        return NETDEV_TX_OK;
 }
 
index c37acc1d10acccb1ecebfafca0c9af7d07e2c37f..83ee0f53f2d28630a68b91de166996b8ae318224 100644 (file)
@@ -6211,7 +6211,6 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
        mmiowb();
 
        txr->tx_prod = prod;
-       dev->trans_start = jiffies;
 
        if (unlikely(bnx2_tx_avail(bp, txr) <= MAX_SKB_FRAGS)) {
                netif_tx_stop_queue(txq);
index 4a1b554654ebe573a159e515a7795b22af049a88..895d72143ee049757c3750ae096cad3c8387c02a 100644 (file)
@@ -539,7 +539,7 @@ rio_tx_timeout (struct net_device *dev)
                dev->name, readl (ioaddr + TxStatus));
        rio_free_tx(dev, 0);
        dev->if_port = 0;
-       dev->trans_start = jiffies;
+       dev->trans_start = jiffies; /* prevent tx timeout */
 }
 
  /* allocate and initialize Tx and Rx descriptors */
@@ -610,7 +610,7 @@ start_xmit (struct sk_buff *skb, struct net_device *dev)
 
        if (np->link_status == 0) {     /* Link Down */
                dev_kfree_skb(skb);
-               return 0;
+               return NETDEV_TX_OK;
        }
        ioaddr = dev->base_addr;
        entry = np->cur_tx % TX_RING_SIZE;
@@ -665,9 +665,7 @@ start_xmit (struct sk_buff *skb, struct net_device *dev)
                writel (0, dev->base_addr + TFDListPtr1);
        }
 
-       /* NETDEV WATCHDOG timer */
-       dev->trans_start = jiffies;
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 static irqreturn_t
index 9a32d0c73cb359993305dfab3d7fa61ff20b1c1c..79fe1ee3da5230c8fff5c4c26af3ce12ebbb90e4 100644 (file)
@@ -3365,7 +3365,6 @@ static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 
        if (count) {
                e1000_tx_queue(adapter, tx_ring, tx_flags, count);
-               netdev->trans_start = jiffies;
                /* Make sure there is space in the ring for the next send. */
                e1000_maybe_stop_tx(netdev, tx_ring, MAX_SKB_FRAGS + 2);
 
index ccaaee0951cfb37cb498a15a9f2d89b78daa4174..f012cc62eff337b959913d6317fecd1714fb8094 100644 (file)
@@ -4149,7 +4149,6 @@ static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        count = e1000_tx_map(adapter, skb, first, max_per_txd, nr_frags, mss);
        if (count) {
                e1000_tx_queue(adapter, tx_flags, count);
-               netdev->trans_start = jiffies;
                /* Make sure there is space in the ring for the next send. */
                e1000_maybe_stop_tx(netdev, MAX_SKB_FRAGS + 2);
 
index 310ee035067c3ff54002bf322e230bcbe6540493..26151fa35df5891b43fe46a86b0149efcbc9e6c1 100644 (file)
@@ -1163,7 +1163,7 @@ static void hamachi_tx_timeout(struct net_device *dev)
        hmp->rx_ring[RX_RING_SIZE-1].status_n_length |= cpu_to_le32(DescEndRing);
 
        /* Trigger an immediate transmit demand. */
-       dev->trans_start = jiffies;
+       dev->trans_start = jiffies; /* prevent tx timeout */
        hmp->stats.tx_errors++;
 
        /* Restart the chip's Tx/Rx processes . */
@@ -1364,7 +1364,6 @@ static int hamachi_start_xmit(struct sk_buff *skb, struct net_device *dev)
                hmp->tx_full = 1;
                netif_stop_queue(dev);
        }
-       dev->trans_start = jiffies;
 
        if (hamachi_debug > 4) {
                printk(KERN_DEBUG "%s: Hamachi transmit frame #%d queued in slot %d.\n",
index 8e93750d5120790276c066b9dda5b7c6b7c4984f..958b2879da485d5db4d9730c889a2603a8ce76db 100644 (file)
@@ -3344,7 +3344,6 @@ static int igb_xmit_frame_ring_adv(struct sk_buff *skb,
        if (count) {
                igb_tx_queue_adv(adapter, tx_ring, tx_flags, count,
                                 skb->len, hdr_len);
-               netdev->trans_start = jiffies;
                /* Make sure there is space in the ring for the next send. */
                igb_maybe_stop_tx(netdev, tx_ring, MAX_SKB_FRAGS + 4);
        } else {
index 44a8eef03a74f028de43b121482929ea135008e7..5f7ba1a4990b21e973bf4dcb09e7a66b6c9aadeb 100644 (file)
@@ -2270,7 +2270,6 @@ static int igbvf_xmit_frame_ring_adv(struct sk_buff *skb,
        if (count) {
                igbvf_tx_queue_adv(adapter, tx_ring, tx_flags, count,
                                   skb->len, hdr_len);
-               netdev->trans_start = jiffies;
                /* Make sure there is space in the ring for the next send. */
                igbvf_maybe_stop_tx(netdev, MAX_SKB_FRAGS + 4);
        } else {
index 621a7c0c46ba7360e314878e1bd7d5a924673132..1e3c63d67b9177b8d22ffd55663529d3aa1ff976 100644 (file)
@@ -1939,7 +1939,6 @@ jme_start_xmit(struct sk_buff *skb, struct net_device *netdev)
                                TXCS_SELECT_QUEUE0 |
                                TXCS_QUEUE0S |
                                TXCS_ENABLE);
-       netdev->trans_start = jiffies;
 
        tx_dbg(jme, "xmit: %d+%d@%lu\n", idx,
                        skb_shinfo(skb)->nr_frags + 2,
index 0d9de5ac413031a6f6e366ff891dd8cd80d02068..edac3a0b02d6b50b56e591239126cddaf1cdab83 100644 (file)
@@ -6777,8 +6777,6 @@ static int niu_start_xmit(struct sk_buff *skb, struct net_device *dev)
                        netif_tx_wake_queue(txq);
        }
 
-       dev->trans_start = jiffies;
-
 out:
        return NETDEV_TX_OK;
 
index d531614a90b551135de193fb34800a0f7b7a2d60..940962ae8f230fe865acfa6cad4dc9a5f10697e0 100644 (file)
@@ -1204,9 +1204,7 @@ again:
        if (stopped && (dev->tx_done_idx != tx_done_idx) && start_tx_okay(dev))
                netif_start_queue(ndev);
 
-       /* set the transmit start time to catch transmit timeouts */
-       ndev->trans_start = jiffies;
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 static void ns83820_update_stats(struct ns83820 *dev)
@@ -1626,7 +1624,7 @@ static void ns83820_tx_watch(unsigned long data)
                );
 #endif
 
-       if (time_after(jiffies, ndev->trans_start + 1*HZ) &&
+       if (time_after(jiffies, dev_trans_start(ndev) + 1*HZ) &&
            dev->tx_done_idx != dev->tx_free_idx) {
                printk(KERN_DEBUG "%s: ns83820_tx_watch: %u %u %d\n",
                        ndev->name,
index cadc32c94c1e64da93b48ca26fb7ce448be88ef6..8a823ecc99a90568d55cdd10fd30c72cddb92906 100644 (file)
@@ -2617,7 +2617,6 @@ static int ql3xxx_send(struct sk_buff *skb, struct net_device *ndev)
                            &port_regs->CommonRegs.reqQProducerIndex,
                            qdev->req_producer_index);
 
-       ndev->trans_start = jiffies;
        if (netif_msg_tx_queued(qdev))
                printk(KERN_DEBUG PFX "%s: tx queued, slot %d, len %d\n",
                       ndev->name, qdev->req_producer_index, skb->len);
index 0ec0605bcebdcc961669aea6d38d449dfe5f04c4..7fa88d2b4c99340f2c43f02ce98b938a757ed90c 100644 (file)
@@ -3279,8 +3279,6 @@ static int rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev)
        status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
        txd->opts1 = cpu_to_le32(status);
 
-       dev->trans_start = jiffies;
-
        tp->cur_tx += frags + 1;
 
        smp_wmb();
index 55ccd51d247efc3fa20cddd6616ddc8607637e17..13b8ca41d571eecc460019800c5124fd74f0ef6c 100644 (file)
@@ -1204,8 +1204,6 @@ static int sis190_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        SIS_W32(TxControl, 0x1a00 | CmdReset | CmdTxEnb);
 
-       dev->trans_start = jiffies;
-
        dirty_tx = tp->dirty_tx;
        if ((tp->cur_tx - NUM_TX_DESC) == dirty_tx) {
                netif_stop_queue(dev);
index c11cdd08ec5701ea2b4b9fe3dca92b1727ca2b69..60d502eef4fc36868d6fac2099f14ec852855497 100644 (file)
@@ -2837,8 +2837,6 @@ static int skge_xmit_frame(struct sk_buff *skb, struct net_device *dev)
                netif_stop_queue(dev);
        }
 
-       dev->trans_start = jiffies;
-
        return NETDEV_TX_OK;
 }
 
index a2ff9cb1e7ac55e4f4a80311d11326268345e87c..6b5946fe8ae2224720ab319aab6c415574e4382b 100644 (file)
@@ -1690,7 +1690,6 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev)
 
        sky2_put_idx(hw, txqaddr[sky2->port], sky2->tx_prod);
 
-       dev->trans_start = jiffies;
        return NETDEV_TX_OK;
 
 mapping_unwind:
index eb65e25989f303184d0a31ee080969e612504e71..a39b534fb43e6854f4b6adb2eb3405c1ae9d4a5f 100644 (file)
@@ -5194,9 +5194,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
        }
 
 out_unlock:
-       mmiowb();
-
-       dev->trans_start = jiffies;
+       mmiowb();
 
        return NETDEV_TX_OK;
 }
@@ -5407,9 +5405,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
        }
 
 out_unlock:
-       mmiowb();
-
-       dev->trans_start = jiffies;
+       mmiowb();
 
        return NETDEV_TX_OK;
 }
index 7477ffdcddb45923e0b74cda2fbd8a876c84c94d..3c7a5053f1da7ec054c81b9169ceb8109b7a19a1 100644 (file)
@@ -717,7 +717,7 @@ static void yellowfin_tx_timeout(struct net_device *dev)
        if (yp->cur_tx - yp->dirty_tx < TX_QUEUE_SIZE)
                netif_wake_queue (dev);         /* Typical path */
 
-       dev->trans_start = jiffies;
+       dev->trans_start = jiffies; /* prevent tx timeout */
        dev->stats.tx_errors++;
 }
 
@@ -876,7 +876,6 @@ static int yellowfin_start_xmit(struct sk_buff *skb, struct net_device *dev)
                netif_start_queue (dev);                /* Typical path */
        else
                yp->tx_full = 1;
-       dev->trans_start = jiffies;
 
        if (yellowfin_debug > 4) {
                printk(KERN_DEBUG "%s: Yellowfin transmit frame #%d queued in slot %d.\n",