2.6.x net driver oops fixes
Subsystems (2)
PATCH 1/1 2.6.x net driver oops fixes
Please do a
bk pull bk://gkernel.bkbits.net/net-drivers-2.6
This will update the following files:
drivers/net/sis900.c | 41 +++++++++++++++++++++-------------------- drivers/net/via-rhine.c | 3 +++ 2 files changed, 24 insertions(+), 20 deletions(-)
through these ChangeSets:
Herbert Xu:
o sis900 kernel oops fix
Olof Johansson:
o [VIA RHINE] older chips oops on shutdown
drivers/net/sis900.c +21 -20
@@ -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 );
drivers/net/via-rhine.c +3 -0
@@ -1901,6 +1901,9 @@struct rhine_private *rp =netdev_priv (dev);void __iomem *ioaddr = rp->base; +if (!(rp->quirks & rqWOL)) +return ;/* Nothing to do for non-WOL adapters */ +rhine_power_init (dev);/* Make sure we use pattern 0, 1 and not 4, 5 */
Quoted 4 lines · * Jeff Garzik ([email protected]) wrote:
This will update the following files:
drivers/net/sis900.c | 41 +++++++++++++++++++++-------------------- drivers/net/via-rhine.c | 3 +++
The via-rhine fix is already in the stable queue. But the sis900 oops fix does not apply to the stable tree. It relies on a few intermediate patches. Appears to still be an issue for the older version which is in 2.6.11. Here's a stab at a backport. Would you like to review/validate or drop this one?
thanks,
-chris
===== drivers/net/sis900.c 1.62 vs edited =====
drivers/net/sis900.c +14 -16
@@ -236,7 +236,7 @@ static int __devinit sis900_get_mac_addr signature = (u16 )read_eeprom (ioaddr, EEPROMSignature);if (signature ==0xffff || signature ==0x0000 ) {printk (KERN_INFO "%s: Error EERPOM read %x\n" , - net_dev->name, signature); +pci_name (pci_dev), signature);return 0 ; }
@@ -268,7 +268,7 @@ static int __devinit sis630e_get_mac_addif (!isa_bridge) isa_bridge =pci_get_device (PCI_VENDOR_ID_SI ,0x0018 , isa_bridge);if (!isa_bridge) { -printk ("%s: Can not find ISA bridge\n" , net_dev->name); +printk ("%s: Can not find ISA bridge\n" ,pci_name (pci_dev));return 0 ; }pci_read_config_byte (isa_bridge,0x48 , ®);
@@ -456,10 +456,6 @@ static int __devinit sis900_probe(struct net_dev->tx_timeout = sis900_tx_timeout; net_dev->watchdog_timeo =TX_TIMEOUT ; net_dev->ethtool_ops = &sis900_ethtool_ops; - - 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);
@@ -476,7 +472,7 @@ static int __devinit sis900_probe(structif (ret ==0 ) { ret = -ENODEV ; - goto err_out_unregister; + goto err_unmap_rx; }/* 630ET : set the mii access mode as software-mode */
@@ -486,7 +482,7 @@ static int __devinit sis900_probe(struct/* probe for mii transceiver */ if (sis900_mii_probe (net_dev) ==0 ) { ret = -ENODEV ; - goto err_out_unregister; + goto err_unmap_rx; }/* save our host bridge revision */
@@ -496,6 +492,10 @@ static int __devinit sis900_probe(structpci_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);
@@ -505,8 +505,6 @@ static int __devinit sis900_probe(structreturn 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);
@@ -533,6 +531,7 @@ static int __devinit sis900_probe(structstatic 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;
@@ -582,21 +581,20 @@ static int __init sis900_mii_probe(struc mii_phy->phy_types = (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, mii_chip_table[i].name, + dev_name, mii_chip_table[i].name, phy_addr);break ; }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 ; }
@@ -621,7 +619,7 @@ static int __init sis900_mii_probe(struc 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 ; } }
@@ -691,7 +689,7 @@ static u16 sis900_default_phy(struct net 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 );
Quoted 9 lines · Chris Wright
Quoted 4 lines · * Jeff Garzik ([email protected]) wrote:
This will update the following files:
drivers/net/sis900.c| 41 +++++++++++++++++++++--------------------drivers/net/via-rhine.c| 3 +++
Quoted 5 lines
The via-rhine fix is already in the stable queue. But the sis900 oops fix does not apply to the stable tree. It relies on a few intermediate patches. Appears to still be an issue for the older version which is in 2.6.11. Here's a stab at a backport. Would you like to review/validate or drop this one?
The backport looks correct to me, though it would be nice to get a via-rhine owner to ACK the patch before it goes in...
Jeff
Quoted 10 lines · * Jeff Garzik ([email protected]) wrote:
Quoted 9 lines · Chris Wright
Quoted 4 lines · * Jeff Garzik ([email protected]) wrote:
This will update the following files:
drivers/net/sis900.c| 41 +++++++++++++++++++++--------------------drivers/net/via-rhine.c| 3 +++
Quoted 8 lines
Quoted 5 lines
The via-rhine fix is already in the stable queue. But the sis900 oops fix does not apply to the stable tree. It relies on a few intermediate patches. Appears to still be an issue for the older version which is in 2.6.11. Here's a stab at a backport. Would you like to review/validate or drop this one?
The backport looks correct to me, though it would be nice to get a via-rhine owner to ACK the patch before it goes in...
OK, thanks. ITYM sis900 maintainer, is that still Ollie Lho as listed in MAINTAINERS (that's looking old)?
thanks,
-chris
Quoted 18 lines · Chris Wright
Quoted 17 lines · * Jeff Garzik ([email protected]) wrote:
Quoted 15 lines · Chris Wright
Quoted 5 lines · * Jeff Garzik ([email protected]) wrote:
This will update the following files:
drivers/net/sis900.c| 41
+++++++++++++++++++++--------------------drivers/net/via-rhine.c| 3 +++The via-rhine fix is already in the stable queue. But the sis900 oops fix does not apply to the stable tree. It relies on a few intermediate patches. Appears to still be an issue for the older version which is in 2.6.11. Here's a stab at a backport. Would you like to review/validate or drop this one?
Quoted 5 lines
Quoted 2 lines
The backport looks correct to me, though it would be nice to get a via-rhine owner to ACK the patch before it goes in...
OK, thanks. ITYM sis900 maintainer, is that still Ollie Lho as listed in
MAINTAINERS(that's looking old)?
I have been acting maintainer for more than a year now, and I'm completely fine with the patch.
A lot of time ago (2.6.6) I proposed a patch to update MAINTAINERS, but Jeff said he wanted to wait some time. I don't know if such change is now possible/wanted. AFAIK Ollie's email address bounces.
--
Daniele Venzano
http://www.brownhat.org
Quoted 7 lines · Daniele Venzano
I have been acting maintainer for more than a year now, and I'm completely fine with the patch.
A lot of time ago (2.6.6) I proposed a patch to update
MAINTAINERS, but Jeff said he wanted to wait some time. I don't know if such change is now possible/wanted.
AFAIK Ollie's email address bounces.
Feel free to send a patch to MAINTAINERS
Jeff
Quoted 3 lines · * Daniele Venzano ([email protected]) wrote:
I have been acting maintainer for more than a year now, and I'm completely fine with the patch.
Thanks.
-chris
Quoted 4 lines · Chris Wright
Quoted 2 lines · * Jeff Garzik ([email protected]) wrote:
This will update the following files:
Quoted 8 lines
Quoted 2 lines
drivers/net/sis900.c | 41 +++++++++++++++++++++-------------------- drivers/net/via-rhine.c | 3 +++The via-rhine fix is already in the stable queue. But the sis900 oops fix does not apply to the stable tree. It relies on a few intermediate patches. Appears to still be an issue for the older version which is in 2.6.11. Here's a stab at a backport. Would you like to review/validate or drop this one?
The pci_name() portion of this patch is not necessary for the -stable tree. Care to remove it?
thanks,
greg k-h
Quoted 8 lines · Greg KH
Quoted 7 lines · Chris Wright
Quoted 4 lines · * Jeff Garzik ([email protected]) wrote:
This will update the following files:
drivers/net/sis900.c | 41 +++++++++++++++++++++-------------------- drivers/net/via-rhine.c | 3 +++
Quoted 8 lines
Quoted 5 lines
The via-rhine fix is already in the stable queue. But the sis900 oops fix does not apply to the stable tree. It relies on a few intermediate patches. Appears to still be an issue for the older version which is in 2.6.11. Here's a stab at a backport. Would you like to review/validate or drop this one?
The
pci_name()portion of this patch is not necessary for the -stable tree. Care to remove it?
Oh nevermind, I was completly wrong, it's fine.
greg k-h