aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorMark Hindley <mark@hindley.org.uk>2007-08-16 06:28:40 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:50:46 -0400
commitc8303d10daeacb5dd7714d99f03e15cc6b91a71e (patch)
tree5f848df320f98a213f1c61244bfca374eb089514 /drivers/net
parent79ef4a4dd44cd4f9942975b0f625bd01549a2aa9 (diff)
3c59x: check return of pci_enable_device()
Check return of pci_enable_device in vortex_up(). Also modify vortex_up to return error to callers. Handle failure of vortex_up in vortex_open and vortex_resume. Signed-off-by: Mark Hindley <mark@hindley.org.uk> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/3c59x.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
index a8c0f436cdd2..29e558913eb5 100644
--- a/drivers/net/3c59x.c
+++ b/drivers/net/3c59x.c
@@ -705,7 +705,7 @@ static struct {
705 705
706static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq, 706static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq,
707 int chip_idx, int card_idx); 707 int chip_idx, int card_idx);
708static void vortex_up(struct net_device *dev); 708static int vortex_up(struct net_device *dev);
709static void vortex_down(struct net_device *dev, int final); 709static void vortex_down(struct net_device *dev, int final);
710static int vortex_open(struct net_device *dev); 710static int vortex_open(struct net_device *dev);
711static void mdio_sync(void __iomem *ioaddr, int bits); 711static void mdio_sync(void __iomem *ioaddr, int bits);
@@ -841,8 +841,11 @@ static int vortex_resume(struct pci_dev *pdev)
841 return -EBUSY; 841 return -EBUSY;
842 } 842 }
843 if (netif_running(dev)) { 843 if (netif_running(dev)) {
844 vortex_up(dev); 844 err = vortex_up(dev);
845 netif_device_attach(dev); 845 if (err)
846 return err;
847 else
848 netif_device_attach(dev);
846 } 849 }
847 } 850 }
848 return 0; 851 return 0;
@@ -1484,19 +1487,24 @@ static void vortex_check_media(struct net_device *dev, unsigned int init)
1484 } 1487 }
1485} 1488}
1486 1489
1487static void 1490static int
1488vortex_up(struct net_device *dev) 1491vortex_up(struct net_device *dev)
1489{ 1492{
1490 struct vortex_private *vp = netdev_priv(dev); 1493 struct vortex_private *vp = netdev_priv(dev);
1491 void __iomem *ioaddr = vp->ioaddr; 1494 void __iomem *ioaddr = vp->ioaddr;
1492 unsigned int config; 1495 unsigned int config;
1493 int i, mii_reg1, mii_reg5; 1496 int i, mii_reg1, mii_reg5, err;
1494 1497
1495 if (VORTEX_PCI(vp)) { 1498 if (VORTEX_PCI(vp)) {
1496 pci_set_power_state(VORTEX_PCI(vp), PCI_D0); /* Go active */ 1499 pci_set_power_state(VORTEX_PCI(vp), PCI_D0); /* Go active */
1497 if (vp->pm_state_valid) 1500 if (vp->pm_state_valid)
1498 pci_restore_state(VORTEX_PCI(vp)); 1501 pci_restore_state(VORTEX_PCI(vp));
1499 pci_enable_device(VORTEX_PCI(vp)); 1502 err = pci_enable_device(VORTEX_PCI(vp));
1503 if (err) {
1504 printk(KERN_WARNING "%s: Could not enable device \n",
1505 dev->name);
1506 goto err_out;
1507 }
1500 } 1508 }
1501 1509
1502 /* Before initializing select the active media port. */ 1510 /* Before initializing select the active media port. */
@@ -1661,6 +1669,8 @@ vortex_up(struct net_device *dev)
1661 if (vp->cb_fn_base) /* The PCMCIA people are idiots. */ 1669 if (vp->cb_fn_base) /* The PCMCIA people are idiots. */
1662 iowrite32(0x8000, vp->cb_fn_base + 4); 1670 iowrite32(0x8000, vp->cb_fn_base + 4);
1663 netif_start_queue (dev); 1671 netif_start_queue (dev);
1672err_out:
1673 return err;
1664} 1674}
1665 1675
1666static int 1676static int
@@ -1674,7 +1684,7 @@ vortex_open(struct net_device *dev)
1674 if ((retval = request_irq(dev->irq, vp->full_bus_master_rx ? 1684 if ((retval = request_irq(dev->irq, vp->full_bus_master_rx ?
1675 &boomerang_interrupt : &vortex_interrupt, IRQF_SHARED, dev->name, dev))) { 1685 &boomerang_interrupt : &vortex_interrupt, IRQF_SHARED, dev->name, dev))) {
1676 printk(KERN_ERR "%s: Could not reserve IRQ %d\n", dev->name, dev->irq); 1686 printk(KERN_ERR "%s: Could not reserve IRQ %d\n", dev->name, dev->irq);
1677 goto out; 1687 goto err;
1678 } 1688 }
1679 1689
1680 if (vp->full_bus_master_rx) { /* Boomerang bus master. */ 1690 if (vp->full_bus_master_rx) { /* Boomerang bus master. */
@@ -1703,20 +1713,22 @@ vortex_open(struct net_device *dev)
1703 } 1713 }
1704 } 1714 }
1705 retval = -ENOMEM; 1715 retval = -ENOMEM;
1706 goto out_free_irq; 1716 goto err_free_irq;
1707 } 1717 }
1708 /* Wrap the ring. */ 1718 /* Wrap the ring. */
1709 vp->rx_ring[i-1].next = cpu_to_le32(vp->rx_ring_dma); 1719 vp->rx_ring[i-1].next = cpu_to_le32(vp->rx_ring_dma);
1710 } 1720 }
1711 1721
1712 vortex_up(dev); 1722 retval = vortex_up(dev);
1713 return 0; 1723 if (!retval)
1724 goto out;
1714 1725
1715out_free_irq: 1726err_free_irq:
1716 free_irq(dev->irq, dev); 1727 free_irq(dev->irq, dev);
1717out: 1728err:
1718 if (vortex_debug > 1) 1729 if (vortex_debug > 1)
1719 printk(KERN_ERR "%s: vortex_open() fails: returning %d\n", dev->name, retval); 1730 printk(KERN_ERR "%s: vortex_open() fails: returning %d\n", dev->name, retval);
1731out:
1720 return retval; 1732 return retval;
1721} 1733}
1722 1734