Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a8cc21f64648073e443365d113c55755b92622a6
Commit:     a8cc21f64648073e443365d113c55755b92622a6
Parent:     3c34ac36ac1084e571ef9b6fb1d6a5b10ccc1fd0
Author:     Krishna Kumar <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 30 12:30:16 2008 +0530
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Mon Feb 11 10:44:28 2008 -0500

    Optimize cxgb3 xmit path (a bit)
    
        1. Add common code for stopping queue.
        2. No need to call netif_stop_queue followed by netif_wake_queue (and
           infact a netif_start_queue could have been used instead), instead
           call stop_queue if required, and remove code under USE_GTS macro.
        3. There is no need to check for netif_queue_stopped, as the network
           core guarantees that for us (I am sure every driver could remove
           that check, eg e1000 - I have tested that path a few billion times
           with about a few hundred thousand qstops but the condition never
           hit even once).
    
    Signed-off-by: Krishna Kumar <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/cxgb3/sge.c |   35 +++++++++++++++--------------------
 1 files changed, 15 insertions(+), 20 deletions(-)

diff --git a/drivers/net/cxgb3/sge.c b/drivers/net/cxgb3/sge.c
index 9ca8c66..979f3fc 100644
--- a/drivers/net/cxgb3/sge.c
+++ b/drivers/net/cxgb3/sge.c
@@ -1059,6 +1059,14 @@ static void write_tx_pkt_wr(struct adapter *adap, struct 
sk_buff *skb,
                         htonl(V_WR_TID(q->token)));
 }
 
+static inline void t3_stop_queue(struct net_device *dev, struct sge_qset *qs,
+                                struct sge_txq *q)
+{
+       netif_stop_queue(dev);
+       set_bit(TXQ_ETH, &qs->txq_stopped);
+       q->stops++;
+}
+
 /**
  *     eth_xmit - add a packet to the Ethernet Tx queue
  *     @skb: the packet
@@ -1090,31 +1098,18 @@ int t3_eth_xmit(struct sk_buff *skb, struct net_device 
*dev)
        ndesc = calc_tx_descs(skb);
 
        if (unlikely(credits < ndesc)) {
-               if (!netif_queue_stopped(dev)) {
-                       netif_stop_queue(dev);
-                       set_bit(TXQ_ETH, &qs->txq_stopped);
-                       q->stops++;
-                       dev_err(&adap->pdev->dev,
-                               "%s: Tx ring %u full while queue awake!\n",
-                               dev->name, q->cntxt_id & 7);
-               }
+               t3_stop_queue(dev, qs, q);
+               dev_err(&adap->pdev->dev,
+                       "%s: Tx ring %u full while queue awake!\n",
+                       dev->name, q->cntxt_id & 7);
                spin_unlock(&q->lock);
                return NETDEV_TX_BUSY;
        }
 
        q->in_use += ndesc;
-       if (unlikely(credits - ndesc < q->stop_thres)) {
-               q->stops++;
-               netif_stop_queue(dev);
-               set_bit(TXQ_ETH, &qs->txq_stopped);
-#if !USE_GTS
-               if (should_restart_tx(q) &&
-                   test_and_clear_bit(TXQ_ETH, &qs->txq_stopped)) {
-                       q->restarts++;
-                       netif_wake_queue(dev);
-               }
-#endif
-       }
+       if (unlikely(credits - ndesc < q->stop_thres))
+               if (USE_GTS || !should_restart_tx(q))
+                       t3_stop_queue(dev, qs, q);
 
        gen = q->gen;
        q->unacked += ndesc;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to