Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

+1 -1
+1 -1
drivers/net/sungem.c
··· 912 912 * rx ring - must call napi_disable(), which 913 913 * schedule_timeout()'s if polling is already disabled. 914 914 */ 915 - work_done += gem_rx(gp, budget); 915 + work_done += gem_rx(gp, budget - work_done); 916 916 917 917 if (work_done >= budget) 918 918 return work_done;