From: Pekka Pietikainen <hidden> Date: 2003-11-03 20:53:35
On Mon, Nov 03, 2003 at 08:35:38PM +0100, Charles Bueche wrote:
Hi,
I tried to reduce the MTU to 1464 because I'm behind an ADSL router.
Rigth when I do the "ifconfig eth0 192.168.0.4 mtu 1464", it hangs the
port.
The problem can be reproduced. I have attached a few log extracts. I
would be ready to test patches or new versions if needed.
Heh
Thanks for the report. Looking at the code and previous bugs in it, I can
safely say I found the problem and a few similar ones that could be
triggered when using ethtool :-)
Anyway, here's a (untested) patch that should fix the problem. As a bonus I
even snuck in a new feature, power management support!
From: David S. Miller <hidden> Date: 2003-11-04 17:13:55
On Tue, 4 Nov 2003 13:15:55 +0200
Pekka Pietikainen [off-list ref] wrote:
Oh btw., when trying out whether the new code even compiles/loads
I got the following in rmmod, does it look like something caused
by generic code or should I look for a reason in b44? :-)
(This is 2.6.0-test9-bk6).
free_netdev() is being invoked before the device registration
state advanced to NETREG_UNREGISTERED, likely unregister_netdev()
has not been called first or a bogus pointer was passed into
the routine.
From: Pekka Pietikainen <hidden> Date: 2003-11-04 21:19:37
On Tue, Nov 04, 2003 at 09:13:55AM -0800, David S. Miller wrote:
free_netdev() is being invoked before the device registration
state advanced to NETREG_UNREGISTERED, likely unregister_netdev()
has not been called first or a bogus pointer was passed into
the routine.
Ah, like a missing SET_NETDEV_DEV? :-) I still got reliable
rtnetlink_fill_ifinfo oopses (quick debugging showed
strlen(dev->qdisc_sleeping->ops->id); to be the location of the oops), which
went away after adding debug printk's to the module remove stuff, and didn't
come back after removing them and instead removing the device from
modprobe.conf (since I suspected it might have to do with the device getting
rmmoded and getting immediately insmod'd since something tried to use the
device). Then I put it back there and it's behaved since. Weird, or maybe
I forgot a make modules_install before the initial fix. Whatever.
Also added a add_timer() to resume, which it obviously needs...
From: David S. Miller <hidden> Date: 2003-11-04 21:20:17
On Tue, 4 Nov 2003 23:19:37 +0200
Pekka Pietikainen [off-list ref] wrote:
On Tue, Nov 04, 2003 at 09:13:55AM -0800, David S. Miller wrote:
quoted
free_netdev() is being invoked before the device registration
state advanced to NETREG_UNREGISTERED, likely unregister_netdev()
has not been called first or a bogus pointer was passed into
the routine.
Ah, like a missing SET_NETDEV_DEV? :-)
Wonderful, Jeff please integrate this b44 patch from Pekka.
From: David S. Miller <hidden> Date: 2003-11-05 21:35:16
On Wed, 05 Nov 2003 16:36:40 -0500
Jeff Garzik [off-list ref] wrote:
If someone can send me the latest patch, certainly! :)
There wasn't a patch appended to this message I'm replying to, nor did
any of the patches I saw on netdev include a SET_NETDEV_DEV change...
The most recent one did, I'll forward to you under seperate
cover.
From: Jeff Garzik <hidden> Date: 2003-11-05 21:36:40
David S. Miller wrote:
On Tue, 4 Nov 2003 23:19:37 +0200
Pekka Pietikainen [off-list ref] wrote:
quoted
On Tue, Nov 04, 2003 at 09:13:55AM -0800, David S. Miller wrote:
quoted
free_netdev() is being invoked before the device registration
state advanced to NETREG_UNREGISTERED, likely unregister_netdev()
has not been called first or a bogus pointer was passed into
the routine.
Ah, like a missing SET_NETDEV_DEV? :-)
Wonderful, Jeff please integrate this b44 patch from Pekka.
If someone can send me the latest patch, certainly! :)
There wasn't a patch appended to this message I'm replying to, nor did any of the patches I saw on netdev include a SET_NETDEV_DEV change...
Jeff
From: Charles Bueche <hidden> Date: 2003-11-06 22:02:44
Hi all,
sorry for the late answer. I tried to apply the patch mentionned below,
and it reject at Hunk #1. I run linux 2.4.22, my b44.c carry version
0.9.
Can you please send me the full b44.c file so I can try again ?
I'm a bit unsure wheter I should try anyway, your discussions are not
very understable to me. Pardon my ignorance of kernel dumps :-)
I would be very happy if I could simply recompile this particular
module, and not my full kernel after patching a single file. Is there a
way to find the commands originaly used to compile and link this module
from some logs ?
Regards,
Charles
On Tue, 2003-11-04 at 12:15, Pekka Pietikainen wrote:
quoted hunk
On Mon, Nov 03, 2003 at 03:16:18PM -0800, David S. Miller wrote:
quoted
I think Jeff should merge this upstrea, but I really disagree
with the CONFIG_PM ifdefs for the power-management support.
Fine with me (patch with CONFIG_PM removed included)
Oh btw., when trying out whether the new code even compiles/loads
I got the following in rmmod, does it look like something caused
by generic code or should I look for a reason in b44? :-)
(This is 2.6.0-test9-bk6).
kernel BUG at net/core/dev.c:2882!
invalid operand: 0000 [#1]
CPU: 0
EIP: 0060:[<c024d66d>] Tainted: P
EFLAGS: 00010297
EIP is at free_netdev+0x2d/0x40
eax: ddfd6800 ebx: ddfd6800 ecx: 1f2e9da0 edx: 00000003
esi: dff5d000 edi: dff5d054 ebp: de743ec4 esp: de743ec4
ds: 007b es: 007b ss: 0068
Process rmmod (pid: 18966, threadinfo=de742000 task=c797b320)
Stack: de743edc e090011d ddfd6800 dff5d000 e0902544 00000000 de743eec
c01c8c09
dff5d000 dff5d054 de743f04 c0210dd0 dff5d054 dff5d080 e0902590
e0902590
de743f18 c0210e02 dff5d054 e0902544 c02fb458 de743f2c c0211039
e0902544
Call Trace:
[<e090011d>] b44_remove_one+0x3d/0x60 [b44]
[<c01c8c09>] pci_device_remove+0x39/0x40
[<c0210dd0>] device_release_driver+0x60/0x70
[<c0210e02>] driver_detach+0x22/0x40
[<c0211039>] bus_remove_driver+0x39/0x70
[<c0211434>] driver_unregister+0x14/0x26
[<c01c8dc7>] pci_unregister_driver+0x17/0x30
[<e09002c2>] b44_cleanup+0x12/0x14 [b44]
[<c0136313>] sys_delete_module+0x113/0x190
[<c014d8cf>] do_munmap+0x14f/0x1b0
[<c014d973>] sys_munmap+0x43/0x60
[<c010b2dd>] sysenter_past_esp+0x52/0x71
Code: 0f 0b 42 0b ab 48 2e c0 eb de c9 e9 93 6e ef ff 8d 76 00 55
Trying to reproduce on a fresh non-nvidia-tainted -bk8 rmmod initially worked,
then I did /sbin/modprobe b44; /sbin/ifup eth0; /sbin/rmmod b44
managed to trigger another race:
eth0: no IPv6 routers present
Unable to handle kernel paging request at virtual address 706647ef
printing eip:
c0254415
*pde = 00000000
Oops: 0000 [#1]
CPU: 0
EIP: 0060:[<c0254415>] Not tainted
EFLAGS: 00010216
EIP is at rtnetlink_fill_ifinfo+0x2a5/0x480
eax: 706647e3 ebx: df037800 ecx: 00000ee4 edx: c68fa09c
esi: 00000000 edi: df037805 ebp: dff8deb4 esp: dff8de88
ds: 007b es: 007b ss: 0068
Process events/0 (pid: 3, threadinfo=dff8c000 task=c151cc80)
Stack: c689fd80 00000004 00000004 dff8dea4 00000ee4 00000f60 c68fa000
000005dc
c689fd80 ffffffff 00000011 dff8dee4 c02548ac c689fd80 df037800
00000011
00000000 00000000 ffffffff df037800 c0335c00 df037800 00000006
dff8def8
Call Trace:
[<c02548ac>] rtmsg_ifinfo+0x5c/0xd0
[<c0254d95>] rtnetlink_event+0x35/0x62
[<c012e47d>] notifier_call_chain+0x2d/0x50
[<c024d580>] netdev_wait_allrefs+0xc0/0x110
[<c024d6dc>] netdev_run_todo+0x10c/0x1f0
[<c010a33f>] __down_failed+0xb/0x14
[<c013100b>] worker_thread+0x1bb/0x2a0
[<c0254fc0>] linkwatch_event+0x0/0x30
[<c011e410>] default_wake_function+0x0/0x30
[<c010b206>] ret_from_fork+0x6/0x14
[<c011e410>] default_wake_function+0x0/0x30
[<c0130e50>] worker_thread+0x0/0x2a0
[<c01092a9>] kernel_thread_helper+0x5/0xc
Code: 8b 50 0c b9 ff ff ff ff 31 c0 83 c2 08 89 d7 f2 ae f7 d1 49