]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/hns: Fix accessing uninitialized resources
authorJunxian Huang <huangjunxian6@hisilicon.com>
Thu, 3 Jul 2025 11:39:03 +0000 (19:39 +0800)
committerLeon Romanovsky <leon@kernel.org>
Mon, 7 Jul 2025 05:37:35 +0000 (01:37 -0400)
hr_dev->pgdir_list and hr_dev->pgdir_mutex won't be initialized if
CQ/QP record db are not enabled, but they are also needed when using
SRQ with SRQ record db enabled. Simplified the logic by always
initailizing the reosurces.

Fixes: c9813b0b9992 ("RDMA/hns: Support SRQ record doorbell")
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Link: https://patch.msgid.link/20250703113905.3597124-5-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/hns/hns_roce_main.c

index 427dd700cddca043db8438c4f2b92c1afe2c29d6..d50f36f8a1107ec06873209f02c91274d163c698 100644 (file)
@@ -937,10 +937,7 @@ err_unmap_dmpt:
 static void hns_roce_teardown_hca(struct hns_roce_dev *hr_dev)
 {
        hns_roce_cleanup_bitmap(hr_dev);
-
-       if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQ_RECORD_DB ||
-           hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_RECORD_DB)
-               mutex_destroy(&hr_dev->pgdir_mutex);
+       mutex_destroy(&hr_dev->pgdir_mutex);
 }
 
 /**
@@ -958,11 +955,8 @@ static int hns_roce_setup_hca(struct hns_roce_dev *hr_dev)
        INIT_LIST_HEAD(&hr_dev->qp_list);
        spin_lock_init(&hr_dev->qp_list_lock);
 
-       if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQ_RECORD_DB ||
-           hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_RECORD_DB) {
-               INIT_LIST_HEAD(&hr_dev->pgdir_list);
-               mutex_init(&hr_dev->pgdir_mutex);
-       }
+       INIT_LIST_HEAD(&hr_dev->pgdir_list);
+       mutex_init(&hr_dev->pgdir_mutex);
 
        hns_roce_init_uar_table(hr_dev);
 
@@ -994,9 +988,7 @@ static int hns_roce_setup_hca(struct hns_roce_dev *hr_dev)
 
 err_uar_table_free:
        ida_destroy(&hr_dev->uar_ida.ida);
-       if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQ_RECORD_DB ||
-           hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_RECORD_DB)
-               mutex_destroy(&hr_dev->pgdir_mutex);
+       mutex_destroy(&hr_dev->pgdir_mutex);
 
        return ret;
 }