libhns: Two bugfixes in post_send flow

Two bugfixes in post_send flow:
libhns: Fix out-of-order issue of requester when setting FENCE
libhns: Fix reference to uninitialized cq pointer

Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
(cherry picked from commit 4793d5d71084589b70422fc241883aef0784e847)
This commit is contained in:
Xinghai Cen 2024-11-15 14:56:22 +08:00 committed by openeuler-sync-bot
parent cb1fee4bd4
commit 9566f8a6ca
3 changed files with 127 additions and 1 deletions

View File

@ -0,0 +1,50 @@
From f13f4391bb2c0b5a1c876f36b99242615bdae88b Mon Sep 17 00:00:00 2001
From: Junxian Huang <huangjunxian6@hisilicon.com>
Date: Fri, 8 Nov 2024 17:04:09 +0800
Subject: [PATCH] libhns: Fix out-of-order issue of requester when setting
FENCE
mainline inclusion
from mainline-master
commit c4119911c212aaa552c9cb928fba0a696640c9b5
category: bugfix
bugzilla: https://gitee.com/src-openeuler/rdma-core/issues/IB3ZHQ
CVE: NA
Reference: https://github.com/linux-rdma/rdma-core/pull/1513/commits/c4119911c212aaa552c9cb928fba0a696640c9b5
----------------------------------------------------------------------
The FENCE indicator in hns WQE doesn't ensure that response data from
a previous Read/Atomic operation has been written to the requester's
memory before the subsequent Send/Write operation is processed. This
may result in the subsequent Send/Write operation accessing the original
data in memory instead of the expected response data.
Unlike FENCE, the SO (Strong Order) indicator blocks the subsequent
operation until the previous response data is written to memory and a
bresp is returned. Set the SO indicator instead of FENCE to maintain
strict order.
Fixes: cbdf5e32a855 ("libhns: Reimplement verbs of post_send and post_recv for hip08 RoCE")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
---
providers/hns/hns_roce_u_hw_v2.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c
index 9371150..2debcb3 100644
--- a/providers/hns/hns_roce_u_hw_v2.c
+++ b/providers/hns/hns_roce_u_hw_v2.c
@@ -1527,7 +1527,7 @@ static int set_rc_wqe(void *wqe, struct hns_roce_qp *qp, struct ibv_send_wr *wr,
hr_reg_write_bool(wqe, RCWQE_CQE,
!!(wr->send_flags & IBV_SEND_SIGNALED));
- hr_reg_write_bool(wqe, RCWQE_FENCE,
+ hr_reg_write_bool(wqe, RCWQE_SO,
!!(wr->send_flags & IBV_SEND_FENCE));
hr_reg_write_bool(wqe, RCWQE_SE,
!!(wr->send_flags & IBV_SEND_SOLICITED));
--
2.25.1

View File

@ -0,0 +1,68 @@
From ccd9858cdf31573c447b43f7f7977e6b61869b82 Mon Sep 17 00:00:00 2001
From: Chengchang Tang <tangchengchang@huawei.com>
Date: Fri, 8 Nov 2024 17:04:08 +0800
Subject: [PATCH] libhns: Fix reference to uninitialized cq pointer
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
mainline inclusion
from mainline-master
commit 18e3117cdd161a3f40b8a917f24cfb5227a1d75a
category: bugfix
bugzilla: https://gitee.com/src-openeuler/rdma-core/issues/IB3ZHQ
CVE: NA
Reference: https://github.com/linux-rdma/rdma-core/pull/1513/commits/18e3117cdd161a3f40b8a917f24cfb5227a1d75a
----------------------------------------------------------------------
For QPs which do not have an SQ, such as XRC TGTthe 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>
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
---
providers/hns/hns_roce_u_hw_v2.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c
index 2debcb3..465ef1e 100644
--- a/providers/hns/hns_roce_u_hw_v2.c
+++ b/providers/hns/hns_roce_u_hw_v2.c
@@ -1579,7 +1579,7 @@ int hns_roce_u_v2_post_send(struct ibv_qp *ibvqp, struct ibv_send_wr *wr,
struct hns_roce_context *ctx = to_hr_ctx(ibvqp->context);
struct hns_roce_qp *qp = to_hr_qp(ibvqp);
struct hns_roce_sge_info sge_info = {};
- struct hns_roce_rc_sq_wqe *wqe;
+ struct hns_roce_rc_sq_wqe *wqe = NULL;
struct ibv_qp_attr attr = {};
unsigned int wqe_idx, nreq;
int ret;
@@ -1595,15 +1595,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;
}
--
2.25.1

View File

@ -1,6 +1,6 @@
Name: rdma-core
Version: 50.0
Release: 14
Release: 15
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
@ -42,6 +42,8 @@ patch33: 0033-libhns-Fix-missing-flag-when-creating-qp-by-hnsdv_cr.patch
patch34: 0034-librdmacm-Fix-an-overflow-bug-in-qsort-comparison-function.patch
patch35: 0035-Fix-the-stride-calculation-for-MSN-PSN-area.patch
patch36: 0036-add-ZTE-Dinghai-rdma-driver.patch
patch37: 0037-libhns-Fix-out-of-order-issue-of-requester-when-sett.patch
patch38: 0038-libhns-Fix-reference-to-uninitialized-cq-pointer.patch
BuildRequires: binutils cmake >= 2.8.11 gcc libudev-devel pkgconfig pkgconfig(libnl-3.0)
BuildRequires: pkgconfig(libnl-route-3.0) systemd systemd-devel
@ -621,6 +623,12 @@ fi
%doc %{_docdir}/%{name}-%{version}/70-persistent-ipoib.rules
%changelog
* Fri Nov 15 2024 Xinghai Cen <cenxinghai@h-partners.com> - 50.0-15
- Type: bugfix
- ID: NA
- SUG: NA
- DESC: Two bugfixes in post_send flow
* Fri Nov 08 2024 Funda Wang <fundawang@yeah.net> - 50.0-14
- adopt to new cmake macro
- migrated to SPDX license