diff options
author | David S. Miller <davem@davemloft.net> | 2008-04-06 23:37:08 -0700 |
---|---|---|
committer | Chris Wright <chrisw@sous-sol.org> | 2008-04-18 18:53:24 -0700 |
commit | d94e90a23b5f20d4aadf592d049a6de3c3260f07 (patch) | |
tree | 39ffb7bbb11d466687a8c22ec6c3b6788f95055e | |
parent | c4e67d75cd6944616acef4a079967d1d23c6a3bd (diff) | |
download | kernel-common-d94e90a23b5f20d4aadf592d049a6de3c3260f07.tar.gz kernel-common-d94e90a23b5f20d4aadf592d049a6de3c3260f07.tar.bz2 kernel-common-d94e90a23b5f20d4aadf592d049a6de3c3260f07.zip |
SUNGEM: Fix NAPI assertion failure.
Upstream commit: da990a2402aeaee84837f29054c4628eb02f7493
As reported by Johannes Berg:
I started getting this warning with recent kernels:
[ 773.908927] ------------[ cut here ]------------
[ 773.908954] Badness at net/core/dev.c:2204
...
If we loop more than once in gem_poll(), we'll
use more than the real budget in our gem_rx()
calls, thus eventually trigger the caller's
assertions in net_rx_action().
Subtract "work_done" from "budget" for the second
arg to gem_rx() to fix the bug.
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
-rw-r--r-- | drivers/net/sungem.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c index 68872142530b..6fac216e5bb7 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -910,7 +910,7 @@ static int gem_poll(struct napi_struct *napi, int budget) * rx ring - must call napi_disable(), which * schedule_timeout()'s if polling is already disabled. */ - work_done += gem_rx(gp, budget); + work_done += gem_rx(gp, budget - work_done); if (work_done >= budget) return work_done; |