From 8fbb85bae3fd2632da80e77d02bbbe73aac85f88 Mon Sep 17 00:00:00 2001 From: Wenpeng Liang Date: Fri, 26 Nov 2021 17:55:32 +0800 Subject: libhns: Fix the problem that XRC does not need to create RQ XRC QP does not require RQ, so RQ should not be created. Fixes: 4ed874a5cf30 ("libhns: Add support for XRC for HIP09") Signed-off-by: Wenpeng Liang --- providers/hns/hns_roce_u_verbs.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c index 923c005..557d075 100644 --- a/providers/hns/hns_roce_u_verbs.c +++ b/providers/hns/hns_roce_u_verbs.c @@ -774,12 +774,22 @@ static int check_qp_create_mask(struct hns_roce_context *ctx, return 0; } +static int hns_roce_qp_has_rq(struct ibv_qp_init_attr_ex *attr) +{ + if (attr->qp_type == IBV_QPT_XRC_SEND || + attr->qp_type == IBV_QPT_XRC_RECV || attr->srq) + return 0; + + return 1; +} + static int verify_qp_create_cap(struct hns_roce_context *ctx, struct ibv_qp_init_attr_ex *attr) { struct hns_roce_device *hr_dev = to_hr_dev(ctx->ibv_ctx.context.device); struct ibv_qp_cap *cap = &attr->cap; uint32_t min_wqe_num; + int has_rq; if (!cap->max_send_wr && attr->qp_type != IBV_QPT_XRC_RECV) return -EINVAL; @@ -790,7 +800,8 @@ static int verify_qp_create_cap(struct hns_roce_context *ctx, cap->max_recv_sge > ctx->max_sge) return -EINVAL; - if (attr->srq) { + has_rq = hns_roce_qp_has_rq(attr); + if (!has_rq) { cap->max_recv_wr = 0; cap->max_recv_sge = 0; } -- 2.27.0