libhns: Fixes some bugs for libhns
driver inclusion category: bugfix bugzilla: https://gitee.com/src-openeuler/rdma-core/issues/IB66RT ------------------------------------------------------------------ Changes to be committed: modified: 0040-libhns-Fix-memory-leakage-when-DCA-is-enabled.patch new file: 0045-libhns-fix-incorrectly-using-fixed-pagesize.patch new file: 0046-libhns-fix-missing-new-IO-support-for-DCA.patch Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
This commit is contained in:
parent
393ab2465c
commit
dff5546a58
@ -1,4 +1,4 @@
|
||||
From a73b31041073a45b04535c4183b39195bbebe514 Mon Sep 17 00:00:00 2001
|
||||
From cf0f83bda170e85fe425c02965af3c28be9368aa Mon Sep 17 00:00:00 2001
|
||||
From: wenglianfa <wenglianfa@huawei.com>
|
||||
Date: Thu, 25 Jul 2024 11:06:01 +0800
|
||||
Subject: [PATCH] libhns: Fix memory leakage when DCA is enabled
|
||||
@ -17,18 +17,21 @@ Fixes:26e79aa7eb8d ("libhns: Add support for attaching QP's WQE buffer")
|
||||
Signed-off-by: wenglianfa <wenglianfa@huawei.com>
|
||||
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
|
||||
---
|
||||
providers/hns/hns_roce_u_verbs.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
providers/hns/hns_roce_u_verbs.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c
|
||||
index e30880c..c733b21 100644
|
||||
index e30880c..bfa25ff 100644
|
||||
--- a/providers/hns/hns_roce_u_verbs.c
|
||||
+++ b/providers/hns/hns_roce_u_verbs.c
|
||||
@@ -1357,7 +1357,8 @@ static void qp_free_wqe(struct hns_roce_qp *qp)
|
||||
@@ -1357,7 +1357,11 @@ static void qp_free_wqe(struct hns_roce_qp *qp)
|
||||
|
||||
if (qp->rq.wqe_cnt)
|
||||
free(qp->rq.wrid);
|
||||
- hns_roce_free_buf(&qp->buf);
|
||||
+
|
||||
+ if (qp->dca_wqe.bufs)
|
||||
+ free(qp->dca_wqe.bufs);
|
||||
+ else
|
||||
+ hns_roce_free_buf(&qp->buf);
|
||||
}
|
||||
|
||||
110
0045-libhns-fix-incorrectly-using-fixed-pagesize.patch
Normal file
110
0045-libhns-fix-incorrectly-using-fixed-pagesize.patch
Normal file
@ -0,0 +1,110 @@
|
||||
From 7bd22fed52a1828b0d44a990b52266e9e1d92b5d Mon Sep 17 00:00:00 2001
|
||||
From: Chengchang Tang <tangchengchang@huawei.com>
|
||||
Date: Tue, 30 Jan 2024 21:00:46 +0800
|
||||
Subject: [PATCH 45/46] libhns: fix incorrectly using fixed pagesize
|
||||
|
||||
driver inclusion
|
||||
category: bugfix
|
||||
bugzilla: https://gitee.com/src-openeuler/rdma-core/issues/IB66RT
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
Currently, actually used page size is fixed, causing the flexible wqe
|
||||
buffer size feature to not take effect.
|
||||
|
||||
Fixes: 9ab7600d832b ("libhns: Add support for attaching QP's WQE buffer")
|
||||
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
|
||||
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
|
||||
---
|
||||
providers/hns/hns_roce_u_verbs.c | 24 +++++++++++++-----------
|
||||
1 file changed, 13 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/providers/hns/hns_roce_u_verbs.c b/providers/hns/hns_roce_u_verbs.c
|
||||
index bce215e..848f836 100644
|
||||
--- a/providers/hns/hns_roce_u_verbs.c
|
||||
+++ b/providers/hns/hns_roce_u_verbs.c
|
||||
@@ -1296,14 +1296,14 @@ static void free_recv_rinl_buf(struct hns_roce_rinl_buf *rinl_buf)
|
||||
|
||||
static void get_best_multi_region_pg_shift(struct hns_roce_device *hr_dev,
|
||||
struct hns_roce_context *ctx,
|
||||
- struct hns_roce_qp *qp)
|
||||
+ struct hns_roce_qp *qp, bool dca_en)
|
||||
{
|
||||
uint32_t ext_sge_size;
|
||||
uint32_t sq_size;
|
||||
uint32_t rq_size;
|
||||
uint8_t pg_shift;
|
||||
|
||||
- if (!(ctx->config & HNS_ROCE_UCTX_RSP_DYN_QP_PGSZ)) {
|
||||
+ if (!(ctx->config & HNS_ROCE_UCTX_RSP_DYN_QP_PGSZ || dca_en)) {
|
||||
qp->pageshift = HNS_HW_PAGE_SHIFT;
|
||||
return;
|
||||
}
|
||||
@@ -1334,7 +1334,7 @@ static void get_best_multi_region_pg_shift(struct hns_roce_device *hr_dev,
|
||||
|
||||
static int calc_qp_buff_size(struct hns_roce_device *hr_dev,
|
||||
struct hns_roce_context *ctx,
|
||||
- struct hns_roce_qp *qp)
|
||||
+ struct hns_roce_qp *qp, bool dca_en)
|
||||
{
|
||||
struct hns_roce_wq *sq = &qp->sq;
|
||||
struct hns_roce_wq *rq = &qp->rq;
|
||||
@@ -1342,7 +1342,7 @@ static int calc_qp_buff_size(struct hns_roce_device *hr_dev,
|
||||
unsigned int size;
|
||||
|
||||
qp->buf_size = 0;
|
||||
- get_best_multi_region_pg_shift(hr_dev, ctx, qp);
|
||||
+ get_best_multi_region_pg_shift(hr_dev, ctx, qp, dca_en);
|
||||
page_size = 1 << qp->pageshift;
|
||||
|
||||
/* SQ WQE */
|
||||
@@ -1384,7 +1384,7 @@ static inline bool check_qp_support_dca(struct hns_roce_dca_ctx *dca_ctx,
|
||||
if (hns_attr &&
|
||||
(hns_attr->comp_mask & HNSDV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS) &&
|
||||
(hns_attr->create_flags & HNSDV_QP_CREATE_ENABLE_DCA_MODE))
|
||||
- return true;
|
||||
+ return dca_ctx->max_size > 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1408,9 +1408,12 @@ static int qp_alloc_wqe(struct ibv_qp_init_attr_ex *attr,
|
||||
struct hns_roce_qp *qp, struct hns_roce_context *ctx)
|
||||
{
|
||||
struct hns_roce_device *hr_dev = to_hr_dev(ctx->ibv_ctx.context.device);
|
||||
+ bool dca_en = check_qp_support_dca(&ctx->dca_ctx, attr, hns_attr);
|
||||
+ int ret;
|
||||
|
||||
- if (calc_qp_buff_size(hr_dev, ctx, qp))
|
||||
- return -EINVAL;
|
||||
+ ret = calc_qp_buff_size(hr_dev, ctx, qp, dca_en);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
qp->sq.wrid = malloc(qp->sq.wqe_cnt * sizeof(uint64_t));
|
||||
if (!qp->sq.wrid)
|
||||
@@ -1428,19 +1431,18 @@ static int qp_alloc_wqe(struct ibv_qp_init_attr_ex *attr,
|
||||
goto err_alloc;
|
||||
}
|
||||
|
||||
- if (check_qp_support_dca(&ctx->dca_ctx, attr, hns_attr) &&
|
||||
- ctx->dca_ctx.max_size > 0) {
|
||||
+ if (check_qp_support_dca(&ctx->dca_ctx, attr, hns_attr)) {
|
||||
/* when DCA is enabled, use a buffer list to store page addr */
|
||||
qp->buf.buf = NULL;
|
||||
qp->dca_wqe.max_cnt = hr_hw_page_count(qp->buf_size);
|
||||
- qp->dca_wqe.shift = HNS_HW_PAGE_SHIFT;
|
||||
+ qp->dca_wqe.shift = qp->pageshift;
|
||||
qp->dca_wqe.bufs = calloc(qp->dca_wqe.max_cnt, sizeof(void *));
|
||||
if (!qp->dca_wqe.bufs)
|
||||
goto err_alloc;
|
||||
verbs_debug(&ctx->ibv_ctx, "alloc DCA buf.\n");
|
||||
} else {
|
||||
if (hns_roce_alloc_buf(&qp->buf, qp->buf_size,
|
||||
- HNS_HW_PAGE_SIZE))
|
||||
+ 1 << qp->pageshift))
|
||||
goto err_alloc;
|
||||
}
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
55
0046-libhns-fix-missing-new-IO-support-for-DCA.patch
Normal file
55
0046-libhns-fix-missing-new-IO-support-for-DCA.patch
Normal file
@ -0,0 +1,55 @@
|
||||
From 199b2f78ff9eeeb25acc78f9da495ae58877807a Mon Sep 17 00:00:00 2001
|
||||
From: Chengchang Tang <tangchengchang@huawei.com>
|
||||
Date: Tue, 30 Jan 2024 21:28:44 +0800
|
||||
Subject: [PATCH 46/46] libhns: fix missing new IO support for DCA
|
||||
|
||||
driver inclusion
|
||||
category: bugfix
|
||||
bugzilla: https://gitee.com/src-openeuler/rdma-core/issues/IBSL67
|
||||
|
||||
------------------------------------------------------------------
|
||||
|
||||
New IO related support has been missed for DCA.
|
||||
|
||||
Fixes: 9ab7600d832b ("libhns: Add support for attaching QP's WQE buffer")
|
||||
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
|
||||
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
|
||||
---
|
||||
providers/hns/hns_roce_u_hw_v2.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c
|
||||
index aadea7a..3137111 100644
|
||||
--- a/providers/hns/hns_roce_u_hw_v2.c
|
||||
+++ b/providers/hns/hns_roce_u_hw_v2.c
|
||||
@@ -2191,6 +2191,8 @@ static int wc_start_poll_cq(struct ibv_cq_ex *current,
|
||||
}
|
||||
|
||||
err = hns_roce_poll_one(ctx, &qp, cq, NULL);
|
||||
+ if (qp && check_dca_detach_enable(qp))
|
||||
+ dca_detach_qp_buf(ctx, qp);
|
||||
|
||||
start_poll_done:
|
||||
if (err != V2_CQ_OK)
|
||||
@@ -2210,6 +2212,8 @@ static int wc_next_poll_cq(struct ibv_cq_ex *current)
|
||||
return hns_roce_poll_one_swc(cq, NULL);
|
||||
|
||||
err = hns_roce_poll_one(ctx, &qp, cq, NULL);
|
||||
+ if (qp && check_dca_detach_enable(qp))
|
||||
+ dca_detach_qp_buf(ctx, qp);
|
||||
if (err != V2_CQ_OK)
|
||||
return err;
|
||||
|
||||
@@ -2408,6 +2412,9 @@ init_rc_wqe(struct hns_roce_qp *qp, uint64_t wr_id, unsigned int opcode)
|
||||
hr_reg_write_bool(wqe, RCWQE_SE, send_flags & IBV_SEND_SOLICITED);
|
||||
hr_reg_clear(wqe, RCWQE_INLINE);
|
||||
|
||||
+ if (check_qp_dca_enable(qp))
|
||||
+ fill_rc_dca_fields(qp->verbs_qp.qp.qp_num, wqe);
|
||||
+
|
||||
qp->sq.wrid[wqe_idx] = wr_id;
|
||||
qp->cur_wqe = wqe;
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Name: rdma-core
|
||||
Version: 50.0
|
||||
Release: 22
|
||||
Release: 23
|
||||
Summary: RDMA core userspace libraries and daemons
|
||||
License: GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
|
||||
Url: https://github.com/linux-rdma/rdma-core
|
||||
@ -49,6 +49,8 @@ patch41: 0041-libhns-Fix-coredump-during-QP-destruction-when-send_.patch
|
||||
patch42: 0042-libhns-Add-error-logs-to-help-diagnosis.patch
|
||||
patch43: 0043-libhns-Fix-missing-fields-for-SRQ-WC.patch
|
||||
patch44: 0044-libxscale-Add-Yunsilicon-User-Space-RDMA-Driver.patch
|
||||
patch45: 0045-libhns-fix-incorrectly-using-fixed-pagesize.patch
|
||||
patch46: 0046-libhns-fix-missing-new-IO-support-for-DCA.patch
|
||||
|
||||
BuildRequires: binutils cmake >= 2.8.11 gcc libudev-devel pkgconfig pkgconfig(libnl-3.0)
|
||||
BuildRequires: pkgconfig(libnl-route-3.0) systemd systemd-devel
|
||||
@ -626,6 +628,13 @@ fi
|
||||
%doc %{_docdir}/%{name}-%{version}/70-persistent-ipoib.rules
|
||||
|
||||
%changelog
|
||||
* Mon Mar 31 2025 Xinghai Cen <cenxinghai@h-partners.com> - 50.0-23
|
||||
- Type: bugfix
|
||||
- ID: NA
|
||||
- SUG: NA
|
||||
- DESC: Fix some bugs for libhns
|
||||
|
||||
|
||||
* Wed Feb 26 2025 Xin Tian <tianx@yunsilicon.com> - 50.0-22
|
||||
- Type: requirement
|
||||
- ID: NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user