All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Fleming <afleming@freescale.com>
To: jeff@garzik.org
Cc: galak@kernel.crashing.org, netdev@vger.kernel.org,
	Andy Fleming <afleming@freescale.com>
Subject: [PATCH v2.6.29 14/14] gianfar: Continue polling until both tx and rx are empty
Date: Tue, 16 Dec 2008 17:21:07 -0600	[thread overview]
Message-ID: <1229469667-25002-15-git-send-email-afleming@freescale.com> (raw)
In-Reply-To: <1229469667-25002-14-git-send-email-afleming@freescale.com>

gfar_poll would declare polling done once the rx queue was empty,
but the tx queue could still have packets left.

Stolen mostly from the e1000 driver.

Signed-off-by: Andy Fleming <afleming@freescale.com>
---
 drivers/net/gianfar.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index b96aa52..6a087f6 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -1846,7 +1846,8 @@ static int gfar_poll(struct napi_struct *napi, int budget)
 {
 	struct gfar_private *priv = container_of(napi, struct gfar_private, napi);
 	struct net_device *dev = priv->dev;
-	int howmany;
+	int tx_cleaned = 0;
+	int rx_cleaned = 0;
 	unsigned long flags;
 
 	/* Clear IEVENT, so interrupts aren't called again
@@ -1855,13 +1856,16 @@ static int gfar_poll(struct napi_struct *napi, int budget)
 
 	/* If we fail to get the lock, don't bother with the TX BDs */
 	if (spin_trylock_irqsave(&priv->txlock, flags)) {
-		gfar_clean_tx_ring(dev);
+		tx_cleaned = gfar_clean_tx_ring(dev);
 		spin_unlock_irqrestore(&priv->txlock, flags);
 	}
 
-	howmany = gfar_clean_rx_ring(dev, budget);
+	rx_cleaned = gfar_clean_rx_ring(dev, budget);
 
-	if (howmany < budget) {
+	if (tx_cleaned)
+		return budget;
+
+	if (rx_cleaned < budget) {
 		netif_rx_complete(dev, napi);
 
 		/* Clear the halt bit in RSTAT */
@@ -1881,7 +1885,7 @@ static int gfar_poll(struct napi_struct *napi, int budget)
 		}
 	}
 
-	return howmany;
+	return rx_cleaned;
 }
 
 #ifdef CONFIG_NET_POLL_CONTROLLER
-- 
1.5.4.GIT


  reply	other threads:[~2008-12-16 23:21 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-16 23:20 [PATCH 0/14] gianfar improvements Andy Fleming
2008-12-16 23:20 ` [PATCH v2.6.29 01/14] gianfar: Use gfar_halt to stop DMA in gfar_probe Andy Fleming
2008-12-16 23:20   ` [PATCH v2.6.29 02/14] gianfar: Fix skb allocation error Andy Fleming
2008-12-16 23:20     ` [PATCH v2.6.29 03/14] gianfar: Convert gianfar to an of_platform_driver Andy Fleming
2008-12-16 23:20       ` [PATCH v2.6.29 04/14] gianfar: Optimize interrupt coalescing configuration Andy Fleming
2008-12-16 23:20         ` [PATCH v2.6.29 05/14] gianfar: Fix eTSEC configuration procedure Andy Fleming
2008-12-16 23:20           ` [PATCH v2.6.29 06/14] gianfar: Fix VLAN HW feature related frame/buffer size calculation Andy Fleming
2008-12-16 23:21             ` [PATCH v2.6.29 07/14] gianfar: Enable padding and Optimize the frame prepended bytes handling Andy Fleming
2008-12-16 23:21               ` [PATCH v2.6.29 08/14] gianfar: Remove unused gfar_add_fcb() function parameter Andy Fleming
2008-12-16 23:21                 ` [PATCH v2.6.29 09/14] gianfar: Add macros for stepping through BDs Andy Fleming
2008-12-16 23:21                   ` [PATCH v2.6.29 10/14] gianfar: Make all BD status writes 32-bit Andy Fleming
2008-12-16 23:21                     ` [PATCH v2.6.29 11/14] gianfar: Add Scatter Gather support Andy Fleming
2008-12-16 23:21                       ` [PATCH v2.6.29 12/14] gianfar: Use interface name in interrupt name to distinguish the source Andy Fleming
2008-12-16 23:21                         ` [PATCH v2.6.29 13/14] gianfar: Merge Tx and Rx interrupt for scheduling clean up ring Andy Fleming
2008-12-16 23:21                           ` Andy Fleming [this message]
2008-12-16 23:36                       ` [PATCH v2.6.29 11/14] gianfar: Add Scatter Gather support David Miller
2008-12-16 23:35                     ` [PATCH v2.6.29 10/14] gianfar: Make all BD status writes 32-bit David Miller
2008-12-16 23:33                   ` [PATCH v2.6.29 09/14] gianfar: Add macros for stepping through BDs David Miller
2008-12-16 23:33                 ` [PATCH v2.6.29 08/14] gianfar: Remove unused gfar_add_fcb() function parameter David Miller
2008-12-16 23:31               ` [PATCH v2.6.29 07/14] gianfar: Enable padding and Optimize the frame prepended bytes handling David Miller
2008-12-16 23:30             ` [PATCH v2.6.29 06/14] gianfar: Fix VLAN HW feature related frame/buffer size calculation David Miller
2008-12-16 23:30           ` [PATCH v2.6.29 05/14] gianfar: Fix eTSEC configuration procedure David Miller
2008-12-16 23:30         ` [PATCH v2.6.29 04/14] gianfar: Optimize interrupt coalescing configuration David Miller
2008-12-16 23:29       ` [PATCH v2.6.29 03/14] gianfar: Convert gianfar to an of_platform_driver David Miller
2008-12-16 23:28     ` [PATCH v2.6.29 02/14] gianfar: Fix skb allocation error David Miller
2008-12-16 23:25   ` [PATCH v2.6.29 01/14] gianfar: Use gfar_halt to stop DMA in gfar_probe David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1229469667-25002-15-git-send-email-afleming@freescale.com \
    --to=afleming@freescale.com \
    --cc=galak@kernel.crashing.org \
    --cc=jeff@garzik.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.