These patches are mainly related to IO operations. Signed-off-by: zhengfeng luo <luozhengfeng@h-partners.com> Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
From 8fbb85bae3fd2632da80e77d02bbbe73aac85f88 Mon Sep 17 00:00:00 2001
|
|
From: Wenpeng Liang <liangwenpeng@huawei.com>
|
|
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 <liangwenpeng@huawei.com>
|
|
---
|
|
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
|
|
|