* 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, ®); @@ -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 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.