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 | } |