Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1395012

[PATCH 11/12] net-next: mediatek: only wake the queue if it is stopped

From John Crispin <john@phrozen.org>
Newsgroups linux.kernel
Subject [PATCH 11/12] net-next: mediatek: only wake the queue if it is stopped
Date 2016-05-05 12:00 +0200
Message-ID <rvoeD-626-25@gated-at.bofh.it> (permalink)
References <rvnLA-5Kz-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


The current code unconditionally wakes up the queue at the end of each
tx_poll action. Change the code to only wake up the queues if any of
them have actually been stopped before.

Signed-off-by: John Crispin <john@phrozen.org>
---
 drivers/net/ethernet/mediatek/mtk_eth_soc.c |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 81155a1..2d3c464 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -701,6 +701,20 @@ static inline int mtk_cal_txd_req(struct sk_buff *skb)
 	return nfrags;
 }
 
+static int mtk_queue_stopped(struct mtk_eth *eth)
+{
+	int i;
+
+	for (i = 0; i < MTK_MAC_COUNT; i++) {
+		if (!eth->netdev[i])
+			continue;
+		if (netif_queue_stopped(eth->netdev[i]))
+			return 1;
+	}
+
+	return 0;
+}
+
 static void mtk_wake_queue(struct mtk_eth *eth)
 {
 	int i;
@@ -945,7 +959,8 @@ static int mtk_poll_tx(struct mtk_eth *eth, int budget, bool *tx_again)
 	if (!total)
 		return 0;
 
-	if (atomic_read(&ring->free_count) > ring->thresh)
+	if (mtk_queue_stopped(eth) &&
+	    (atomic_read(&ring->free_count) > ring->thresh))
 		mtk_wake_queue(eth);
 
 	return total;
-- 
1.7.10.4

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/12] net-next: mediatek: bug fixes and tx stall fixes John Crispin <john@phrozen.org> - 2016-05-05 11:30 +0200
  [PATCH 01/12] net-next: mediatek: fix DQL support John Crispin <john@phrozen.org> - 2016-05-05 11:30 +0200
  [PATCH 09/12] net-next: mediatek: increase watchdog_timeo John Crispin <john@phrozen.org> - 2016-05-05 11:30 +0200
  [PATCH 06/12] net-next: mediatek: add next data pointer coherency protection John Crispin <john@phrozen.org> - 2016-05-05 11:30 +0200
  [PATCH 04/12] net-next: mediatek: invalid buffer lookup in mtk_tx_map() John Crispin <john@phrozen.org> - 2016-05-05 11:40 +0200
  [PATCH 08/12] net-next: mediatek: fix threshold value John Crispin <john@phrozen.org> - 2016-05-05 11:40 +0200
  [PATCH 03/12] net-next: mediatek: fix missing free of scratch memory John Crispin <john@phrozen.org> - 2016-05-05 11:40 +0200
  [PATCH 02/12] net-next: mediatek: add missing return code check John Crispin <john@phrozen.org> - 2016-05-05 11:40 +0200
  [PATCH 12/12] net-next: mediatek: remove superfluous queue wake up call John Crispin <john@phrozen.org> - 2016-05-05 12:00 +0200
  [PATCH 10/12] net-next: mediatek: fix off by one in the TX ring allocation John Crispin <john@phrozen.org> - 2016-05-05 12:00 +0200
  [PATCH 11/12] net-next: mediatek: only wake the queue if it is stopped John Crispin <john@phrozen.org> - 2016-05-05 12:00 +0200
  Re: [PATCH 00/12] net-next: mediatek: bug fixes and tx stall fixes Andrew Lunn <andrew@lunn.ch> - 2016-05-05 14:30 +0200

csiph-web