diff options
author | Devesh Sharma <devesh.sharma@emulex.com> | 2014-06-10 10:02:18 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2014-08-01 18:07:36 -0400 |
commit | daac96815e969bd70ed5ad21231be2fc5d99506d (patch) | |
tree | ae8be3dbd44ff031e071d4caa9f0df7d757d38ce | |
parent | a53d77a33494a3d1d5c797df311c975a05d69ef3 (diff) |
RDMA/ocrdma: Delete AH table if ocrdma_init_hw fails after AH table creation
Cleanup the AH table in error path, if HW initialization fails
after AH table creation.
Signed-off-by: Devesh Sharma <devesh.sharma@emulex.com>
Signed-off-by: Selvin Xavier <selvin.xavier@emulex.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c index e6463cb0f988..55308b667649 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_hw.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_hw.c | |||
@@ -1505,6 +1505,7 @@ static void ocrdma_mbx_delete_ah_tbl(struct ocrdma_dev *dev) | |||
1505 | ocrdma_mbx_cmd(dev, (struct ocrdma_mqe *)cmd); | 1505 | ocrdma_mbx_cmd(dev, (struct ocrdma_mqe *)cmd); |
1506 | dma_free_coherent(&pdev->dev, dev->av_tbl.size, dev->av_tbl.va, | 1506 | dma_free_coherent(&pdev->dev, dev->av_tbl.size, dev->av_tbl.va, |
1507 | dev->av_tbl.pa); | 1507 | dev->av_tbl.pa); |
1508 | dev->av_tbl.va = NULL; | ||
1508 | dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->av_tbl.pbl.va, | 1509 | dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->av_tbl.pbl.va, |
1509 | dev->av_tbl.pbl.pa); | 1510 | dev->av_tbl.pbl.pa); |
1510 | kfree(cmd); | 1511 | kfree(cmd); |
@@ -2882,13 +2883,15 @@ int ocrdma_init_hw(struct ocrdma_dev *dev) | |||
2882 | goto conf_err; | 2883 | goto conf_err; |
2883 | status = ocrdma_mbx_get_phy_info(dev); | 2884 | status = ocrdma_mbx_get_phy_info(dev); |
2884 | if (status) | 2885 | if (status) |
2885 | goto conf_err; | 2886 | goto info_attrb_err; |
2886 | status = ocrdma_mbx_get_ctrl_attribs(dev); | 2887 | status = ocrdma_mbx_get_ctrl_attribs(dev); |
2887 | if (status) | 2888 | if (status) |
2888 | goto conf_err; | 2889 | goto info_attrb_err; |
2889 | 2890 | ||
2890 | return 0; | 2891 | return 0; |
2891 | 2892 | ||
2893 | info_attrb_err: | ||
2894 | ocrdma_mbx_delete_ah_tbl(dev); | ||
2892 | conf_err: | 2895 | conf_err: |
2893 | ocrdma_destroy_mq(dev); | 2896 | ocrdma_destroy_mq(dev); |
2894 | mq_err: | 2897 | mq_err: |