diff options
| author | Roger Luethi <rl@hellgate.ch> | 2014-03-18 13:14:01 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-03-19 16:08:29 -0400 |
| commit | ae996154f72fdd116291f69ec6c856be9c77042a (patch) | |
| tree | ad7ea2d80a7cad3fc1431d158281d2a540e18cb3 /drivers/net/ethernet/via | |
| parent | 3e3d35402140f15a626f24afafb0d7fc3b2e5aa2 (diff) | |
via-rhine: Disable device in error path
Currently, via-rhine fails to call pci_disable_device() for errors
in rhine_init_one().
Reported-by: Huqiu Liu <liuhq11@mails.tsinghua.edu.cn>
Signed-off-by: Roger Luethi <rl@hellgate.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/via')
| -rw-r--r-- | drivers/net/ethernet/via/via-rhine.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index ef312bc6b865..6ac20a6738f4 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
| @@ -923,7 +923,7 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 923 | if (rc) { | 923 | if (rc) { |
| 924 | dev_err(&pdev->dev, | 924 | dev_err(&pdev->dev, |
| 925 | "32-bit PCI DMA addresses not supported by the card!?\n"); | 925 | "32-bit PCI DMA addresses not supported by the card!?\n"); |
| 926 | goto err_out; | 926 | goto err_out_pci_disable; |
| 927 | } | 927 | } |
| 928 | 928 | ||
| 929 | /* sanity check */ | 929 | /* sanity check */ |
| @@ -931,7 +931,7 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 931 | (pci_resource_len(pdev, 1) < io_size)) { | 931 | (pci_resource_len(pdev, 1) < io_size)) { |
| 932 | rc = -EIO; | 932 | rc = -EIO; |
| 933 | dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n"); | 933 | dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n"); |
| 934 | goto err_out; | 934 | goto err_out_pci_disable; |
| 935 | } | 935 | } |
| 936 | 936 | ||
| 937 | pioaddr = pci_resource_start(pdev, 0); | 937 | pioaddr = pci_resource_start(pdev, 0); |
| @@ -942,7 +942,7 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 942 | dev = alloc_etherdev(sizeof(struct rhine_private)); | 942 | dev = alloc_etherdev(sizeof(struct rhine_private)); |
| 943 | if (!dev) { | 943 | if (!dev) { |
| 944 | rc = -ENOMEM; | 944 | rc = -ENOMEM; |
| 945 | goto err_out; | 945 | goto err_out_pci_disable; |
| 946 | } | 946 | } |
| 947 | SET_NETDEV_DEV(dev, &pdev->dev); | 947 | SET_NETDEV_DEV(dev, &pdev->dev); |
| 948 | 948 | ||
| @@ -1084,6 +1084,8 @@ err_out_free_res: | |||
| 1084 | pci_release_regions(pdev); | 1084 | pci_release_regions(pdev); |
| 1085 | err_out_free_netdev: | 1085 | err_out_free_netdev: |
| 1086 | free_netdev(dev); | 1086 | free_netdev(dev); |
| 1087 | err_out_pci_disable: | ||
| 1088 | pci_disable_device(pdev); | ||
| 1087 | err_out: | 1089 | err_out: |
| 1088 | return rc; | 1090 | return rc; |
| 1089 | } | 1091 | } |
