public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes
@ 2025-03-11  8:48 Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 1/7] RDMA/hns: Inappropriate format characters cleanup Junxian Huang
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

This series contains some recent cleanup and bugfixes for hns.

Guofeng Yue (1):
  RDMA/hns: Inappropriate format characters cleanup

Junxian Huang (6):
  RDMA/hns: Fix soft lockup during bt pages loop
  RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
  RDMA/hns: Fix invalid sq params not being blocked
  RDMA/hns: Fix a missing rollback in error path of
    hns_roce_create_qp_common()
  RDMA/hns: Fix missing xa_destroy()
  RDMA/hns: Fix wrong value of max_sge_rd

 drivers/infiniband/hw/hns/hns_roce_alloc.c |  4 +++-
 drivers/infiniband/hw/hns/hns_roce_cq.c    |  1 +
 drivers/infiniband/hw/hns/hns_roce_hem.c   | 16 +++++++++++++++-
 drivers/infiniband/hw/hns/hns_roce_main.c  |  2 +-
 drivers/infiniband/hw/hns/hns_roce_mr.c    |  2 +-
 drivers/infiniband/hw/hns/hns_roce_qp.c    | 22 ++++++++++++----------
 drivers/infiniband/hw/hns/hns_roce_srq.c   |  2 +-
 7 files changed, 34 insertions(+), 15 deletions(-)

--
2.33.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH for-rc 1/7] RDMA/hns: Inappropriate format characters cleanup
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 2/7] RDMA/hns: Fix soft lockup during bt pages loop Junxian Huang
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

From: Guofeng Yue <yueguofeng@h-partners.com>

Use %u for unsigned type and %d for enum.

Signed-off-by: Guofeng Yue <yueguofeng@h-partners.com>
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_mr.c  | 2 +-
 drivers/infiniband/hw/hns/hns_roce_qp.c  | 2 +-
 drivers/infiniband/hw/hns/hns_roce_srq.c | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c
index 55b9283bfc6f..09da3496843b 100644
--- a/drivers/infiniband/hw/hns/hns_roce_mr.c
+++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
@@ -998,7 +998,7 @@ static bool is_buf_attr_valid(struct hns_roce_dev *hr_dev,
 	if (attr->region_count > ARRAY_SIZE(attr->region) ||
 	    attr->region_count < 1 || attr->page_shift < HNS_HW_PAGE_SHIFT) {
 		ibdev_err(ibdev,
-			  "invalid buf attr, region count %d, page shift %u.\n",
+			  "invalid buf attr, region count %u, page shift %u.\n",
 			  attr->region_count, attr->page_shift);
 		return false;
 	}
diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index 9e2e76c59406..ccfef673a976 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -1319,7 +1319,7 @@ int hns_roce_create_qp(struct ib_qp *qp, struct ib_qp_init_attr *init_attr,
 
 	ret = hns_roce_create_qp_common(hr_dev, init_attr, udata, hr_qp);
 	if (ret)
-		ibdev_err(ibdev, "create QP type 0x%x failed(%d)\n",
+		ibdev_err(ibdev, "create QP type %d failed(%d)\n",
 			  init_attr->qp_type, ret);
 
 err_out:
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c b/drivers/infiniband/hw/hns/hns_roce_srq.c
index 70c06ef65603..1090051f493b 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -51,7 +51,7 @@ static void hns_roce_ib_srq_event(struct hns_roce_srq *srq,
 			break;
 		default:
 			dev_err(hr_dev->dev,
-			   "hns_roce:Unexpected event type 0x%x on SRQ %06lx\n",
+			   "hns_roce:Unexpected event type %d on SRQ %06lx\n",
 			   event_type, srq->srqn);
 			return;
 		}
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH for-rc 2/7] RDMA/hns: Fix soft lockup during bt pages loop
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 1/7] RDMA/hns: Inappropriate format characters cleanup Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 3/7] RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db() Junxian Huang
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

Driver runs a for-loop when allocating bt pages and mapping them with
buffer pages. When a large buffer (e.g. MR over 100GB) is being allocated,
it may require a considerable loop count. This will lead to soft lockup:

        watchdog: BUG: soft lockup - CPU#27 stuck for 22s!
        ...
        Call trace:
         hem_list_alloc_mid_bt+0x124/0x394 [hns_roce_hw_v2]
         hns_roce_hem_list_request+0xf8/0x160 [hns_roce_hw_v2]
         hns_roce_mtr_create+0x2e4/0x360 [hns_roce_hw_v2]
         alloc_mr_pbl+0xd4/0x17c [hns_roce_hw_v2]
         hns_roce_reg_user_mr+0xf8/0x190 [hns_roce_hw_v2]
         ib_uverbs_reg_mr+0x118/0x290

        watchdog: BUG: soft lockup - CPU#35 stuck for 23s!
        ...
        Call trace:
         hns_roce_hem_list_find_mtt+0x7c/0xb0 [hns_roce_hw_v2]
         mtr_map_bufs+0xc4/0x204 [hns_roce_hw_v2]
         hns_roce_mtr_create+0x31c/0x3c4 [hns_roce_hw_v2]
         alloc_mr_pbl+0xb0/0x160 [hns_roce_hw_v2]
         hns_roce_reg_user_mr+0x108/0x1c0 [hns_roce_hw_v2]
         ib_uverbs_reg_mr+0x120/0x2bc

Add a cond_resched() to fix soft lockup during these loops. In order not
to affect the allocation performance of normal-size buffer, set the loop
count of a 100GB MR as the threshold to call cond_resched().

Fixes: 38389eaa4db1 ("RDMA/hns: Add mtr support for mixed multihop addressing")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_hem.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c b/drivers/infiniband/hw/hns/hns_roce_hem.c
index 605562122ecc..ca0798224e56 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hem.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hem.c
@@ -1361,6 +1361,11 @@ static int hem_list_alloc_root_bt(struct hns_roce_dev *hr_dev,
 	return ret;
 }
 
+/* This is the bottom bt pages number of a 100G MR on 4K OS, assuming
+ * the bt page size is not expanded by cal_best_bt_pg_sz()
+ */
+#define RESCHED_LOOP_CNT_THRESHOLD_ON_4K 12800
+
 /* construct the base address table and link them by address hop config */
 int hns_roce_hem_list_request(struct hns_roce_dev *hr_dev,
 			      struct hns_roce_hem_list *hem_list,
@@ -1369,6 +1374,7 @@ int hns_roce_hem_list_request(struct hns_roce_dev *hr_dev,
 {
 	const struct hns_roce_buf_region *r;
 	int ofs, end;
+	int loop;
 	int unit;
 	int ret;
 	int i;
@@ -1386,7 +1392,10 @@ int hns_roce_hem_list_request(struct hns_roce_dev *hr_dev,
 			continue;
 
 		end = r->offset + r->count;
-		for (ofs = r->offset; ofs < end; ofs += unit) {
+		for (ofs = r->offset, loop = 1; ofs < end; ofs += unit, loop++) {
+			if (!(loop % RESCHED_LOOP_CNT_THRESHOLD_ON_4K))
+				cond_resched();
+
 			ret = hem_list_alloc_mid_bt(hr_dev, r, unit, ofs,
 						    hem_list->mid_bt[i],
 						    &hem_list->btm_bt);
@@ -1443,9 +1452,14 @@ void *hns_roce_hem_list_find_mtt(struct hns_roce_dev *hr_dev,
 	struct list_head *head = &hem_list->btm_bt;
 	struct hns_roce_hem_item *hem, *temp_hem;
 	void *cpu_base = NULL;
+	int loop = 1;
 	int nr = 0;
 
 	list_for_each_entry_safe(hem, temp_hem, head, sibling) {
+		if (!(loop % RESCHED_LOOP_CNT_THRESHOLD_ON_4K))
+			cond_resched();
+		loop++;
+
 		if (hem_list_page_is_in_range(hem, offset)) {
 			nr = offset - hem->start;
 			cpu_base = hem->addr + nr * BA_BYTE_LEN;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH for-rc 3/7] RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 1/7] RDMA/hns: Inappropriate format characters cleanup Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 2/7] RDMA/hns: Fix soft lockup during bt pages loop Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 4/7] RDMA/hns: Fix invalid sq params not being blocked Junxian Huang
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

Currently the condition of unmapping sdb in error path is not exactly
the same as the condition of mapping in alloc_user_qp_db(). This may
cause a problem of unmapping an unmapped db in some case, such as
when the QP is XRC TGT. Unified the two conditions.

Fixes: 90ae0b57e4a5 ("RDMA/hns: Combine enable flags of qp")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_qp.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index ccfef673a976..70a38bf2bd86 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -868,12 +868,14 @@ static int alloc_user_qp_db(struct hns_roce_dev *hr_dev,
 			    struct hns_roce_ib_create_qp *ucmd,
 			    struct hns_roce_ib_create_qp_resp *resp)
 {
+	bool has_sdb = user_qp_has_sdb(hr_dev, init_attr, udata, resp, ucmd);
 	struct hns_roce_ucontext *uctx = rdma_udata_to_drv_context(udata,
 		struct hns_roce_ucontext, ibucontext);
+	bool has_rdb = user_qp_has_rdb(hr_dev, init_attr, udata, resp);
 	struct ib_device *ibdev = &hr_dev->ib_dev;
 	int ret;
 
-	if (user_qp_has_sdb(hr_dev, init_attr, udata, resp, ucmd)) {
+	if (has_sdb) {
 		ret = hns_roce_db_map_user(uctx, ucmd->sdb_addr, &hr_qp->sdb);
 		if (ret) {
 			ibdev_err(ibdev,
@@ -884,7 +886,7 @@ static int alloc_user_qp_db(struct hns_roce_dev *hr_dev,
 		hr_qp->en_flags |= HNS_ROCE_QP_CAP_SQ_RECORD_DB;
 	}
 
-	if (user_qp_has_rdb(hr_dev, init_attr, udata, resp)) {
+	if (has_rdb) {
 		ret = hns_roce_db_map_user(uctx, ucmd->db_addr, &hr_qp->rdb);
 		if (ret) {
 			ibdev_err(ibdev,
@@ -898,7 +900,7 @@ static int alloc_user_qp_db(struct hns_roce_dev *hr_dev,
 	return 0;
 
 err_sdb:
-	if (hr_qp->en_flags & HNS_ROCE_QP_CAP_SQ_RECORD_DB)
+	if (has_sdb)
 		hns_roce_db_unmap_user(uctx, &hr_qp->sdb);
 err_out:
 	return ret;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH for-rc 4/7] RDMA/hns: Fix invalid sq params not being blocked
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
                   ` (2 preceding siblings ...)
  2025-03-11  8:48 ` [PATCH for-rc 3/7] RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db() Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 5/7] RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common() Junxian Huang
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

SQ params from userspace are checked in by set_user_sq_size(). But
when the check fails, the function doesn't return but instead keep
running and overwrite 'ret'. As a result, the invalid params will
not get blocked actually.

Add a return right after the failed check. Besides, although the
check result of kernel sq params will not be overwritten, to keep
coding style unified, move default_congest_type() before
set_kernel_sq_size().

Fixes: 6ec429d5887a ("RDMA/hns: Support userspace configuring congestion control algorithm with QP granularity")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_qp.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index 70a38bf2bd86..18bf3761a64e 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -1121,24 +1121,23 @@ static int set_qp_param(struct hns_roce_dev *hr_dev, struct hns_roce_qp *hr_qp,
 						 ibucontext);
 		hr_qp->config = uctx->config;
 		ret = set_user_sq_size(hr_dev, &init_attr->cap, hr_qp, ucmd);
-		if (ret)
+		if (ret) {
 			ibdev_err(ibdev,
 				  "failed to set user SQ size, ret = %d.\n",
 				  ret);
+			return ret;
+		}
 
 		ret = set_congest_param(hr_dev, hr_qp, ucmd);
-		if (ret)
-			return ret;
 	} else {
 		if (hr_dev->pci_dev->revision >= PCI_REVISION_ID_HIP09)
 			hr_qp->config = HNS_ROCE_EXSGE_FLAGS;
+		default_congest_type(hr_dev, hr_qp);
 		ret = set_kernel_sq_size(hr_dev, &init_attr->cap, hr_qp);
 		if (ret)
 			ibdev_err(ibdev,
 				  "failed to set kernel SQ size, ret = %d.\n",
 				  ret);
-
-		default_congest_type(hr_dev, hr_qp);
 	}
 
 	return ret;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH for-rc 5/7] RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common()
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
                   ` (3 preceding siblings ...)
  2025-03-11  8:48 ` [PATCH for-rc 4/7] RDMA/hns: Fix invalid sq params not being blocked Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 6/7] RDMA/hns: Fix missing xa_destroy() Junxian Huang
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

When ib_copy_to_udata() fails in hns_roce_create_qp_common(),
hns_roce_qp_remove() should be called in the error path to
clean up resources in hns_roce_qp_store().

Fixes: 0f00571f9433 ("RDMA/hns: Use new SQ doorbell register for HIP09")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_qp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index 18bf3761a64e..2c1c08f37334 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -1220,7 +1220,7 @@ static int hns_roce_create_qp_common(struct hns_roce_dev *hr_dev,
 				       min(udata->outlen, sizeof(resp)));
 		if (ret) {
 			ibdev_err(ibdev, "copy qp resp failed!\n");
-			goto err_store;
+			goto err_flow_ctrl;
 		}
 	}
 
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH for-rc 6/7] RDMA/hns: Fix missing xa_destroy()
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
                   ` (4 preceding siblings ...)
  2025-03-11  8:48 ` [PATCH for-rc 5/7] RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common() Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-11  8:48 ` [PATCH for-rc 7/7] RDMA/hns: Fix wrong value of max_sge_rd Junxian Huang
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

Add xa_destroy() for xarray in driver.

Fixes: 5c1f167af112 ("RDMA/hns: Init SRQ table for hip08")
Fixes: 27e19f451089 ("RDMA/hns: Convert cq_table to XArray")
Fixes: 736b5a70db98 ("RDMA/hns: Convert qp_table_tree to XArray")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_alloc.c | 4 +++-
 drivers/infiniband/hw/hns/hns_roce_cq.c    | 1 +
 drivers/infiniband/hw/hns/hns_roce_qp.c    | 1 +
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_alloc.c b/drivers/infiniband/hw/hns/hns_roce_alloc.c
index 950c133d4220..6ee911f6885b 100644
--- a/drivers/infiniband/hw/hns/hns_roce_alloc.c
+++ b/drivers/infiniband/hw/hns/hns_roce_alloc.c
@@ -175,8 +175,10 @@ void hns_roce_cleanup_bitmap(struct hns_roce_dev *hr_dev)
 	if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_XRC)
 		ida_destroy(&hr_dev->xrcd_ida.ida);
 
-	if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_SRQ)
+	if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_SRQ) {
 		ida_destroy(&hr_dev->srq_table.srq_ida.ida);
+		xa_destroy(&hr_dev->srq_table.xa);
+	}
 	hns_roce_cleanup_qp_table(hr_dev);
 	hns_roce_cleanup_cq_table(hr_dev);
 	ida_destroy(&hr_dev->mr_table.mtpt_ida.ida);
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c b/drivers/infiniband/hw/hns/hns_roce_cq.c
index 4106423a1b39..3a5c93c9fb3e 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -537,5 +537,6 @@ void hns_roce_cleanup_cq_table(struct hns_roce_dev *hr_dev)
 
 	for (i = 0; i < HNS_ROCE_CQ_BANK_NUM; i++)
 		ida_destroy(&hr_dev->cq_table.bank[i].ida);
+	xa_destroy(&hr_dev->cq_table.array);
 	mutex_destroy(&hr_dev->cq_table.bank_mutex);
 }
diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index 2c1c08f37334..9f376a2232b0 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -1603,6 +1603,7 @@ void hns_roce_cleanup_qp_table(struct hns_roce_dev *hr_dev)
 	for (i = 0; i < HNS_ROCE_QP_BANK_NUM; i++)
 		ida_destroy(&hr_dev->qp_table.bank[i].ida);
 	xa_destroy(&hr_dev->qp_table.dip_xa);
+	xa_destroy(&hr_dev->qp_table_xa);
 	mutex_destroy(&hr_dev->qp_table.bank_mutex);
 	mutex_destroy(&hr_dev->qp_table.scc_mutex);
 }
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH for-rc 7/7] RDMA/hns: Fix wrong value of max_sge_rd
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
                   ` (5 preceding siblings ...)
  2025-03-11  8:48 ` [PATCH for-rc 6/7] RDMA/hns: Fix missing xa_destroy() Junxian Huang
@ 2025-03-11  8:48 ` Junxian Huang
  2025-03-12 18:36 ` [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Leon Romanovsky
  2025-03-12 18:37 ` Leon Romanovsky
  8 siblings, 0 replies; 10+ messages in thread
From: Junxian Huang @ 2025-03-11  8:48 UTC (permalink / raw)
  To: jgg, leon; +Cc: linux-rdma, linuxarm, huangjunxian6, tangchengchang

There is no difference between the sge of READ and non-READ
operations in hns RoCE. Set max_sge_rd to the same value as
max_send_sge.

Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
---
 drivers/infiniband/hw/hns/hns_roce_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
index ae24c81c9812..cf89a8db4f64 100644
--- a/drivers/infiniband/hw/hns/hns_roce_main.c
+++ b/drivers/infiniband/hw/hns/hns_roce_main.c
@@ -183,7 +183,7 @@ static int hns_roce_query_device(struct ib_device *ib_dev,
 				  IB_DEVICE_RC_RNR_NAK_GEN;
 	props->max_send_sge = hr_dev->caps.max_sq_sg;
 	props->max_recv_sge = hr_dev->caps.max_rq_sg;
-	props->max_sge_rd = 1;
+	props->max_sge_rd = hr_dev->caps.max_sq_sg;
 	props->max_cq = hr_dev->caps.num_cqs;
 	props->max_cqe = hr_dev->caps.max_cqes;
 	props->max_mr = hr_dev->caps.num_mtpts;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
                   ` (6 preceding siblings ...)
  2025-03-11  8:48 ` [PATCH for-rc 7/7] RDMA/hns: Fix wrong value of max_sge_rd Junxian Huang
@ 2025-03-12 18:36 ` Leon Romanovsky
  2025-03-12 18:37 ` Leon Romanovsky
  8 siblings, 0 replies; 10+ messages in thread
From: Leon Romanovsky @ 2025-03-12 18:36 UTC (permalink / raw)
  To: jgg, Junxian Huang; +Cc: linux-rdma, linuxarm, tangchengchang


On Tue, 11 Mar 2025 16:48:50 +0800, Junxian Huang wrote:
> This series contains some recent cleanup and bugfixes for hns.
> 
> Guofeng Yue (1):
>   RDMA/hns: Inappropriate format characters cleanup
> 
> Junxian Huang (6):
>   RDMA/hns: Fix soft lockup during bt pages loop
>   RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
>   RDMA/hns: Fix invalid sq params not being blocked
>   RDMA/hns: Fix a missing rollback in error path of
>     hns_roce_create_qp_common()
>   RDMA/hns: Fix missing xa_destroy()
>   RDMA/hns: Fix wrong value of max_sge_rd
> 
> [...]

Applied, thanks!

[1/7] RDMA/hns: Inappropriate format characters cleanup
      (no commit info)
[2/7] RDMA/hns: Fix soft lockup during bt pages loop
      https://git.kernel.org/rdma/rdma/c/25655580136de5
[3/7] RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
      https://git.kernel.org/rdma/rdma/c/b9f59a24ba35a7
[4/7] RDMA/hns: Fix invalid sq params not being blocked
      https://git.kernel.org/rdma/rdma/c/13c90c22204976
[5/7] RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common()
      https://git.kernel.org/rdma/rdma/c/444907dd45cbe6
[6/7] RDMA/hns: Fix missing xa_destroy()
      https://git.kernel.org/rdma/rdma/c/eda0a2fdbc24c3
[7/7] RDMA/hns: Fix wrong value of max_sge_rd
      https://git.kernel.org/rdma/rdma/c/6b5e41a8b51fce

Best regards,
-- 
Leon Romanovsky <leon@kernel.org>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes
  2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
                   ` (7 preceding siblings ...)
  2025-03-12 18:36 ` [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Leon Romanovsky
@ 2025-03-12 18:37 ` Leon Romanovsky
  8 siblings, 0 replies; 10+ messages in thread
From: Leon Romanovsky @ 2025-03-12 18:37 UTC (permalink / raw)
  To: Junxian Huang; +Cc: jgg, linux-rdma, linuxarm, tangchengchang

On Tue, Mar 11, 2025 at 04:48:50PM +0800, Junxian Huang wrote:
> This series contains some recent cleanup and bugfixes for hns.
> 
> Guofeng Yue (1):
>   RDMA/hns: Inappropriate format characters cleanup

Applied to -next

> 
> Junxian Huang (6):
>   RDMA/hns: Fix soft lockup during bt pages loop
>   RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
>   RDMA/hns: Fix invalid sq params not being blocked
>   RDMA/hns: Fix a missing rollback in error path of
>     hns_roce_create_qp_common()
>   RDMA/hns: Fix missing xa_destroy()
>   RDMA/hns: Fix wrong value of max_sge_rd

Applied to -rc.

Thanks

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2025-03-12 18:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-11  8:48 [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 1/7] RDMA/hns: Inappropriate format characters cleanup Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 2/7] RDMA/hns: Fix soft lockup during bt pages loop Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 3/7] RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db() Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 4/7] RDMA/hns: Fix invalid sq params not being blocked Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 5/7] RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common() Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 6/7] RDMA/hns: Fix missing xa_destroy() Junxian Huang
2025-03-11  8:48 ` [PATCH for-rc 7/7] RDMA/hns: Fix wrong value of max_sge_rd Junxian Huang
2025-03-12 18:36 ` [PATCH for-rc 0/7] RDMA/hns: Cleanup and Bugfixes Leon Romanovsky
2025-03-12 18:37 ` Leon Romanovsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox