diff options
author | David S. Miller <davem@davemloft.net> | 2008-03-23 03:35:12 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-23 03:35:12 -0700 |
commit | da990a2402aeaee84837f29054c4628eb02f7493 (patch) | |
tree | 098506e67860ec0f5d58f707e0ee966db70b7a74 /drivers/net | |
parent | 2572c149a2f52232ce690ddb9c6fd0c90ffd61cd (diff) | |
download | linux-3.10-da990a2402aeaee84837f29054c4628eb02f7493.tar.gz linux-3.10-da990a2402aeaee84837f29054c4628eb02f7493.tar.bz2 linux-3.10-da990a2402aeaee84837f29054c4628eb02f7493.zip |
[SUNGEM]: Fix NAPI assertion failure.
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>
Diffstat (limited to 'drivers/net')
-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 97212799c51..4291458955e 100644 --- a/drivers/net/sungem.c +++ b/drivers/net/sungem.c @@ -912,7 +912,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; |