aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/oki-semi
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2013-06-28 07:02:54 -0400
committerDavid S. Miller <davem@davemloft.net>2013-06-29 00:37:48 -0400
commit29cc436cb90da4cabf404d8ceedc762fc7387b15 (patch)
tree27a0b651fb6b5705417e5a22bde9686b5e122f09 /drivers/net/ethernet/oki-semi
parent453ca931f515161902dbb325d7f39a992c3059ce (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.c50
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 */
637static int pch_gbe_alloc_queues(struct pch_gbe_adapter *adapter) 637static 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
2600static int pch_gbe_probe(struct pci_dev *pdev, 2594static 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
2728err_free_adapter: 2716err_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);
2732err_iounmap:
2733 iounmap(adapter->hw.reg);
2734err_free_netdev: 2718err_free_netdev:
2735 free_netdev(netdev); 2719 free_netdev(netdev);
2736err_release_pci:
2737 pci_release_regions(pdev);
2738err_disable_device:
2739 pci_disable_device(pdev);
2740 return ret; 2720 return ret;
2741} 2721}
2742 2722