RDMA/hns: Bugfix for creating qp attached to srq
When create a qp and attached to srq, rq will no longer be used
and the members of rq will be set zero. As a result, the wrid
of rq will not be allocated and used.
Fixes: 926a01dc00
("RDMA/hns: Add QP operations support for hip08 SoC")
Signed-off-by: Lijun Ou <oulijun@huawei.com>
Link: https://lore.kernel.org/r/1565343666-73193-3-git-send-email-oulijun@huawei.com
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
0e1aa6f095
commit
76827087bb
|
@ -854,11 +854,18 @@ static int hns_roce_create_qp_common(struct hns_roce_dev *hr_dev,
|
|||
|
||||
hr_qp->sq.wrid = kcalloc(hr_qp->sq.wqe_cnt, sizeof(u64),
|
||||
GFP_KERNEL);
|
||||
hr_qp->rq.wrid = kcalloc(hr_qp->rq.wqe_cnt, sizeof(u64),
|
||||
GFP_KERNEL);
|
||||
if (!hr_qp->sq.wrid || !hr_qp->rq.wrid) {
|
||||
if (ZERO_OR_NULL_PTR(hr_qp->sq.wrid)) {
|
||||
ret = -ENOMEM;
|
||||
goto err_wrid;
|
||||
goto err_get_bufs;
|
||||
}
|
||||
|
||||
if (hr_qp->rq.wqe_cnt) {
|
||||
hr_qp->rq.wrid = kcalloc(hr_qp->rq.wqe_cnt, sizeof(u64),
|
||||
GFP_KERNEL);
|
||||
if (ZERO_OR_NULL_PTR(hr_qp->rq.wrid)) {
|
||||
ret = -ENOMEM;
|
||||
goto err_sq_wrid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -944,8 +951,8 @@ err_wrid:
|
|||
hns_roce_qp_has_rq(init_attr))
|
||||
hns_roce_db_unmap_user(uctx, &hr_qp->rdb);
|
||||
} else {
|
||||
kfree(hr_qp->sq.wrid);
|
||||
kfree(hr_qp->rq.wrid);
|
||||
if (hr_qp->rq.wqe_cnt)
|
||||
kfree(hr_qp->rq.wrid);
|
||||
}
|
||||
|
||||
err_sq_dbmap:
|
||||
|
@ -956,6 +963,10 @@ err_sq_dbmap:
|
|||
hns_roce_qp_has_sq(init_attr))
|
||||
hns_roce_db_unmap_user(uctx, &hr_qp->sdb);
|
||||
|
||||
err_sq_wrid:
|
||||
if (!udata)
|
||||
kfree(hr_qp->sq.wrid);
|
||||
|
||||
err_get_bufs:
|
||||
hns_roce_free_buf_list(buf_list, hr_qp->region_cnt);
|
||||
|
||||
|
|
Loading…
Reference in New Issue