netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
@ 2005-02-17 21:44 Andrew Morton
  2005-02-18 11:20 ` Herbert Xu
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2005-02-17 21:44 UTC (permalink / raw)
  To: netdev



Begin forwarded message:

Date: Thu, 17 Feb 2005 10:39:03 -0800
From: bugme-daemon@osdl.org
To: bugme-new@lists.osdl.org
Subject: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot


http://bugme.osdl.org/show_bug.cgi?id=4223

           Summary: sis900 kernel oop at boot
    Kernel Version: 2.6.10
            Status: NEW
          Severity: low
             Owner: acme@conectiva.com.br
         Submitter: mangus@deprecated.it


Distribution: Slackware 10.1 
Hardware Environment: 
Software Environment: 
Problem Description: 
kernel oop at boot time , it happens once for now. 
 
Steps to reproduce:  
don't know.. 
here is the trace 
Feb 15 18:26:20 saturno kernel: Unable to handle kernel NULL pointer 
dereference at virtual address 0000000e 
Feb 15 18:26:20 saturno kernel:  printing eip: 
Feb 15 18:26:20 saturno kernel: e1113417 
Feb 15 18:26:20 saturno kernel: *pde = 00000000 
Feb 15 18:26:20 saturno kernel: Oops: 0000 [#1] 
Feb 15 18:26:20 saturno kernel: PREEMPT 
Feb 15 18:26:20 saturno kernel: Modules linked in: sis900 nvidia 8250_pci 8250 
serial_core psmouse 
Feb 15 18:26:20 saturno kernel: CPU:    0 
Feb 15 18:26:20 saturno kernel: EIP:    0060:[<e1113417>]    Tainted: P 
VLI 
Feb 15 18:26:20 saturno kernel: EFLAGS: 00010296   (2.6.10-M7) 
Feb 15 18:26:20 saturno kernel: EIP is at sis900_check_mode+0x17/0xa0 [sis900] 
Feb 15 18:26:20 saturno kernel: eax: 00000000   ebx: dfd38000   ecx: 10501010 
edx: 0000ec18 
Feb 15 18:26:20 saturno kernel: esi: 00000000   edi: 0000ec00   ebp: dfd38220 
esp: deaede88 
Feb 15 18:26:20 saturno kernel: ds: 007b   es: 007b   ss: 0068 
Feb 15 18:26:20 saturno kernel: Process ifconfig (pid: 1145, 
threadinfo=deaec000 task=c16fe020) 
Feb 15 18:26:20 saturno kernel: Stack: 00000000 00000000 00000000 00000001 
dfd38000 0000ec00 e1112cc9 dfd38000 
Feb 15 18:26:20 saturno kernel:        00000000 00000001 dfd38000 dfd38000 
9100007b dfd38000 00000000 00001043 
Feb 15 18:26:20 saturno kernel:        00000000 c027c435 dfd38000 dabe1540 
c0280314 dfd38000 00001002 c027d9d3 
Feb 15 18:26:20 saturno kernel: Call Trace: 
Feb 15 18:26:20 saturno kernel:  [<e1112cc9>] sis900_open+0xe9/0x130 [sis900] 
Feb 15 18:26:20 saturno kernel:  [<c027c435>] dev_open+0x85/0xa0 
Feb 15 18:26:20 saturno kernel:  [<c0280314>] dev_mc_upload+0x24/0x50 
Feb 15 18:26:20 saturno kernel:  [<c027d9d3>] dev_change_flags+0x53/0x130 
Feb 15 18:26:20 saturno kernel:  [<c027c305>] dev_load+0x25/0x70 
Feb 15 18:26:20 saturno kernel:  [<c02b7be7>] devinet_ioctl+0x257/0x5d0 
Feb 15 18:26:20 saturno kernel:  [<c02ba146>] inet_ioctl+0x66/0xb0 
Feb 15 18:26:20 saturno kernel:  [<c02734d9>] sock_ioctl+0xc9/0x240 
Feb 15 18:26:20 saturno kernel:  [<c015fc6a>] sys_ioctl+0xca/0x230 
Feb 15 18:26:20 saturno kernel:  [<c01026c7>] syscall_call+0x7/0xb 
Feb 15 18:26:20 saturno kernel: Code: df e9 2d ff ff ff 8d b4 26 00 00 00 00 
8d bc 27 00 00 00 00 83 ec 18 89 74 24 10 8b 74 24 20 89 5c 24 0c 8b 5c 24 1c 
89 7c 24 14 <80> 7e 0e 02 8b 7b 68 8b 4b 18 74 3d 8d 51 04 ed 83 c8 10 ef 89 
Feb 15 18:26:20 saturno kernel:  <6>eth0: Using transceiver found at address 1 
as default 
Feb 15 18:27:25 saturno portmap[2561]: cannot bind udp: Address already in use

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

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

* Re: Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
  2005-02-17 21:44 Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot Andrew Morton
@ 2005-02-18 11:20 ` Herbert Xu
  2005-02-18 18:17   ` Daniele Venzano
  2005-03-05  8:45   ` Fw: " Herbert Xu
  0 siblings, 2 replies; 7+ messages in thread
From: Herbert Xu @ 2005-02-18 11:20 UTC (permalink / raw)
  To: Andrew Morton; +Cc: netdev, mangus, jgarzik, webvenza

> Feb 15 18:26:20 saturno kernel: Unable to handle kernel NULL pointer 
> dereference at virtual address 0000000e 
> Feb 15 18:26:20 saturno kernel:  printing eip: 
> Feb 15 18:26:20 saturno kernel: e1113417 
> Feb 15 18:26:20 saturno kernel: *pde = 00000000 
> Feb 15 18:26:20 saturno kernel: Oops: 0000 [#1] 
> Feb 15 18:26:20 saturno kernel: PREEMPT 
> Feb 15 18:26:20 saturno kernel: Modules linked in: sis900 nvidia 8250_pci 8250 
> serial_core psmouse 
> Feb 15 18:26:20 saturno kernel: CPU:    0 
> Feb 15 18:26:20 saturno kernel: EIP:    0060:[<e1113417>]    Tainted: P 
> VLI 
> Feb 15 18:26:20 saturno kernel: EFLAGS: 00010296   (2.6.10-M7) 
> Feb 15 18:26:20 saturno kernel: EIP is at sis900_check_mode+0x17/0xa0 [sis900] 

OK, this happened because we got preempted before sis900_mii_probe
finished setting the sis_priv->mii.  Theoretically this can happen
with SMP as well but I suppose the number of SMP machines with sis900
is fairly small.

Anyway, the fix is to make sure that sis900_mii_probe is done before
the device can be opened.  This patch does it by moving the setup
after register_netdevice into the netdev init function.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
===== drivers/net/sis900.c 1.62 vs edited =====
--- 1.62/drivers/net/sis900.c	2005-01-11 03:52:27 +11:00
+++ edited/drivers/net/sis900.c	2005-02-18 22:15:13 +11:00
@@ -365,6 +365,48 @@
 	return 0;
 }
 
+static int __devinit sis900_init_netdev(struct net_device *net_dev)
+{
+	struct sis900_private *sis_priv = netdev_priv(net_dev);
+	struct pci_dev *pci_dev = sis_priv->pci_dev;
+	long ioaddr = net_dev->base_addr;
+	struct pci_dev *dev;
+	int ret;
+	u8 revision;
+
+	/* Get Mac address according to the chip revision */
+	pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision);
+
+	if (revision == SIS630E_900_REV)
+		ret = sis630e_get_mac_addr(pci_dev, net_dev);
+	else if ((revision > 0x81) && (revision <= 0x90) )
+		ret = sis635_get_mac_addr(pci_dev, net_dev);
+	else if (revision == SIS96x_900_REV)
+		ret = sis96x_get_mac_addr(pci_dev, net_dev);
+	else
+		ret = sis900_get_mac_addr(pci_dev, net_dev);
+
+	if (ret == 0)
+		return -ENODEV;
+	
+	/* 630ET : set the mii access mode as software-mode */
+	if (revision == SIS630ET_900_REV)
+		outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
+
+	/* probe for mii transceiver */
+	if (sis900_mii_probe(net_dev) == 0)
+		return -ENODEV;
+
+	/* save our host bridge revision */
+	dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, NULL);
+	if (dev) {
+		pci_read_config_byte(dev, PCI_CLASS_REVISION, &sis_priv->host_bridge_rev);
+		pci_dev_put(dev);
+	}
+
+	return 0;
+}
+
 /**
  *	sis900_probe - Probe for sis900 device
  *	@pci_dev: the sis900 pci device
@@ -381,12 +423,10 @@
 {
 	struct sis900_private *sis_priv;
 	struct net_device *net_dev;
-	struct pci_dev *dev;
 	dma_addr_t ring_dma;
 	void *ring_space;
 	long ioaddr;
 	int i, ret;
-	u8 revision;
 	char *card_name = card_names[pci_id->driver_data];
 
 /* when built into the kernel, we only print version if device is found */
@@ -456,45 +496,11 @@
 	net_dev->tx_timeout = sis900_tx_timeout;
 	net_dev->watchdog_timeo = TX_TIMEOUT;
 	net_dev->ethtool_ops = &sis900_ethtool_ops;
+	net_dev->init = &sis900_init_netdev;
 	
 	ret = register_netdev(net_dev);
 	if (ret)
 		goto err_unmap_rx;
-		
-	/* Get Mac address according to the chip revision */
-	pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &revision);
-	ret = 0;
-
-	if (revision == SIS630E_900_REV)
-		ret = sis630e_get_mac_addr(pci_dev, net_dev);
-	else if ((revision > 0x81) && (revision <= 0x90) )
-		ret = sis635_get_mac_addr(pci_dev, net_dev);
-	else if (revision == SIS96x_900_REV)
-		ret = sis96x_get_mac_addr(pci_dev, net_dev);
-	else
-		ret = sis900_get_mac_addr(pci_dev, net_dev);
-
-	if (ret == 0) {
-		ret = -ENODEV;
-		goto err_out_unregister;
-	}
-	
-	/* 630ET : set the mii access mode as software-mode */
-	if (revision == SIS630ET_900_REV)
-		outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
-
-	/* probe for mii transceiver */
-	if (sis900_mii_probe(net_dev) == 0) {
-		ret = -ENODEV;
-		goto err_out_unregister;
-	}
-
-	/* save our host bridge revision */
-	dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, NULL);
-	if (dev) {
-		pci_read_config_byte(dev, PCI_CLASS_REVISION, &sis_priv->host_bridge_rev);
-		pci_dev_put(dev);
-	}
 
 	/* print some information about our NIC */
 	printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name,
@@ -505,8 +511,6 @@
 
 	return 0;
 
- err_out_unregister:
- 	unregister_netdev(net_dev);
  err_unmap_rx:
 	pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
 		sis_priv->rx_ring_dma);

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

* Re: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
  2005-02-18 11:20 ` Herbert Xu
@ 2005-02-18 18:17   ` Daniele Venzano
  2005-02-18 22:18     ` Herbert Xu
  2005-03-05  8:45   ` Fw: " Herbert Xu
  1 sibling, 1 reply; 7+ messages in thread
From: Daniele Venzano @ 2005-02-18 18:17 UTC (permalink / raw)
  To: Herbert Xu; +Cc: netdev, Andrew Morton, mangus, jgarzik

On 18/feb/05, at 12:20, Herbert Xu wrote:
> OK, this happened because we got preempted before sis900_mii_probe
> finished setting the sis_priv->mii.  Theoretically this can happen
> with SMP as well but I suppose the number of SMP machines with sis900
> is fairly small.
>
> Anyway, the fix is to make sure that sis900_mii_probe is done before
> the device can be opened.  This patch does it by moving the setup
> after register_netdevice into the netdev init function.
I think the patch is ok, but it will not apply with the latest changes  
I sent to Jeff Garzik (see  
<http://gkernel.bkbits.net:8080/netdev-2.6/related/drivers/net/ 
sis900.c?nav=index.html|src/.|src/drivers|src/drivers/net>.
Don't know if this is a problem, since those changes have not yet  
reached Linus tree.

> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Daniele Venzano <webvenza@libero.it>

--
Daniele Venzano
http://teg.homeunix.org

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

* Re: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
  2005-02-18 18:17   ` Daniele Venzano
@ 2005-02-18 22:18     ` Herbert Xu
  0 siblings, 0 replies; 7+ messages in thread
From: Herbert Xu @ 2005-02-18 22:18 UTC (permalink / raw)
  To: Daniele Venzano; +Cc: netdev, Andrew Morton, mangus, jgarzik

[-- Attachment #1: Type: text/plain, Size: 740 bytes --]

On Fri, Feb 18, 2005 at 07:17:06PM +0100, Daniele Venzano wrote:
>
> I think the patch is ok, but it will not apply with the latest changes  
> I sent to Jeff Garzik (see  
> <http://gkernel.bkbits.net:8080/netdev-2.6/related/drivers/net/ 
> sis900.c?nav=index.html|src/.|src/drivers|src/drivers/net>.
> Don't know if this is a problem, since those changes have not yet  
> reached Linus tree.

Thanks for the pointer.  I've rediffed the patch against netdev-2.6.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

[-- Attachment #2: p --]
[-- Type: text/plain, Size: 4170 bytes --]

===== drivers/net/sis900.c 1.67 vs edited =====
--- 1.67/drivers/net/sis900.c	2005-01-27 11:00:00 +11:00
+++ edited/drivers/net/sis900.c	2005-02-19 09:16:13 +11:00
@@ -373,6 +373,55 @@
 	return 0;
 }
 
+static int __devinit sis900_init_netdev(struct net_device *net_dev)
+{
+	struct sis900_private *sis_priv = netdev_priv(net_dev);
+	struct pci_dev *pci_dev = sis_priv->pci_dev;
+	long ioaddr = net_dev->base_addr;
+	struct pci_dev *dev;
+	int ret;
+	
+	/* Get Mac address according to the chip revision */
+	pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
+	if (netif_msg_probe(sis_priv))
+		printk(KERN_DEBUG "%s: detected revision %2.2x, "
+				  "trying to get MAC address...\n",
+		       net_dev->name, sis_priv->chipset_rev);
+	
+	if (sis_priv->chipset_rev == SIS630E_900_REV)
+		ret = sis630e_get_mac_addr(pci_dev, net_dev);
+	else if ((sis_priv->chipset_rev > 0x81) && (sis_priv->chipset_rev <= 0x90))
+		ret = sis635_get_mac_addr(pci_dev, net_dev);
+	else if (sis_priv->chipset_rev == SIS96x_900_REV)
+		ret = sis96x_get_mac_addr(pci_dev, net_dev);
+	else
+		ret = sis900_get_mac_addr(pci_dev, net_dev);
+
+	if (ret == 0) {
+		printk(KERN_WARNING "%s: Cannot read MAC address.\n", net_dev->name);
+		return -ENODEV;
+	}
+	
+	/* 630ET : set the mii access mode as software-mode */
+	if (sis_priv->chipset_rev == SIS630ET_900_REV)
+		outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
+
+	/* probe for mii transceiver */
+	if (sis900_mii_probe(net_dev) == 0) {
+		printk(KERN_WARNING "%s: Error probing MII device.\n", net_dev->name);
+		return -ENODEV;
+	}
+
+	/* save our host bridge revision */
+	dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, NULL);
+	if (dev) {
+		pci_read_config_byte(dev, PCI_CLASS_REVISION, &sis_priv->host_bridge_rev);
+		pci_dev_put(dev);
+	}
+
+	return 0;
+}
+
 /**
  *	sis900_probe - Probe for sis900 device
  *	@pci_dev: the sis900 pci device
@@ -389,7 +438,6 @@
 {
 	struct sis900_private *sis_priv;
 	struct net_device *net_dev;
-	struct pci_dev *dev;
 	dma_addr_t ring_dma;
 	void *ring_space;
 	long ioaddr;
@@ -463,6 +511,7 @@
 	net_dev->tx_timeout = sis900_tx_timeout;
 	net_dev->watchdog_timeo = TX_TIMEOUT;
 	net_dev->ethtool_ops = &sis900_ethtool_ops;
+	net_dev->init = &sis900_init_netdev;
 
 	if (sis900_debug > 0)
 		sis_priv->msg_enable = sis900_debug;
@@ -472,47 +521,6 @@
 	ret = register_netdev(net_dev);
 	if (ret)
 		goto err_unmap_rx;
-		
-	/* Get Mac address according to the chip revision */
-	pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
-	if(netif_msg_probe(sis_priv))
-		printk(KERN_DEBUG "%s: detected revision %2.2x, "
-				"trying to get MAC address...\n",
-				net_dev->name, sis_priv->chipset_rev);
-	
-	ret = 0;
-	if (sis_priv->chipset_rev == SIS630E_900_REV)
-		ret = sis630e_get_mac_addr(pci_dev, net_dev);
-	else if ((sis_priv->chipset_rev > 0x81) && (sis_priv->chipset_rev <= 0x90) )
-		ret = sis635_get_mac_addr(pci_dev, net_dev);
-	else if (sis_priv->chipset_rev == SIS96x_900_REV)
-		ret = sis96x_get_mac_addr(pci_dev, net_dev);
-	else
-		ret = sis900_get_mac_addr(pci_dev, net_dev);
-
-	if (ret == 0) {
-		printk(KERN_WARNING "%s: Cannot read MAC address.\n", net_dev->name);
-		ret = -ENODEV;
-		goto err_out_unregister;
-	}
-	
-	/* 630ET : set the mii access mode as software-mode */
-	if (sis_priv->chipset_rev == SIS630ET_900_REV)
-		outl(ACCESSMODE | inl(ioaddr + cr), ioaddr + cr);
-
-	/* probe for mii transceiver */
-	if (sis900_mii_probe(net_dev) == 0) {
-		printk(KERN_WARNING "%s: Error probing MII device.\n", net_dev->name);
-		ret = -ENODEV;
-		goto err_out_unregister;
-	}
-
-	/* save our host bridge revision */
-	dev = pci_get_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_630, NULL);
-	if (dev) {
-		pci_read_config_byte(dev, PCI_CLASS_REVISION, &sis_priv->host_bridge_rev);
-		pci_dev_put(dev);
-	}
 
 	/* print some information about our NIC */
 	printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name,
@@ -523,8 +531,6 @@
 
 	return 0;
 
- err_out_unregister:
- 	unregister_netdev(net_dev);
  err_unmap_rx:
 	pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
 		sis_priv->rx_ring_dma);

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

* Re: Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
  2005-02-18 11:20 ` Herbert Xu
  2005-02-18 18:17   ` Daniele Venzano
@ 2005-03-05  8:45   ` Herbert Xu
  2005-08-19  8:04     ` Jeff Garzik
  1 sibling, 1 reply; 7+ messages in thread
From: Herbert Xu @ 2005-03-05  8:45 UTC (permalink / raw)
  To: Andrew Morton; +Cc: netdev, mangus, jgarzik, webvenza

[-- Attachment #1: Type: text/plain, Size: 1710 bytes --]

Hi:

Here is the version that moves the necessary code above register_netdev
instead of using init.  It's against netdev-2.6.

> Feb 15 18:26:20 saturno kernel: Unable to handle kernel NULL pointer
> dereference at virtual address 0000000e
> Feb 15 18:26:20 saturno kernel:  printing eip:
> Feb 15 18:26:20 saturno kernel: e1113417
> Feb 15 18:26:20 saturno kernel: *pde = 00000000
> Feb 15 18:26:20 saturno kernel: Oops: 0000 [#1]
> Feb 15 18:26:20 saturno kernel: PREEMPT
> Feb 15 18:26:20 saturno kernel: Modules linked in: sis900 nvidia 8250_pci 8250
> serial_core psmouse
> Feb 15 18:26:20 saturno kernel: CPU:    0
> Feb 15 18:26:20 saturno kernel: EIP:    0060:[<e1113417>]    Tainted: P
> VLI
> Feb 15 18:26:20 saturno kernel: EFLAGS: 00010296   (2.6.10-M7)
> Feb 15 18:26:20 saturno kernel: EIP is at sis900_check_mode+0x17/0xa0 [sis900]

OK, this happened because we got preempted before sis900_mii_probe
finished setting the sis_priv->mii.  Theoretically this can happen
with SMP as well but I suppose the number of SMP machines with sis900
is fairly small.

Anyway, the fix is to make sure that sis900_mii_probe is done before
the device can be opened.  This patch does it by moving the setup
before register_netdevice.

Since the netdev name is not available before register_netdev, I've
changed the relevant printk's to use pci_name instead.  Note that
one of those printk's may be called after register_netdev as well.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

[-- Attachment #2: p --]
[-- Type: text/plain, Size: 4672 bytes --]

===== drivers/net/sis900.c 1.69 vs edited =====
--- 1.69/drivers/net/sis900.c	2005-03-03 17:34:44 +11:00
+++ edited/drivers/net/sis900.c	2005-03-05 19:32:29 +11:00
@@ -245,7 +245,7 @@
 	signature = (u16) read_eeprom(ioaddr, EEPROMSignature);    
 	if (signature == 0xffff || signature == 0x0000) {
 		printk (KERN_WARNING "%s: Error EERPOM read %x\n", 
-			net_dev->name, signature);
+			pci_name(pci_dev), signature);
 		return 0;
 	}
 
@@ -277,7 +277,8 @@
 	if (!isa_bridge)
 		isa_bridge = pci_get_device(PCI_VENDOR_ID_SI, 0x0018, isa_bridge);
 	if (!isa_bridge) {
-		printk(KERN_WARNING "%s: Can not find ISA bridge\n", net_dev->name);
+		printk(KERN_WARNING "%s: Can not find ISA bridge\n",
+		       pci_name(pci_dev));
 		return 0;
 	}
 	pci_read_config_byte(isa_bridge, 0x48, &reg);
@@ -396,6 +397,7 @@
 	long ioaddr;
 	int i, ret;
 	char *card_name = card_names[pci_id->driver_data];
+	const char *dev_name = pci_name(pci_dev);
 
 /* when built into the kernel, we only print version if device is found */
 #ifndef MODULE
@@ -473,17 +475,13 @@
 		sis_priv->msg_enable = sis900_debug;
 	else
 		sis_priv->msg_enable = SIS900_DEF_MSG;
-
-	ret = register_netdev(net_dev);
-	if (ret)
-		goto err_unmap_rx;
 		
 	/* Get Mac address according to the chip revision */
 	pci_read_config_byte(pci_dev, PCI_CLASS_REVISION, &(sis_priv->chipset_rev));
 	if(netif_msg_probe(sis_priv))
 		printk(KERN_DEBUG "%s: detected revision %2.2x, "
 				"trying to get MAC address...\n",
-				net_dev->name, sis_priv->chipset_rev);
+				dev_name, sis_priv->chipset_rev);
 	
 	ret = 0;
 	if (sis_priv->chipset_rev == SIS630E_900_REV)
@@ -496,9 +494,9 @@
 		ret = sis900_get_mac_addr(pci_dev, net_dev);
 
 	if (ret == 0) {
-		printk(KERN_WARNING "%s: Cannot read MAC address.\n", net_dev->name);
+		printk(KERN_WARNING "%s: Cannot read MAC address.\n", dev_name);
 		ret = -ENODEV;
-		goto err_out_unregister;
+		goto err_unmap_rx;
 	}
 	
 	/* 630ET : set the mii access mode as software-mode */
@@ -507,9 +505,10 @@
 
 	/* probe for mii transceiver */
 	if (sis900_mii_probe(net_dev) == 0) {
-		printk(KERN_WARNING "%s: Error probing MII device.\n", net_dev->name);
+		printk(KERN_WARNING "%s: Error probing MII device.\n",
+		       dev_name);
 		ret = -ENODEV;
-		goto err_out_unregister;
+		goto err_unmap_rx;
 	}
 
 	/* save our host bridge revision */
@@ -519,6 +518,10 @@
 		pci_dev_put(dev);
 	}
 
+	ret = register_netdev(net_dev);
+	if (ret)
+		goto err_unmap_rx;
+
 	/* print some information about our NIC */
 	printk(KERN_INFO "%s: %s at %#lx, IRQ %d, ", net_dev->name,
 	       card_name, ioaddr, net_dev->irq);
@@ -528,8 +531,6 @@
 
 	return 0;
 
- err_out_unregister:
- 	unregister_netdev(net_dev);
  err_unmap_rx:
 	pci_free_consistent(pci_dev, RX_TOTAL_SIZE, sis_priv->rx_ring,
 		sis_priv->rx_ring_dma);
@@ -556,6 +557,7 @@
 static int __init sis900_mii_probe(struct net_device * net_dev)
 {
 	struct sis900_private * sis_priv = net_dev->priv;
+	const char *dev_name = pci_name(sis_priv->pci_dev);
 	u16 poll_bit = MII_STAT_LINK, status = 0;
 	unsigned long timeout = jiffies + 5 * HZ;
 	int phy_addr;
@@ -576,7 +578,7 @@
 			if (netif_msg_probe(sis_priv))
 				printk(KERN_DEBUG "%s: MII at address %d"
 						" not accessible\n",
-						net_dev->name, phy_addr);
+						dev_name, phy_addr);
 			continue;
 		}
 		
@@ -609,7 +611,7 @@
 					    (mii_status & (MII_STAT_CAN_TX_FDX | MII_STAT_CAN_TX)) ? LAN : HOME;
 				printk(KERN_INFO "%s: %s transceiver found "
 							"at address %d.\n",
-							net_dev->name,
+							dev_name,
 							mii_chip_table[i].name,
 							phy_addr);
 				break;
@@ -617,14 +619,13 @@
 			
 		if( !mii_chip_table[i].phy_id1 ) {
 			printk(KERN_INFO "%s: Unknown PHY transceiver found at address %d.\n",
-			       net_dev->name, phy_addr);
+			       dev_name, phy_addr);
 			mii_phy->phy_types = UNKNOWN;
 		}
 	}
 	
 	if (sis_priv->mii == NULL) {
-		printk(KERN_INFO "%s: No MII transceivers found!\n",
-			net_dev->name);
+		printk(KERN_INFO "%s: No MII transceivers found!\n", dev_name);
 		return 0;
 	}
 
@@ -649,7 +650,7 @@
 			poll_bit ^= (mdio_read(net_dev, sis_priv->cur_phy, MII_STATUS) & poll_bit);
 			if (time_after_eq(jiffies, timeout)) {
 				printk(KERN_WARNING "%s: reset phy and link down now\n",
-					net_dev->name);
+				       dev_name);
 				return -ETIME;
 			}
 		}
@@ -718,7 +719,7 @@
 		sis_priv->mii = default_phy;
 		sis_priv->cur_phy = default_phy->phy_addr;
 		printk(KERN_INFO "%s: Using transceiver found at address %d as default\n",
-					net_dev->name,sis_priv->cur_phy);
+		       pci_name(sis_priv->pci_dev), sis_priv->cur_phy);
 	}
 	
 	status = mdio_read(net_dev, sis_priv->cur_phy, MII_CONTROL);

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

* Re: Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
  2005-03-05  8:45   ` Fw: " Herbert Xu
@ 2005-08-19  8:04     ` Jeff Garzik
  2005-08-19  8:08       ` Herbert Xu
  0 siblings, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2005-08-19  8:04 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Andrew Morton, netdev, mangus, webvenza

Herbert Xu wrote:
> Hi:
> 
> Here is the version that moves the necessary code above register_netdev
> instead of using init.  It's against netdev-2.6.
> 
> 
>>Feb 15 18:26:20 saturno kernel: Unable to handle kernel NULL pointer
>>dereference at virtual address 0000000e
>>Feb 15 18:26:20 saturno kernel:  printing eip:
>>Feb 15 18:26:20 saturno kernel: e1113417
>>Feb 15 18:26:20 saturno kernel: *pde = 00000000
>>Feb 15 18:26:20 saturno kernel: Oops: 0000 [#1]
>>Feb 15 18:26:20 saturno kernel: PREEMPT
>>Feb 15 18:26:20 saturno kernel: Modules linked in: sis900 nvidia 8250_pci 8250
>>serial_core psmouse
>>Feb 15 18:26:20 saturno kernel: CPU:    0
>>Feb 15 18:26:20 saturno kernel: EIP:    0060:[<e1113417>]    Tainted: P
>>VLI
>>Feb 15 18:26:20 saturno kernel: EFLAGS: 00010296   (2.6.10-M7)
>>Feb 15 18:26:20 saturno kernel: EIP is at sis900_check_mode+0x17/0xa0 [sis900]
> 
> 
> OK, this happened because we got preempted before sis900_mii_probe
> finished setting the sis_priv->mii.  Theoretically this can happen
> with SMP as well but I suppose the number of SMP machines with sis900
> is fairly small.
> 
> Anyway, the fix is to make sure that sis900_mii_probe is done before
> the device can be opened.  This patch does it by moving the setup
> before register_netdevice.
> 
> Since the netdev name is not available before register_netdev, I've
> changed the relevant printk's to use pci_name instead.  Note that
> one of those printk's may be called after register_netdev as well.
> 
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Is this patch still needed?

	Jeff

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

* Re: Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot
  2005-08-19  8:04     ` Jeff Garzik
@ 2005-08-19  8:08       ` Herbert Xu
  0 siblings, 0 replies; 7+ messages in thread
From: Herbert Xu @ 2005-08-19  8:08 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Andrew Morton, netdev, mangus, webvenza

On Fri, Aug 19, 2005 at 04:04:55AM -0400, Jeff Garzik wrote:
> Herbert Xu wrote:
> >Hi:
> >
> >Here is the version that moves the necessary code above register_netdev
> >instead of using init.  It's against netdev-2.6.
> >
> >
> >>Feb 15 18:26:20 saturno kernel: Unable to handle kernel NULL pointer
> >>dereference at virtual address 0000000e
> >>Feb 15 18:26:20 saturno kernel:  printing eip:
> >>Feb 15 18:26:20 saturno kernel: e1113417
> >>Feb 15 18:26:20 saturno kernel: *pde = 00000000
> >>Feb 15 18:26:20 saturno kernel: Oops: 0000 [#1]
> >>Feb 15 18:26:20 saturno kernel: PREEMPT
> >>Feb 15 18:26:20 saturno kernel: Modules linked in: sis900 nvidia 8250_pci 
> >>8250
> >>serial_core psmouse
> >>Feb 15 18:26:20 saturno kernel: CPU:    0
> >>Feb 15 18:26:20 saturno kernel: EIP:    0060:[<e1113417>]    Tainted: P
> >>VLI
> >>Feb 15 18:26:20 saturno kernel: EFLAGS: 00010296   (2.6.10-M7)
> >>Feb 15 18:26:20 saturno kernel: EIP is at sis900_check_mode+0x17/0xa0 
> >>[sis900]
> >
> >
> >OK, this happened because we got preempted before sis900_mii_probe
> >finished setting the sis_priv->mii.  Theoretically this can happen
> >with SMP as well but I suppose the number of SMP machines with sis900
> >is fairly small.
> >
> >Anyway, the fix is to make sure that sis900_mii_probe is done before
> >the device can be opened.  This patch does it by moving the setup
> >before register_netdevice.
> >
> >Since the netdev name is not available before register_netdev, I've
> >changed the relevant printk's to use pci_name instead.  Note that
> >one of those printk's may be called after register_netdev as well.
> >
> >Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> 
> Is this patch still needed?

Nope, because you applied this months ago :)
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

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

end of thread, other threads:[~2005-08-19  8:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-02-17 21:44 Fw: [Bugme-new] [Bug 4223] New: sis900 kernel oop at boot Andrew Morton
2005-02-18 11:20 ` Herbert Xu
2005-02-18 18:17   ` Daniele Venzano
2005-02-18 22:18     ` Herbert Xu
2005-03-05  8:45   ` Fw: " Herbert Xu
2005-08-19  8:04     ` Jeff Garzik
2005-08-19  8:08       ` Herbert Xu

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