diff options
author | Devendra Naga <devendra.aaru@gmail.com> | 2012-05-29 09:38:42 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-29 22:31:08 -0400 |
commit | acaf8276823302983d681c2cedaaf01918406935 (patch) | |
tree | 596aeee5adbf96934470576f4378a4bd9a608a95 /drivers/net/ethernet/rdc | |
parent | 617c8c11236716dcbda877e764b7bf37c6fd8063 (diff) |
r6040: disable pci device if the subsequent calls (after pci_enable_device) fails
the calls after the pci_enable_device may fail, and will error out with out
disabling it. disable the device at error paths.
Signed-off-by: Devendra Naga <devendra.aaru@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/rdc')
-rw-r--r-- | drivers/net/ethernet/rdc/r6040.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/ethernet/rdc/r6040.c b/drivers/net/ethernet/rdc/r6040.c index 4de73643fec6..f5e6f1f4f474 100644 --- a/drivers/net/ethernet/rdc/r6040.c +++ b/drivers/net/ethernet/rdc/r6040.c | |||
@@ -1096,20 +1096,20 @@ static int __devinit r6040_init_one(struct pci_dev *pdev, | |||
1096 | if (err) { | 1096 | if (err) { |
1097 | dev_err(&pdev->dev, "32-bit PCI DMA addresses" | 1097 | dev_err(&pdev->dev, "32-bit PCI DMA addresses" |
1098 | "not supported by the card\n"); | 1098 | "not supported by the card\n"); |
1099 | goto err_out; | 1099 | goto err_out_disable_dev; |
1100 | } | 1100 | } |
1101 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); | 1101 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); |
1102 | if (err) { | 1102 | if (err) { |
1103 | dev_err(&pdev->dev, "32-bit PCI DMA addresses" | 1103 | dev_err(&pdev->dev, "32-bit PCI DMA addresses" |
1104 | "not supported by the card\n"); | 1104 | "not supported by the card\n"); |
1105 | goto err_out; | 1105 | goto err_out_disable_dev; |
1106 | } | 1106 | } |
1107 | 1107 | ||
1108 | /* IO Size check */ | 1108 | /* IO Size check */ |
1109 | if (pci_resource_len(pdev, bar) < io_size) { | 1109 | if (pci_resource_len(pdev, bar) < io_size) { |
1110 | dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n"); | 1110 | dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n"); |
1111 | err = -EIO; | 1111 | err = -EIO; |
1112 | goto err_out; | 1112 | goto err_out_disable_dev; |
1113 | } | 1113 | } |
1114 | 1114 | ||
1115 | pci_set_master(pdev); | 1115 | pci_set_master(pdev); |
@@ -1117,7 +1117,7 @@ static int __devinit r6040_init_one(struct pci_dev *pdev, | |||
1117 | dev = alloc_etherdev(sizeof(struct r6040_private)); | 1117 | dev = alloc_etherdev(sizeof(struct r6040_private)); |
1118 | if (!dev) { | 1118 | if (!dev) { |
1119 | err = -ENOMEM; | 1119 | err = -ENOMEM; |
1120 | goto err_out; | 1120 | goto err_out_disable_dev; |
1121 | } | 1121 | } |
1122 | SET_NETDEV_DEV(dev, &pdev->dev); | 1122 | SET_NETDEV_DEV(dev, &pdev->dev); |
1123 | lp = netdev_priv(dev); | 1123 | lp = netdev_priv(dev); |
@@ -1238,6 +1238,8 @@ err_out_free_res: | |||
1238 | pci_release_regions(pdev); | 1238 | pci_release_regions(pdev); |
1239 | err_out_free_dev: | 1239 | err_out_free_dev: |
1240 | free_netdev(dev); | 1240 | free_netdev(dev); |
1241 | err_out_disable_dev: | ||
1242 | pci_disable_device(pdev); | ||
1241 | err_out: | 1243 | err_out: |
1242 | return err; | 1244 | return err; |
1243 | } | 1245 | } |