aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaricheri, Muralidharan <m-karicheri2@ti.com>2015-07-28 18:20:14 -0400
committerDavid S. Miller <davem@davemloft.net>2015-07-29 21:37:41 -0400
commit31a184b7acbc06d894c562ef884a94d6d78d0236 (patch)
tree5842dc91029bafd91c5c5a9619c2a9c49553f050
parentc20afae75c32ec69eccc4ee432fa27d426e85a83 (diff)
net: netcp: ethss: cleanup gbe_probe() and gbe_remove() functions
This patch clean up error handle code to use goto label properly. In some cases, the code unnecessarily use goto instead of just returning the error code. Code also make explicit calls to devm_* APIs on error which is not necessary. In the gbe_remove() also it makes similar calls which is also unnecessary. Also fix few checkpatch warnings Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/ti/netcp_core.c1
-rw-r--r--drivers/net/ethernet/ti/netcp_ethss.c44
2 files changed, 17 insertions, 28 deletions
diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c
index a1c6961323dc..9749dfd78c43 100644
--- a/drivers/net/ethernet/ti/netcp_core.c
+++ b/drivers/net/ethernet/ti/netcp_core.c
@@ -2135,7 +2135,6 @@ static int netcp_remove(struct platform_device *pdev)
2135 WARN(!list_empty(&netcp_device->interface_head), 2135 WARN(!list_empty(&netcp_device->interface_head),
2136 "%s interface list not empty!\n", pdev->name); 2136 "%s interface list not empty!\n", pdev->name);
2137 2137
2138 devm_kfree(&pdev->dev, netcp_device);
2139 pm_runtime_put_sync(&pdev->dev); 2138 pm_runtime_put_sync(&pdev->dev);
2140 pm_runtime_disable(&pdev->dev); 2139 pm_runtime_disable(&pdev->dev);
2141 platform_set_drvdata(pdev, NULL); 2140 platform_set_drvdata(pdev, NULL);
diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
index d11d6172941a..1974a8ae764a 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -2856,14 +2856,13 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2856 &gbe_dev->dma_chan_name); 2856 &gbe_dev->dma_chan_name);
2857 if (ret < 0) { 2857 if (ret < 0) {
2858 dev_err(dev, "missing \"tx-channel\" parameter\n"); 2858 dev_err(dev, "missing \"tx-channel\" parameter\n");
2859 ret = -ENODEV; 2859 return -EINVAL;
2860 goto quit;
2861 } 2860 }
2862 2861
2863 if (!strcmp(node->name, "gbe")) { 2862 if (!strcmp(node->name, "gbe")) {
2864 ret = get_gbe_resource_version(gbe_dev, node); 2863 ret = get_gbe_resource_version(gbe_dev, node);
2865 if (ret) 2864 if (ret)
2866 goto quit; 2865 return ret;
2867 2866
2868 dev_dbg(dev, "ss_version: 0x%08x\n", gbe_dev->ss_version); 2867 dev_dbg(dev, "ss_version: 0x%08x\n", gbe_dev->ss_version);
2869 2868
@@ -2874,22 +2873,20 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2874 else 2873 else
2875 ret = -ENODEV; 2874 ret = -ENODEV;
2876 2875
2877 if (ret)
2878 goto quit;
2879 } else if (!strcmp(node->name, "xgbe")) { 2876 } else if (!strcmp(node->name, "xgbe")) {
2880 ret = set_xgbe_ethss10_priv(gbe_dev, node); 2877 ret = set_xgbe_ethss10_priv(gbe_dev, node);
2881 if (ret) 2878 if (ret)
2882 goto quit; 2879 return ret;
2883 ret = netcp_xgbe_serdes_init(gbe_dev->xgbe_serdes_regs, 2880 ret = netcp_xgbe_serdes_init(gbe_dev->xgbe_serdes_regs,
2884 gbe_dev->ss_regs); 2881 gbe_dev->ss_regs);
2885 if (ret)
2886 goto quit;
2887 } else { 2882 } else {
2888 dev_err(dev, "unknown GBE node(%s)\n", node->name); 2883 dev_err(dev, "unknown GBE node(%s)\n", node->name);
2889 ret = -ENODEV; 2884 ret = -ENODEV;
2890 goto quit;
2891 } 2885 }
2892 2886
2887 if (ret)
2888 return ret;
2889
2893 interfaces = of_get_child_by_name(node, "interfaces"); 2890 interfaces = of_get_child_by_name(node, "interfaces");
2894 if (!interfaces) 2891 if (!interfaces)
2895 dev_err(dev, "could not find interfaces\n"); 2892 dev_err(dev, "could not find interfaces\n");
@@ -2897,11 +2894,11 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2897 ret = netcp_txpipe_init(&gbe_dev->tx_pipe, netcp_device, 2894 ret = netcp_txpipe_init(&gbe_dev->tx_pipe, netcp_device,
2898 gbe_dev->dma_chan_name, gbe_dev->tx_queue_id); 2895 gbe_dev->dma_chan_name, gbe_dev->tx_queue_id);
2899 if (ret) 2896 if (ret)
2900 goto quit; 2897 return ret;
2901 2898
2902 ret = netcp_txpipe_open(&gbe_dev->tx_pipe); 2899 ret = netcp_txpipe_open(&gbe_dev->tx_pipe);
2903 if (ret) 2900 if (ret)
2904 goto quit; 2901 return ret;
2905 2902
2906 /* Create network interfaces */ 2903 /* Create network interfaces */
2907 INIT_LIST_HEAD(&gbe_dev->gbe_intf_head); 2904 INIT_LIST_HEAD(&gbe_dev->gbe_intf_head);
@@ -2916,6 +2913,7 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2916 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves) 2913 if (gbe_dev->num_slaves >= gbe_dev->max_num_slaves)
2917 break; 2914 break;
2918 } 2915 }
2916 of_node_put(interfaces);
2919 2917
2920 if (!gbe_dev->num_slaves) 2918 if (!gbe_dev->num_slaves)
2921 dev_warn(dev, "No network interface configured\n"); 2919 dev_warn(dev, "No network interface configured\n");
@@ -2928,9 +2926,10 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2928 of_node_put(secondary_ports); 2926 of_node_put(secondary_ports);
2929 2927
2930 if (!gbe_dev->num_slaves) { 2928 if (!gbe_dev->num_slaves) {
2931 dev_err(dev, "No network interface or secondary ports configured\n"); 2929 dev_err(dev,
2930 "No network interface or secondary ports configured\n");
2932 ret = -ENODEV; 2931 ret = -ENODEV;
2933 goto quit; 2932 goto free_sec_ports;
2934 } 2933 }
2935 2934
2936 memset(&ale_params, 0, sizeof(ale_params)); 2935 memset(&ale_params, 0, sizeof(ale_params));
@@ -2944,7 +2943,7 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2944 if (!gbe_dev->ale) { 2943 if (!gbe_dev->ale) {
2945 dev_err(gbe_dev->dev, "error initializing ale engine\n"); 2944 dev_err(gbe_dev->dev, "error initializing ale engine\n");
2946 ret = -ENODEV; 2945 ret = -ENODEV;
2947 goto quit; 2946 goto free_sec_ports;
2948 } else { 2947 } else {
2949 dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n"); 2948 dev_dbg(gbe_dev->dev, "Created a gbe ale engine\n");
2950 } 2949 }
@@ -2960,14 +2959,8 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
2960 *inst_priv = gbe_dev; 2959 *inst_priv = gbe_dev;
2961 return 0; 2960 return 0;
2962 2961
2963quit: 2962free_sec_ports:
2964 if (gbe_dev->hw_stats) 2963 free_secondary_ports(gbe_dev);
2965 devm_kfree(dev, gbe_dev->hw_stats);
2966 cpsw_ale_destroy(gbe_dev->ale);
2967 if (gbe_dev->ss_regs)
2968 devm_iounmap(dev, gbe_dev->ss_regs);
2969 of_node_put(interfaces);
2970 devm_kfree(dev, gbe_dev);
2971 return ret; 2964 return ret;
2972} 2965}
2973 2966
@@ -3040,12 +3033,9 @@ static int gbe_remove(struct netcp_device *netcp_device, void *inst_priv)
3040 free_secondary_ports(gbe_dev); 3033 free_secondary_ports(gbe_dev);
3041 3034
3042 if (!list_empty(&gbe_dev->gbe_intf_head)) 3035 if (!list_empty(&gbe_dev->gbe_intf_head))
3043 dev_alert(gbe_dev->dev, "unreleased ethss interfaces present\n"); 3036 dev_alert(gbe_dev->dev,
3037 "unreleased ethss interfaces present\n");
3044 3038
3045 devm_kfree(gbe_dev->dev, gbe_dev->hw_stats);
3046 devm_iounmap(gbe_dev->dev, gbe_dev->ss_regs);
3047 memset(gbe_dev, 0x00, sizeof(*gbe_dev));
3048 devm_kfree(gbe_dev->dev, gbe_dev);
3049 return 0; 3039 return 0;
3050} 3040}
3051 3041