diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2013-06-28 07:02:54 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-29 00:37:48 -0400 |
commit | 29cc436cb90da4cabf404d8ceedc762fc7387b15 (patch) | |
tree | 27a0b651fb6b5705417e5a22bde9686b5e122f09 /drivers/net/ethernet/oki-semi | |
parent | 453ca931f515161902dbb325d7f39a992c3059ce (diff) |
pch_gbe: use managed functions pcim_* and devm_*
This makes the error handling much more simpler than open-coding everything and
in addition makes the probe function smaller an tidier.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/oki-semi')
-rw-r--r-- | drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c index 97db56393197..ab1039a95bf9 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | |||
@@ -636,15 +636,15 @@ static void pch_gbe_mac_set_pause_packet(struct pch_gbe_hw *hw) | |||
636 | */ | 636 | */ |
637 | static int pch_gbe_alloc_queues(struct pch_gbe_adapter *adapter) | 637 | static int pch_gbe_alloc_queues(struct pch_gbe_adapter *adapter) |
638 | { | 638 | { |
639 | adapter->tx_ring = kzalloc(sizeof(*adapter->tx_ring), GFP_KERNEL); | 639 | adapter->tx_ring = devm_kzalloc(&adapter->pdev->dev, |
640 | sizeof(*adapter->tx_ring), GFP_KERNEL); | ||
640 | if (!adapter->tx_ring) | 641 | if (!adapter->tx_ring) |
641 | return -ENOMEM; | 642 | return -ENOMEM; |
642 | 643 | ||
643 | adapter->rx_ring = kzalloc(sizeof(*adapter->rx_ring), GFP_KERNEL); | 644 | adapter->rx_ring = devm_kzalloc(&adapter->pdev->dev, |
644 | if (!adapter->rx_ring) { | 645 | sizeof(*adapter->rx_ring), GFP_KERNEL); |
645 | kfree(adapter->tx_ring); | 646 | if (!adapter->rx_ring) |
646 | return -ENOMEM; | 647 | return -ENOMEM; |
647 | } | ||
648 | return 0; | 648 | return 0; |
649 | } | 649 | } |
650 | 650 | ||
@@ -2588,13 +2588,7 @@ static void pch_gbe_remove(struct pci_dev *pdev) | |||
2588 | 2588 | ||
2589 | pch_gbe_hal_phy_hw_reset(&adapter->hw); | 2589 | pch_gbe_hal_phy_hw_reset(&adapter->hw); |
2590 | 2590 | ||
2591 | kfree(adapter->tx_ring); | ||
2592 | kfree(adapter->rx_ring); | ||
2593 | |||
2594 | iounmap(adapter->hw.reg); | ||
2595 | pci_release_regions(pdev); | ||
2596 | free_netdev(netdev); | 2591 | free_netdev(netdev); |
2597 | pci_disable_device(pdev); | ||
2598 | } | 2592 | } |
2599 | 2593 | ||
2600 | static int pch_gbe_probe(struct pci_dev *pdev, | 2594 | static int pch_gbe_probe(struct pci_dev *pdev, |
@@ -2604,7 +2598,7 @@ static int pch_gbe_probe(struct pci_dev *pdev, | |||
2604 | struct pch_gbe_adapter *adapter; | 2598 | struct pch_gbe_adapter *adapter; |
2605 | int ret; | 2599 | int ret; |
2606 | 2600 | ||
2607 | ret = pci_enable_device(pdev); | 2601 | ret = pcim_enable_device(pdev); |
2608 | if (ret) | 2602 | if (ret) |
2609 | return ret; | 2603 | return ret; |
2610 | 2604 | ||
@@ -2617,24 +2611,22 @@ static int pch_gbe_probe(struct pci_dev *pdev, | |||
2617 | if (ret) { | 2611 | if (ret) { |
2618 | dev_err(&pdev->dev, "ERR: No usable DMA " | 2612 | dev_err(&pdev->dev, "ERR: No usable DMA " |
2619 | "configuration, aborting\n"); | 2613 | "configuration, aborting\n"); |
2620 | goto err_disable_device; | 2614 | return ret; |
2621 | } | 2615 | } |
2622 | } | 2616 | } |
2623 | } | 2617 | } |
2624 | 2618 | ||
2625 | ret = pci_request_regions(pdev, KBUILD_MODNAME); | 2619 | ret = pcim_iomap_regions(pdev, 1 << PCH_GBE_PCI_BAR, pci_name(pdev)); |
2626 | if (ret) { | 2620 | if (ret) { |
2627 | dev_err(&pdev->dev, | 2621 | dev_err(&pdev->dev, |
2628 | "ERR: Can't reserve PCI I/O and memory resources\n"); | 2622 | "ERR: Can't reserve PCI I/O and memory resources\n"); |
2629 | goto err_disable_device; | 2623 | return ret; |
2630 | } | 2624 | } |
2631 | pci_set_master(pdev); | 2625 | pci_set_master(pdev); |
2632 | 2626 | ||
2633 | netdev = alloc_etherdev((int)sizeof(struct pch_gbe_adapter)); | 2627 | netdev = alloc_etherdev((int)sizeof(struct pch_gbe_adapter)); |
2634 | if (!netdev) { | 2628 | if (!netdev) |
2635 | ret = -ENOMEM; | 2629 | return -ENOMEM; |
2636 | goto err_release_pci; | ||
2637 | } | ||
2638 | SET_NETDEV_DEV(netdev, &pdev->dev); | 2630 | SET_NETDEV_DEV(netdev, &pdev->dev); |
2639 | 2631 | ||
2640 | pci_set_drvdata(pdev, netdev); | 2632 | pci_set_drvdata(pdev, netdev); |
@@ -2642,18 +2634,14 @@ static int pch_gbe_probe(struct pci_dev *pdev, | |||
2642 | adapter->netdev = netdev; | 2634 | adapter->netdev = netdev; |
2643 | adapter->pdev = pdev; | 2635 | adapter->pdev = pdev; |
2644 | adapter->hw.back = adapter; | 2636 | adapter->hw.back = adapter; |
2645 | adapter->hw.reg = pci_iomap(pdev, PCH_GBE_PCI_BAR, 0); | 2637 | adapter->hw.reg = pcim_iomap_table(pdev)[PCH_GBE_PCI_BAR]; |
2646 | if (!adapter->hw.reg) { | ||
2647 | ret = -EIO; | ||
2648 | dev_err(&pdev->dev, "Can't ioremap\n"); | ||
2649 | goto err_free_netdev; | ||
2650 | } | ||
2651 | 2638 | ||
2652 | adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number, | 2639 | adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number, |
2653 | PCI_DEVFN(12, 4)); | 2640 | PCI_DEVFN(12, 4)); |
2654 | if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { | 2641 | if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { |
2655 | dev_err(&pdev->dev, "Bad ptp filter\n"); | 2642 | dev_err(&pdev->dev, "Bad ptp filter\n"); |
2656 | return -EINVAL; | 2643 | ret = -EINVAL; |
2644 | goto err_free_netdev; | ||
2657 | } | 2645 | } |
2658 | 2646 | ||
2659 | netdev->netdev_ops = &pch_gbe_netdev_ops; | 2647 | netdev->netdev_ops = &pch_gbe_netdev_ops; |
@@ -2671,7 +2659,7 @@ static int pch_gbe_probe(struct pci_dev *pdev, | |||
2671 | /* setup the private structure */ | 2659 | /* setup the private structure */ |
2672 | ret = pch_gbe_sw_init(adapter); | 2660 | ret = pch_gbe_sw_init(adapter); |
2673 | if (ret) | 2661 | if (ret) |
2674 | goto err_iounmap; | 2662 | goto err_free_netdev; |
2675 | 2663 | ||
2676 | /* Initialize PHY */ | 2664 | /* Initialize PHY */ |
2677 | ret = pch_gbe_init_phy(adapter); | 2665 | ret = pch_gbe_init_phy(adapter); |
@@ -2727,16 +2715,8 @@ static int pch_gbe_probe(struct pci_dev *pdev, | |||
2727 | 2715 | ||
2728 | err_free_adapter: | 2716 | err_free_adapter: |
2729 | pch_gbe_hal_phy_hw_reset(&adapter->hw); | 2717 | pch_gbe_hal_phy_hw_reset(&adapter->hw); |
2730 | kfree(adapter->tx_ring); | ||
2731 | kfree(adapter->rx_ring); | ||
2732 | err_iounmap: | ||
2733 | iounmap(adapter->hw.reg); | ||
2734 | err_free_netdev: | 2718 | err_free_netdev: |
2735 | free_netdev(netdev); | 2719 | free_netdev(netdev); |
2736 | err_release_pci: | ||
2737 | pci_release_regions(pdev); | ||
2738 | err_disable_device: | ||
2739 | pci_disable_device(pdev); | ||
2740 | return ret; | 2720 | return ret; |
2741 | } | 2721 | } |
2742 | 2722 | ||