* 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
* [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).