net: hns: Simplify the exception sequence in hns_ppe_init()
authorKejian Yan <yankejian@huawei.com>
Sat, 1 Apr 2017 11:03:45 +0000 (12:03 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Apr 2017 21:48:43 +0000 (14:48 -0700)
We need to free all ppe submodule if it fails to initialize ppe by
any fault, so this patch will free all ppe resource before
hns_ppe_init() returns exception situation

Reported-by: JinchuanTian <tianjinchuan1@huawei.com>
Signed-off-by: Kejian Yan <yankejian@huawei.com>
Reviewed-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c

index 6ea872287307bd85b13436a42c1d8aacbad05f2d..eba406bea52fba77381f2aa4196014eef6678cd1 100644 (file)
@@ -496,17 +496,17 @@ void hns_ppe_get_stats(struct hns_ppe_cb *ppe_cb, u64 *data)
  */
 int hns_ppe_init(struct dsaf_device *dsaf_dev)
 {
-       int i, k;
        int ret;
+       int i;
 
        for (i = 0; i < HNS_PPE_COM_NUM; i++) {
                ret = hns_ppe_common_get_cfg(dsaf_dev, i);
                if (ret)
-                       goto get_ppe_cfg_fail;
+                       goto get_cfg_fail;
 
                ret = hns_rcb_common_get_cfg(dsaf_dev, i);
                if (ret)
-                       goto get_rcb_cfg_fail;
+                       goto get_cfg_fail;
 
                hns_ppe_get_cfg(dsaf_dev->ppe_common[i]);
 
@@ -518,13 +518,12 @@ int hns_ppe_init(struct dsaf_device *dsaf_dev)
 
        return 0;
 
-get_rcb_cfg_fail:
-       hns_ppe_common_free_cfg(dsaf_dev, i);
-get_ppe_cfg_fail:
-       for (k = i - 1; k >= 0; k--) {
-               hns_rcb_common_free_cfg(dsaf_dev, k);
-               hns_ppe_common_free_cfg(dsaf_dev, k);
+get_cfg_fail:
+       for (i = 0; i < HNS_PPE_COM_NUM; i++) {
+               hns_rcb_common_free_cfg(dsaf_dev, i);
+               hns_ppe_common_free_cfg(dsaf_dev, i);
        }
+
        return ret;
 }