All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: changing MTU on b44 breaks eth0
       [not found] <1067888106.3366.20.camel@bluez.bueche.ch>
@ 2003-11-03 20:53 ` Pekka Pietikainen
  2003-11-03 23:16   ` David S. Miller
  0 siblings, 1 reply; 9+ messages in thread
From: Pekka Pietikainen @ 2003-11-03 20:53 UTC (permalink / raw)
  To: Charles Bueche; +Cc: netdev

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! 

--- /usr/src/linux-2.6.0-0.test9.1.67/drivers/net/b44.c	2003-10-25 21:43:30.000000000 +0300
+++ linux-2.6.0-test9/drivers/net/b44.c	2003-11-03 22:25:15.943854312 +0200
@@ -25,8 +25,8 @@
 
 #define DRV_MODULE_NAME		"b44"
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"0.91"
-#define DRV_MODULE_RELDATE	"Oct 3, 2003"
+#define DRV_MODULE_VERSION	"0.92"
+#define DRV_MODULE_RELDATE	"Nov 3, 2003"
 
 #define B44_DEF_MSG_ENABLE	  \
 	(NETIF_MSG_DRV		| \
@@ -942,6 +942,8 @@
 	b44_init_hw(bp);
 	spin_unlock_irq(&bp->lock);
 
+	b44_enable_ints(bp);
+	
 	return 0;
 }
 
@@ -1558,6 +1560,8 @@
 		netif_wake_queue(bp->dev);
 		spin_unlock_irq(&bp->lock);
 
+		b44_enable_ints(bp);
+		
 		return 0;
 	}
 	case ETHTOOL_GPAUSEPARAM: {
@@ -1601,6 +1605,8 @@
 		}
 		spin_unlock_irq(&bp->lock);
 
+		b44_enable_ints(bp);
+		
 		return 0;
 	}
 	};
@@ -1852,11 +1858,57 @@
 	}
 }
 
+#ifdef CONFIG_PM
+static int b44_suspend(struct pci_dev *pdev, u32 state)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct b44 *bp = dev->priv;
+
+        if (!netif_running(dev))
+                 return 0;
+
+	del_timer_sync(&bp->timer);
+
+	spin_lock_irq(&bp->lock); 
+
+	b44_halt(bp);
+	netif_carrier_off(bp->dev); 
+	netif_device_detach(bp->dev);
+	b44_free_rings(bp);
+
+	spin_unlock_irq(&bp->lock);
+	return 0;
+}
+
+static int b44_resume(struct pci_dev *pdev)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct b44 *bp = dev->priv;
+
+	if (!netif_running(dev))
+		return 0;
+
+	spin_lock_irq(&bp->lock);
+
+	b44_init_rings(bp);
+	b44_init_hw(bp);
+	netif_device_attach(bp->dev);
+	spin_unlock_irq(&bp->lock);
+
+	b44_enable_ints(bp);
+	return 0;
+}
+#endif /* CONFIG_PM */
+
 static struct pci_driver b44_driver = {
 	.name		= DRV_MODULE_NAME,
 	.id_table	= b44_pci_tbl,
 	.probe		= b44_init_one,
 	.remove		= __devexit_p(b44_remove_one),
+#ifdef CONFIG_PM
+        .suspend        = b44_suspend,
+        .resume         = b44_resume,
+#endif /* CONFIG_PM */
 };
 
 static int __init b44_init(void)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-03 20:53 ` changing MTU on b44 breaks eth0 Pekka Pietikainen
@ 2003-11-03 23:16   ` David S. Miller
  2003-11-04 11:15     ` Pekka Pietikainen
  0 siblings, 1 reply; 9+ messages in thread
From: David S. Miller @ 2003-11-03 23:16 UTC (permalink / raw)
  To: Pekka Pietikainen; +Cc: charles, netdev

On Mon, 3 Nov 2003 22:53:35 +0200
Pekka Pietikainen <pp@ee.oulu.fi> wrote:

> Anyway, here's a (untested) patch that should fix the problem. As a bonus I
> even snuck in a new feature, power management support! 

I think Jeff should merge this upstrea, but I really disagree
with the CONFIG_PM ifdefs for the power-management support.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-03 23:16   ` David S. Miller
@ 2003-11-04 11:15     ` Pekka Pietikainen
  2003-11-04 17:13       ` David S. Miller
  2003-11-06 22:02       ` Charles Bueche
  0 siblings, 2 replies; 9+ messages in thread
From: Pekka Pietikainen @ 2003-11-04 11:15 UTC (permalink / raw)
  To: David S. Miller; +Cc: charles, netdev

On Mon, Nov 03, 2003 at 03:16:18PM -0800, David S. Miller wrote:
> 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 

--- /usr/src/linux-2.6.0-0.test9.1.67/drivers/net/b44.c	2003-10-25 21:43:30.000000000 +0300
+++ linux-2.6.0-test9/drivers/net/b44.c	2003-11-04 12:32:13.403426192 +0200
@@ -25,8 +25,8 @@
 
 #define DRV_MODULE_NAME		"b44"
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"0.91"
-#define DRV_MODULE_RELDATE	"Oct 3, 2003"
+#define DRV_MODULE_VERSION	"0.92"
+#define DRV_MODULE_RELDATE	"Nov 4, 2003"
 
 #define B44_DEF_MSG_ENABLE	  \
 	(NETIF_MSG_DRV		| \
@@ -942,6 +942,8 @@
 	b44_init_hw(bp);
 	spin_unlock_irq(&bp->lock);
 
+	b44_enable_ints(bp);
+	
 	return 0;
 }
 
@@ -1558,6 +1560,8 @@
 		netif_wake_queue(bp->dev);
 		spin_unlock_irq(&bp->lock);
 
+		b44_enable_ints(bp);
+		
 		return 0;
 	}
 	case ETHTOOL_GPAUSEPARAM: {
@@ -1601,6 +1605,8 @@
 		}
 		spin_unlock_irq(&bp->lock);
 
+		b44_enable_ints(bp);
+		
 		return 0;
 	}
 	};
@@ -1852,11 +1858,53 @@
 	}
 }
 
+static int b44_suspend(struct pci_dev *pdev, u32 state)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct b44 *bp = dev->priv;
+
+        if (!netif_running(dev))
+                 return 0;
+
+	del_timer_sync(&bp->timer);
+
+	spin_lock_irq(&bp->lock); 
+
+	b44_halt(bp);
+	netif_carrier_off(bp->dev); 
+	netif_device_detach(bp->dev);
+	b44_free_rings(bp);
+
+	spin_unlock_irq(&bp->lock);
+	return 0;
+}
+
+static int b44_resume(struct pci_dev *pdev)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct b44 *bp = dev->priv;
+
+	if (!netif_running(dev))
+		return 0;
+
+	spin_lock_irq(&bp->lock);
+
+	b44_init_rings(bp);
+	b44_init_hw(bp);
+	netif_device_attach(bp->dev);
+	spin_unlock_irq(&bp->lock);
+
+	b44_enable_ints(bp);
+	return 0;
+}
+
 static struct pci_driver b44_driver = {
 	.name		= DRV_MODULE_NAME,
 	.id_table	= b44_pci_tbl,
 	.probe		= b44_init_one,
 	.remove		= __devexit_p(b44_remove_one),
+        .suspend        = b44_suspend,
+        .resume         = b44_resume,
 };
 
 static int __init b44_init(void)
-- 
Pekka Pietikainen

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-04 11:15     ` Pekka Pietikainen
@ 2003-11-04 17:13       ` David S. Miller
  2003-11-04 21:19         ` Pekka Pietikainen
  2003-11-06 22:02       ` Charles Bueche
  1 sibling, 1 reply; 9+ messages in thread
From: David S. Miller @ 2003-11-04 17:13 UTC (permalink / raw)
  To: Pekka Pietikainen; +Cc: charles, netdev

On Tue, 4 Nov 2003 13:15:55 +0200
Pekka Pietikainen <pp@ee.oulu.fi> 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.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-04 17:13       ` David S. Miller
@ 2003-11-04 21:19         ` Pekka Pietikainen
  2003-11-04 21:20           ` David S. Miller
  0 siblings, 1 reply; 9+ messages in thread
From: Pekka Pietikainen @ 2003-11-04 21:19 UTC (permalink / raw)
  To: netdev

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...

--- /usr/src/linux-2.6.0-0.test9.1.67/drivers/net/b44.c	2003-10-25 21:43:30.000000000 +0300
+++ linux-2.6.0-test9/drivers/net/b44.c	2003-11-04 22:12:25.776969400 +0200
@@ -25,8 +25,8 @@
 
 #define DRV_MODULE_NAME		"b44"
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"0.91"
-#define DRV_MODULE_RELDATE	"Oct 3, 2003"
+#define DRV_MODULE_VERSION	"0.92"
+#define DRV_MODULE_RELDATE	"Nov 4, 2003"
 
 #define B44_DEF_MSG_ENABLE	  \
 	(NETIF_MSG_DRV		| \
@@ -942,6 +942,8 @@
 	b44_init_hw(bp);
 	spin_unlock_irq(&bp->lock);
 
+	b44_enable_ints(bp);
+	
 	return 0;
 }
 
@@ -1558,6 +1560,8 @@
 		netif_wake_queue(bp->dev);
 		spin_unlock_irq(&bp->lock);
 
+		b44_enable_ints(bp);
+		
 		return 0;
 	}
 	case ETHTOOL_GPAUSEPARAM: {
@@ -1601,6 +1605,8 @@
 		}
 		spin_unlock_irq(&bp->lock);
 
+		b44_enable_ints(bp);
+		
 		return 0;
 	}
 	};
@@ -1752,6 +1758,7 @@
 	}
 
 	SET_MODULE_OWNER(dev);
+	SET_NETDEV_DEV(dev,&pdev->dev);
 
 	/* No interesting netdevice features in this card... */
 	dev->features |= 0;
@@ -1852,11 +1859,56 @@
 	}
 }
 
+static int b44_suspend(struct pci_dev *pdev, u32 state)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct b44 *bp = dev->priv;
+
+        if (!netif_running(dev))
+                 return 0;
+
+	del_timer_sync(&bp->timer);
+
+	spin_lock_irq(&bp->lock); 
+
+	b44_halt(bp);
+	netif_carrier_off(bp->dev); 
+	netif_device_detach(bp->dev);
+	b44_free_rings(bp);
+
+	spin_unlock_irq(&bp->lock);
+	return 0;
+}
+
+static int b44_resume(struct pci_dev *pdev)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+	struct b44 *bp = dev->priv;
+
+	if (!netif_running(dev))
+		return 0;
+
+	spin_lock_irq(&bp->lock);
+
+	b44_init_rings(bp);
+	b44_init_hw(bp);
+	netif_device_attach(bp->dev);
+	spin_unlock_irq(&bp->lock);
+
+	bp->timer.expires = jiffies + HZ;
+	add_timer(&bp->timer);
+
+	b44_enable_ints(bp);
+	return 0;
+}
+
 static struct pci_driver b44_driver = {
 	.name		= DRV_MODULE_NAME,
 	.id_table	= b44_pci_tbl,
 	.probe		= b44_init_one,
 	.remove		= __devexit_p(b44_remove_one),
+        .suspend        = b44_suspend,
+        .resume         = b44_resume,
 };
 
 static int __init b44_init(void)
-- 
Pekka Pietikainen

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-04 21:19         ` Pekka Pietikainen
@ 2003-11-04 21:20           ` David S. Miller
  2003-11-05 21:36             ` Jeff Garzik
  0 siblings, 1 reply; 9+ messages in thread
From: David S. Miller @ 2003-11-04 21:20 UTC (permalink / raw)
  To: Pekka Pietikainen; +Cc: netdev, jgarzik

On Tue, 4 Nov 2003 23:19:37 +0200
Pekka Pietikainen <pp@ee.oulu.fi> wrote:

> 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? :-)

Wonderful, Jeff please integrate this b44 patch from Pekka.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-05 21:36             ` Jeff Garzik
@ 2003-11-05 21:35               ` David S. Miller
  0 siblings, 0 replies; 9+ messages in thread
From: David S. Miller @ 2003-11-05 21:35 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: pp, netdev

On Wed, 05 Nov 2003 16:36:40 -0500
Jeff Garzik <jgarzik@pobox.com> 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.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-04 21:20           ` David S. Miller
@ 2003-11-05 21:36             ` Jeff Garzik
  2003-11-05 21:35               ` David S. Miller
  0 siblings, 1 reply; 9+ messages in thread
From: Jeff Garzik @ 2003-11-05 21:36 UTC (permalink / raw)
  To: David S. Miller; +Cc: Pekka Pietikainen, netdev

David S. Miller wrote:
> On Tue, 4 Nov 2003 23:19:37 +0200
> Pekka Pietikainen <pp@ee.oulu.fi> wrote:
> 
> 
>>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? :-)
> 
> 
> 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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: changing MTU on b44 breaks eth0
  2003-11-04 11:15     ` Pekka Pietikainen
  2003-11-04 17:13       ` David S. Miller
@ 2003-11-06 22:02       ` Charles Bueche
  1 sibling, 0 replies; 9+ messages in thread
From: Charles Bueche @ 2003-11-06 22:02 UTC (permalink / raw)
  To: Pekka Pietikainen; +Cc: David S. Miller, netdev

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:
> On Mon, Nov 03, 2003 at 03:16:18PM -0800, David S. Miller wrote:
> > 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 
> 
> --- /usr/src/linux-2.6.0-0.test9.1.67/drivers/net/b44.c	2003-10-25 21:43:30.000000000 +0300
> +++ linux-2.6.0-test9/drivers/net/b44.c	2003-11-04 12:32:13.403426192 +0200
> @@ -25,8 +25,8 @@
>  
>  #define DRV_MODULE_NAME		"b44"
>  #define PFX DRV_MODULE_NAME	": "
> -#define DRV_MODULE_VERSION	"0.91"
> -#define DRV_MODULE_RELDATE	"Oct 3, 2003"
> +#define DRV_MODULE_VERSION	"0.92"
> +#define DRV_MODULE_RELDATE	"Nov 4, 2003"
>  
>  #define B44_DEF_MSG_ENABLE	  \
>  	(NETIF_MSG_DRV		| \
> @@ -942,6 +942,8 @@
>  	b44_init_hw(bp);
>  	spin_unlock_irq(&bp->lock);
>  
> +	b44_enable_ints(bp);
> +	
>  	return 0;
>  }
>  
> @@ -1558,6 +1560,8 @@
>  		netif_wake_queue(bp->dev);
>  		spin_unlock_irq(&bp->lock);
>  
> +		b44_enable_ints(bp);
> +		
>  		return 0;
>  	}
>  	case ETHTOOL_GPAUSEPARAM: {
> @@ -1601,6 +1605,8 @@
>  		}
>  		spin_unlock_irq(&bp->lock);
>  
> +		b44_enable_ints(bp);
> +		
>  		return 0;
>  	}
>  	};
> @@ -1852,11 +1858,53 @@
>  	}
>  }
>  
> +static int b44_suspend(struct pci_dev *pdev, u32 state)
> +{
> +	struct net_device *dev = pci_get_drvdata(pdev);
> +	struct b44 *bp = dev->priv;
> +
> +        if (!netif_running(dev))
> +                 return 0;
> +
> +	del_timer_sync(&bp->timer);
> +
> +	spin_lock_irq(&bp->lock); 
> +
> +	b44_halt(bp);
> +	netif_carrier_off(bp->dev); 
> +	netif_device_detach(bp->dev);
> +	b44_free_rings(bp);
> +
> +	spin_unlock_irq(&bp->lock);
> +	return 0;
> +}
> +
> +static int b44_resume(struct pci_dev *pdev)
> +{
> +	struct net_device *dev = pci_get_drvdata(pdev);
> +	struct b44 *bp = dev->priv;
> +
> +	if (!netif_running(dev))
> +		return 0;
> +
> +	spin_lock_irq(&bp->lock);
> +
> +	b44_init_rings(bp);
> +	b44_init_hw(bp);
> +	netif_device_attach(bp->dev);
> +	spin_unlock_irq(&bp->lock);
> +
> +	b44_enable_ints(bp);
> +	return 0;
> +}
> +
>  static struct pci_driver b44_driver = {
>  	.name		= DRV_MODULE_NAME,
>  	.id_table	= b44_pci_tbl,
>  	.probe		= b44_init_one,
>  	.remove		= __devexit_p(b44_remove_one),
> +        .suspend        = b44_suspend,
> +        .resume         = b44_resume,
>  };
>  
>  static int __init b44_init(void)
-- 
Charles Bueche <charles@bueche.ch>
sand, snow, wave, wind and net -surfer

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2003-11-06 22:02 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1067888106.3366.20.camel@bluez.bueche.ch>
2003-11-03 20:53 ` changing MTU on b44 breaks eth0 Pekka Pietikainen
2003-11-03 23:16   ` David S. Miller
2003-11-04 11:15     ` Pekka Pietikainen
2003-11-04 17:13       ` David S. Miller
2003-11-04 21:19         ` Pekka Pietikainen
2003-11-04 21:20           ` David S. Miller
2003-11-05 21:36             ` Jeff Garzik
2003-11-05 21:35               ` David S. Miller
2003-11-06 22:02       ` Charles Bueche

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.