Fixed several bugs in libhns: libhns: Add error logs to help diagnosis libhns: Fix coredump during QP destruction when send_cq == recv_cq libhns: Fix memory leakage when DCA is enabled libhns: Fix the exception branch of wr_start() is not locked libhns: Fix reference to uninitialized cq pointer libhns: Fix out-of-order issue of requester when setting FENCE
55 lines
1.7 KiB
Diff
55 lines
1.7 KiB
Diff
From acd954b18ca6075ae13f7a10f65bcf7eb9ac107e Mon Sep 17 00:00:00 2001
|
|
From: Yuyu Li <liyuyu6@huawei.com>
|
|
Date: Mon, 25 Nov 2024 16:13:48 +0800
|
|
Subject: [PATCH] libhns: Fix coredump during QP destruction when send_cq
|
|
== recv_cq
|
|
|
|
driver inclusion
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/rdma-core/issues/IB7JZL
|
|
|
|
------------------------------------------------------------------
|
|
|
|
If the specified send CQ and recv CQ are both
|
|
the same CQ, the QP node in SCQ is not deleted.
|
|
which causes a segfault to occur when recreating
|
|
the QP. Here fix it.
|
|
|
|
coredump info:
|
|
0x0000ffff8fbc37d4 in list_add_before_
|
|
0x0000ffff8fbc381c in list_add_tail_
|
|
0x0000ffff8fbc9d9c in add_qp_to_cq_list
|
|
0x0000ffff8fbca008 in create_qp
|
|
0x0000ffff8fbca110 in hns_roce_u_create_qp
|
|
0x0000ffff8feae39c in __ibv_create_qp_1_1
|
|
0x0000000000401420 in test_ctrl_path
|
|
|
|
Fixes:e95b5da96721 ("libhns: Support reporting wc as software mode")
|
|
Signed-off-by: Yuyu Li <liyuyu6@huawei.com>
|
|
Signed-off-by: Xinghai Cen <cenxinghai@h-partners.com>
|
|
---
|
|
providers/hns/hns_roce_u_hw_v2.c | 7 ++++---
|
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c
|
|
index e4232ea..c746e03 100644
|
|
--- a/providers/hns/hns_roce_u_hw_v2.c
|
|
+++ b/providers/hns/hns_roce_u_hw_v2.c
|
|
@@ -2006,9 +2006,10 @@ static int hns_roce_u_v2_destroy_qp(struct ibv_qp *ibqp)
|
|
list_del(&qp->rcq_node);
|
|
}
|
|
|
|
- if (ibqp->send_cq && ibqp->send_cq != ibqp->recv_cq) {
|
|
- __hns_roce_v2_cq_clean(to_hr_cq(ibqp->send_cq), ibqp->qp_num,
|
|
- NULL);
|
|
+ if (ibqp->send_cq) {
|
|
+ if (ibqp->send_cq != ibqp->recv_cq)
|
|
+ __hns_roce_v2_cq_clean(to_hr_cq(ibqp->send_cq), ibqp->qp_num,
|
|
+ NULL);
|
|
list_del(&qp->scq_node);
|
|
}
|
|
|
|
--
|
|
2.25.1
|
|
|