From: Jarek Poplawski Date: Tue, 16 Dec 2008 23:42:20 +0000 (-0800) Subject: drivers/net: starfire: Fix napi ->poll() weight handling X-Git-Tag: v2.6.27.11~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9d8ce36fb8cd27442e1b700f3068908a63de2fff;p=thirdparty%2Fkernel%2Fstable.git drivers/net: starfire: Fix napi ->poll() weight handling commit 9a3de25544dadab1971847f28f33b1cd0d1770a6 upstream. starfire napi ->poll() handler can return work == weight after calling netif_rx_complete() (if there is no more work). It is illegal and this patch fixes it. Reported-by: Alexander Huemer Tested-by: Alexander Huemer Signed-off-by: Jarek Poplawski Signed-off-by: David S. Miller Cc: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index 1d2ef8f477809..5a40f2d78beb1 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -1509,6 +1509,11 @@ static int __netdev_rx(struct net_device *dev, int *quota) desc->status = 0; np->rx_done = (np->rx_done + 1) % DONE_Q_SIZE; } + + if (*quota == 0) { /* out of rx quota */ + retcode = 1; + goto out; + } writew(np->rx_done, np->base + CompletionQConsumerIdx); out: