* Re: NAPI poll routine happens in interrupt context?
[not found] ` <20050817094317.3437607e@dxpl.pdx.osdl.net>
@ 2005-08-17 17:21 ` Joshua Wise
2005-08-17 18:18 ` Ralf Baechle
0 siblings, 1 reply; 2+ messages in thread
From: Joshua Wise @ 2005-08-17 17:21 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, linux-kernel, linux-mips, Aaron Brooks
On Wednesday 17 August 2005 12:43, Stephen Hemminger wrote:
> You will get more response to network issues on netdev@vger.kernel.org
Okay. Thanks.
> NAPI poll is usually called from softirq context. This means that
> hardware interrupts are enabled, but it is not in a thread context that
> can sleep.
Okay. I wasn't aware of quite how it was "supposed" to be.
> You shouldn't be calling things that could sleep! If you are it
> is a bug.
I guess I'd better track down this bug, then :)
> Harald Welte is working on a generic virtual Ethernet device, perhaps
> you could collaborate with him.
I assume he is on this mailing list?
> The bug is that ipv6 is doing an operation to handle MIB statistics and
> the MIPS architecture math routines seem to need to sleep.
> Previous versions of SNMP code may have done atomic operations, but
> current 2.6 code uses per-cpu variables.
> Also, there is no might sleep in the current 2.6 MIPS code either
> so the problem is probably fixed if you use current 2.6.12 or later
> kernel.
Hm -- I am using 2.6.13-rc2.
Here is a new trace, showing the same issue with IPv4:
Debug: sleeping function called from invalid context at
arch/mips/math-emu/dsemul.c:137
in_atomic():1, irqs_disabled():0
Call Trace:
[<ffffffff801406e0>] __might_sleep+0x180/0x198 (kernel/sched.c:5223)
[<ffffffff80101930>] mipsIRQ+0x130/0x1e0 (arch/mips/sc1000/mipsIRQ.S:95)
[<ffffffff802860fc>] ip_rcv+0x9c/0x7b0 (net/ipv4/ip_input.c:381)
[<ffffffff80140428>] do_dsemulret+0x68/0x1a0
(arch/mips/math-emu/dsemul.c:137)
[<ffffffff8010b3a4>] do_ade+0x24/0x550 (arch/mips/kernel/unaligned.c:506)
[<ffffffff80102964>] handle_adel_int+0x3c/0x58 (arch/mips/kernel/genex.S:281)
[<ffffffff80268260>] netif_receive_skb+0x1b0/0x2e0 (net/core/dev.c:1646)
[<ffffffff80286100>] ip_rcv+0xa0/0x7b0 (net/ipv4/ip_input.c:394)
[<ffffffff8014da5c>] printk+0x2c/0x38 (kernel/printk.c:515)
[<ffffffff80268260>] netif_receive_skb+0x1b0/0x2e0 (net/core/dev.c:1646)
[<ffffffff802573c8>] lanlan_poll+0x3e0/0x440 (drivers/net/lanlan.c:246)
etc, etc.
CC:'ing to linux-mips for obvious reasons. This seems to stem from an
unaligned access. If this is no longer appropriate for linux-kernel, feel
free to stop CCing to there, and I will follow.
Thanks,
joshua
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: NAPI poll routine happens in interrupt context?
2005-08-17 17:21 ` NAPI poll routine happens in interrupt context? Joshua Wise
@ 2005-08-17 18:18 ` Ralf Baechle
0 siblings, 0 replies; 2+ messages in thread
From: Ralf Baechle @ 2005-08-17 18:18 UTC (permalink / raw)
To: Joshua Wise
Cc: Stephen Hemminger, netdev, linux-kernel, linux-mips, Aaron Brooks
On Wed, Aug 17, 2005 at 01:21:18PM -0400, Joshua Wise wrote:
> > The bug is that ipv6 is doing an operation to handle MIB statistics and
> > the MIPS architecture math routines seem to need to sleep.
Except nothing in the network stack is using fp - the use of FP inside the
MIPS kernel is not supported in any way. What happend is probably the
fetching of the opcode of the instruction in the branch delay slot of
the unaligned instruction emulator blew up because it uses a get_user which
again calls might_sleep and that won't exactly work if not called from
process context.
Ralf
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-08-17 18:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <200508170932.10441.Joshua.Wise@sicortex.com>
[not found] ` <20050817094317.3437607e@dxpl.pdx.osdl.net>
2005-08-17 17:21 ` NAPI poll routine happens in interrupt context? Joshua Wise
2005-08-17 18:18 ` Ralf Baechle
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox