qed: Don't free a QP more than once
If QP is in reset state then there are no resources to free so avoid freeing any. Signed-off-by: Ram Amrani <Ram.Amrani@cavium.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c5212b943d
commit
300c0d7c23
|
@ -1849,6 +1849,7 @@ err_resp:
|
|||
|
||||
static int qed_roce_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp)
|
||||
{
|
||||
struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info;
|
||||
u32 num_invalidated_mw = 0;
|
||||
u32 num_bound_mw = 0;
|
||||
u32 start_cid;
|
||||
|
@ -1863,12 +1864,15 @@ static int qed_roce_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = qed_roce_sp_destroy_qp_responder(p_hwfn, qp, &num_invalidated_mw);
|
||||
if (qp->cur_state != QED_ROCE_QP_STATE_RESET) {
|
||||
rc = qed_roce_sp_destroy_qp_responder(p_hwfn, qp,
|
||||
&num_invalidated_mw);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Send destroy requester ramrod */
|
||||
rc = qed_roce_sp_destroy_qp_requester(p_hwfn, qp, &num_bound_mw);
|
||||
rc = qed_roce_sp_destroy_qp_requester(p_hwfn, qp,
|
||||
&num_bound_mw);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
@ -1878,20 +1882,21 @@ static int qed_roce_destroy_qp(struct qed_hwfn *p_hwfn, struct qed_rdma_qp *qp)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
spin_lock_bh(&p_hwfn->p_rdma_info->lock);
|
||||
spin_lock_bh(&p_rdma_info->lock);
|
||||
|
||||
start_cid = qed_cxt_get_proto_cid_start(p_hwfn,
|
||||
p_hwfn->p_rdma_info->proto);
|
||||
p_rdma_info->proto);
|
||||
|
||||
/* Release responder's icid */
|
||||
qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->cid_map,
|
||||
qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map,
|
||||
qp->icid - start_cid);
|
||||
|
||||
/* Release requester's icid */
|
||||
qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->cid_map,
|
||||
qed_bmap_release_id(p_hwfn, &p_rdma_info->cid_map,
|
||||
qp->icid + 1 - start_cid);
|
||||
|
||||
spin_unlock_bh(&p_hwfn->p_rdma_info->lock);
|
||||
spin_unlock_bh(&p_rdma_info->lock);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue