From bb574904ef8eb2603ef64236580b2db49cba2431 Mon Sep 17 00:00:00 2001 From: Andy Fleming Date: Wed, 17 Dec 2008 16:52:30 -0800 Subject: [PATCH] --- yaml --- r: 122763 b: refs/heads/master c: 42199884594bc336c9185441cbed99a9324dab34 h: refs/heads/master i: 122761: 204b35b973b69dc5f55eb468460cadb3dae4a33d 122759: 634bb432276f24159c1c3b6434fdf4d531a0fb81 v: v3 --- [refs] | 2 +- trunk/drivers/net/gianfar.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 67789e74d577..44f06cc168db 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8c7396aebb68994c0519e438eecdf4d5fa9c7844 +refs/heads/master: 42199884594bc336c9185441cbed99a9324dab34 diff --git a/trunk/drivers/net/gianfar.c b/trunk/drivers/net/gianfar.c index d243c9eea43a..13f49643ba0b 100644 --- a/trunk/drivers/net/gianfar.c +++ b/trunk/drivers/net/gianfar.c @@ -1843,7 +1843,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 @@ -1852,13 +1853,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 */ @@ -1878,7 +1882,7 @@ static int gfar_poll(struct napi_struct *napi, int budget) } } - return howmany; + return rx_cleaned; } #ifdef CONFIG_NET_POLL_CONTROLLER