]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/hns: Fix accessing uninitialized resources
authorJunxian Huang <huangjunxian6@hisilicon.com>
Thu, 3 Jul 2025 11:39:03 +0000 (19:39 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 14:39:05 +0000 (16:39 +0200)
[ Upstream commit 278c18a4a78a9a6bf529ef45ccde512a5686ea9d ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/hns/hns_roce_main.c

index 623610b3e2ec14d9b3010dfb11d6240be416872e..11fa64044a8d85f6ed1471f319cb7faa578950df 100644 (file)
@@ -947,10 +947,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);
 }
 
 /**
@@ -968,11 +965,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);
 
@@ -1004,9 +998,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;
 }