RDMA/ocrdma: Delete AH table if ocrdma_init_hw fails after AH table creation
authorDevesh Sharma <devesh.sharma@emulex.com>
Tue, 10 Jun 2014 14:02:18 +0000 (19:32 +0530)
committerRoland Dreier <roland@purestorage.com>
Fri, 1 Aug 2014 22:07:36 +0000 (15:07 -0700)
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>
drivers/infiniband/hw/ocrdma/ocrdma_hw.c

index e6463cb0f988e43279aef4b1fa33d2b286547cab..55308b667649e8b806b1e141029424fea2e489d3 100644 (file)
@@ -1505,6 +1505,7 @@ static void ocrdma_mbx_delete_ah_tbl(struct ocrdma_dev *dev)
        ocrdma_mbx_cmd(dev, (struct ocrdma_mqe *)cmd);
        dma_free_coherent(&pdev->dev, dev->av_tbl.size, dev->av_tbl.va,
                          dev->av_tbl.pa);
+       dev->av_tbl.va = NULL;
        dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->av_tbl.pbl.va,
                          dev->av_tbl.pbl.pa);
        kfree(cmd);
@@ -2882,13 +2883,15 @@ int ocrdma_init_hw(struct ocrdma_dev *dev)
                goto conf_err;
        status = ocrdma_mbx_get_phy_info(dev);
        if (status)
-               goto conf_err;
+               goto info_attrb_err;
        status = ocrdma_mbx_get_ctrl_attribs(dev);
        if (status)
-               goto conf_err;
+               goto info_attrb_err;
 
        return 0;
 
+info_attrb_err:
+       ocrdma_mbx_delete_ah_tbl(dev);
 conf_err:
        ocrdma_destroy_mq(dev);
 mq_err: