* Re: 2.6.2-rc2-mm2 [not found] <20040130014108.09c964fd.akpm@osdl.org> @ 2004-02-01 10:03 ` Michael Neuffer 2004-02-06 23:17 ` of 2.6.2-rc2-mm2 and r8169 Francois Romieu 0 siblings, 1 reply; 3+ messages in thread From: Michael Neuffer @ 2004-02-01 10:03 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-kernel, netdev, shuchen Quoting Andrew Morton (akpm@osdl.org): > [...] > +bk-netdev.patch > > Latest experimental netdev tree The patch to r8169.c from the netdev patch clearly increases stability The 2.6.2-rc2 kernel hangs within minutes even on very light load, whereas 2.6.2-rc2-mm2-1 holds up under heavy network traffic repeatably for over half an hour before it hangs and somewhat longer under light traffic. It is definitely the RTL-8169 interface since I can not get the kernel to hang using a different (RTL-8139C) controller connected to the same Gigabit switch. After many tests I was finally able to capture an Oops: Oops: 0000 [#1] PREEMPT CPU: 0 EIP: 0060:[<c02f6a7a>] Not tainted VLI EFLAGS: 00010216 EIP is at rtl8169_rx_interrupt+0x7a/0x280 eax: 0000000f7 ebx: 3281c0f7 ecx: efcec200 edx: 00000000 esi: eecc2070 edi: 00000007 ebp: 000000f3 esp: e99a9fc2 ds: 007b es: 007b ss: 0068 Process setiathome (pid: 1817, threadinfo=e99a8000 task=e9a92240) Stack: ed7d5600 efcec000 efcec000 e99a9f68 eecc2070 00000000 00000001 f3851000 00000014 e99a8000 c02f6d62 efcec000 efcec200 f3851000 00000001 efcec200 ef00ef00 04000001 00000000 e99a9fc4 c010e06a 00000013 efcec000 e99a9fc4 Call Trace: [<c02f6d62>] rtl8169_interrupt+0xe2/0xf0 [<c010e06a>] handle_IRQ_event+0x3a/0x70 [<c010e401>] do_IRQ+0x91/0x130 [<c0491cdc>] common_interrupt+0x18/0x20 Code: 24 14 89 d8 25 ff 1f 00 00 8d 68 fc 3b 2d 38 12 58 c0 0f 8c 3f 01 00 00 8b 4c 24 30 c7 84 b9 90 00 00 00 00 00 00 00 8b 54 24 14 <8b> 42 68 85 c0 0f 85 14 01 00 00 8b 82 a0 00 00 00 01 6a 64 01 <0>Kernel panic: Fatal exception in interrupt In interrupt handler not syncing ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: of 2.6.2-rc2-mm2 and r8169 2004-02-01 10:03 ` 2.6.2-rc2-mm2 Michael Neuffer @ 2004-02-06 23:17 ` Francois Romieu [not found] ` <20040207115054.GC5704@neuffer.info> 0 siblings, 1 reply; 3+ messages in thread From: Francois Romieu @ 2004-02-06 23:17 UTC (permalink / raw) To: Michael Neuffer; +Cc: linux-kernel, netdev, shuchen Michael Neuffer <neuffer@neuffer.info> : [...] > After many tests I was finally able to capture an Oops: > Oops: 0000 [#1] > PREEMPT If you need to see it work better, I would suggest to disable PREEMPT/SMP. Could you send me the faulty r8169.o module off-list as well as an lsmod, an output of the /proc/interrupts and a dmesg from boot ? -- Ueimor ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20040207115054.GC5704@neuffer.info>]
[parent not found: <20040207132124.A7344@electric-eye.fr.zoreil.com>]
[parent not found: <20040208064859.GA29384@neuffer.info>]
* [patch] [rft] Re: of 2.6.2-rc2-mm2 and r8169 [not found] ` <20040208064859.GA29384@neuffer.info> @ 2004-02-09 23:57 ` Francois Romieu 0 siblings, 0 replies; 3+ messages in thread From: Francois Romieu @ 2004-02-09 23:57 UTC (permalink / raw) To: Michael Neuffer; +Cc: netdev The patch below compiles but I don't know if it will apply against current -mm. Complain if it's broken and I'll clean it once I have got some sleep. Idea behind the change: assume that there is no invocation of the r8169 irq handler while the asic fills all the available rx buffers. When it is finally called, the rx irq handler will not be stopped by a descriptor which is owned by the r8169 asic. The skb refill logic is only called once the handler has stopped looping over the ring and the rx handler will happily process skb entries that were just NULLed -> Oops --- drivers/net/r8169.c 2004-02-10 00:20:48.000000000 +0100 +++ drivers/net/r8169.c 2004-02-10 00:26:18.000000000 +0100 @@ -1471,17 +1471,20 @@ static void rtl8169_rx_interrupt(struct net_device *dev, struct rtl8169_private *tp, void *ioaddr) { - int cur_rx, delta; + int delta, rx_left; assert(dev != NULL); assert(tp != NULL); assert(ioaddr != NULL); - cur_rx = tp->cur_rx % NUM_RX_DESC; + rx_left = tp->cur_rx - tp->dirty_rx; - while (!(le32_to_cpu(tp->RxDescArray[cur_rx].status) & OWNbit)) { + while (rx_left > 0) { + int cur_rx = tp->cur_rx % NUM_RX_DESC; u32 status = le32_to_cpu(tp->RxDescArray[cur_rx].status); + if (status & OWNbit) + break; if (status & RxRES) { printk(KERN_INFO "%s: Rx ERROR!!!\n", dev->name); tp->stats.rx_errors++; @@ -1517,7 +1520,7 @@ rtl8169_rx_interrupt(struct net_device * } tp->cur_rx++; - cur_rx = tp->cur_rx % NUM_RX_DESC; + rx_left--; } delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx); ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-02-09 23:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20040130014108.09c964fd.akpm@osdl.org>
2004-02-01 10:03 ` 2.6.2-rc2-mm2 Michael Neuffer
2004-02-06 23:17 ` of 2.6.2-rc2-mm2 and r8169 Francois Romieu
[not found] ` <20040207115054.GC5704@neuffer.info>
[not found] ` <20040207132124.A7344@electric-eye.fr.zoreil.com>
[not found] ` <20040208064859.GA29384@neuffer.info>
2004-02-09 23:57 ` [patch] [rft] " Francois Romieu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).