!218 libhns: Fixes some bugs for libhns
From: @cxh269 Reviewed-by: @hginjgerx Signed-off-by: @hginjgerx
This commit is contained in:
commit
7d36592178
@ -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>
|
From: wenglianfa <wenglianfa@huawei.com>
|
||||||
Date: Thu, 25 Jul 2024 11:06:01 +0800
|
Date: Thu, 25 Jul 2024 11:06:01 +0800
|
||||||
Subject: [PATCH] libhns: Fix memory leakage when DCA is enabled
|
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: wenglianfa <wenglianfa@huawei.com>
|
||||||
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
|
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
|
||||||
---
|
---
|
||||||
providers/hns/hns_roce_u_verbs.c | 3 ++-
|
providers/hns/hns_roce_u_verbs.c | 6 +++++-
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
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
|
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
|
--- a/providers/hns/hns_roce_u_verbs.c
|
||||||
+++ b/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)
|
if (qp->rq.wqe_cnt)
|
||||||
free(qp->rq.wrid);
|
free(qp->rq.wrid);
|
||||||
- hns_roce_free_buf(&qp->buf);
|
- hns_roce_free_buf(&qp->buf);
|
||||||
|
+
|
||||||
|
+ if (qp->dca_wqe.bufs)
|
||||||
|
+ free(qp->dca_wqe.bufs);
|
||||||
+ else
|
+ else
|
||||||
+ hns_roce_free_buf(&qp->buf);
|
+ 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
|
Name: rdma-core
|
||||||
Version: 50.0
|
Version: 50.0
|
||||||
Release: 22
|
Release: 23
|
||||||
Summary: RDMA core userspace libraries and daemons
|
Summary: RDMA core userspace libraries and daemons
|
||||||
License: GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
|
License: GPL-2.0-only OR BSD-2-Clause AND BSD-3-Clause
|
||||||
Url: https://github.com/linux-rdma/rdma-core
|
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
|
patch42: 0042-libhns-Add-error-logs-to-help-diagnosis.patch
|
||||||
patch43: 0043-libhns-Fix-missing-fields-for-SRQ-WC.patch
|
patch43: 0043-libhns-Fix-missing-fields-for-SRQ-WC.patch
|
||||||
patch44: 0044-libxscale-Add-Yunsilicon-User-Space-RDMA-Driver.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: binutils cmake >= 2.8.11 gcc libudev-devel pkgconfig pkgconfig(libnl-3.0)
|
||||||
BuildRequires: pkgconfig(libnl-route-3.0) systemd systemd-devel
|
BuildRequires: pkgconfig(libnl-route-3.0) systemd systemd-devel
|
||||||
@ -626,6 +628,13 @@ fi
|
|||||||
%doc %{_docdir}/%{name}-%{version}/70-persistent-ipoib.rules
|
%doc %{_docdir}/%{name}-%{version}/70-persistent-ipoib.rules
|
||||||
|
|
||||||
%changelog
|
%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
|
* Wed Feb 26 2025 Xin Tian <tianx@yunsilicon.com> - 50.0-22
|
||||||
- Type: requirement
|
- Type: requirement
|
||||||
- ID: NA
|
- ID: NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user