Messages in this thread | | | Date | Mon, 15 Oct 2007 15:18:49 -0700 (PDT) | Subject | Re: WARNING: at net/core/dev.c:2161 net_rx_action() | From | David Miller <> |
| |
From: Ingo Molnar <mingo@elte.hu> Date: Tue, 16 Oct 2007 00:03:57 +0200
> * David Miller <davem@davemloft.net> wrote: > > > From: Ingo Molnar <mingo@elte.hu> > > Date: Mon, 15 Oct 2007 13:24:30 +0200 > > > > > got this warning with Linus' latest -git tree: > > > > > > WARNING: at net/core/dev.c:2161 net_rx_action() > > > [<80564db4>] net_rx_action+0xce/0x186 > > > [<8011ba98>] __do_softirq+0x6c/0xcf > > > [<8011bb2d>] do_softirq+0x32/0x36 > > > [<8011bcae>] irq_exit+0x35/0x40 > > > [<80104fdb>] do_IRQ+0x5c/0x71 > > > [<801048cd>] do_nmi+0x8f/0x238 > > > [<801033a3>] common_interrupt+0x23/0x30 > > > ======================= > > > > This is a driver bug, the work "budget" passed into a driver's > > ->poll() handler should never be exceeded. That's what this warning > > assertion is checking. > > > > What ethernet card is in your system and what driver is being used to > > drive it? > > it's forcedeth. > > i've checked nv_napi_poll(), and i dont see how it could return larger > than 'limit' number of packets. > > it could return packets == limit though: > > pkts = nv_rx_process_optimized(dev, budget); > ... > > if (pkts < budget) { > /* re-enable receive interrupts */ > spin_lock_irqsave(&np->lock, flags); > > __netif_rx_complete(dev, napi); > > ... > return pkts; > > shouldnt that be "pkts <= budget"? But even that shouldnt cause a larger > than limit return. Weird.
No, not in this case. The driver must only netif_rx_complete() if it consumed strictly less than "budget" worth of work.
> there are two networking cards in the system, the other one is a: > > eth1: RealTek RTL8139 at 0xf080e000, 00:c0:df:03:68:5d, IRQ 11 > eth1: Identified 8139 chip type 'RTL-8139B' > > but this one should be inactive (not plugged into the network). Should i > try to get a debug print out of the actual 'weight' and 'work' integers, > and of the n->poll function address?
That might help.
I don't see any possible nv_rx_process{,_optimized}() can return "work > budget" either. But I do notice these loops unconditionally execute at least once, perhaps budget is being passed erroneously in as zero? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |