From: Chengchang Tang tangchengchang@huawei.com
For QPs which do not have an SQ, such as XRC TGT,the send_cq pointer will not be initailized. Since the supported max_gs will be 0 in this case, check it and return before referencing the send_cq pointer.
Fixes: cbdf5e32a855 ("libhns: Reimplement verbs of post_send and post_recv for hip08 RoCE") Signed-off-by: Chengchang Tang tangchengchang@huawei.com Signed-off-by: Junxian Huang huangjunxian6@hisilicon.com --- providers/hns/hns_roce_u_hw_v2.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c index 88bf55fd1..9a5076200 100644 --- a/providers/hns/hns_roce_u_hw_v2.c +++ b/providers/hns/hns_roce_u_hw_v2.c @@ -1288,15 +1288,15 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, sge_info.start_idx = qp->next_sge; /* start index of extend sge */
for (nreq = 0; wr; ++nreq, wr = wr->next) { - if (hns_roce_v2_wq_overflow(&qp->sq, nreq, - to_hr_cq(qp->verbs_qp.qp.send_cq))) { - ret = ENOMEM; + if (wr->num_sge > (int)qp->sq.max_gs) { + ret = qp->sq.max_gs > 0 ? EINVAL : EOPNOTSUPP; *bad_wr = wr; goto out; }
- if (wr->num_sge > qp->sq.max_gs) { - ret = EINVAL; + if (hns_roce_v2_wq_overflow(&qp->sq, nreq, + to_hr_cq(qp->verbs_qp.qp.send_cq))) { + ret = ENOMEM; *bad_wr = wr; goto out; }