]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/hns: Fix -Wframe-larger-than issue
authorJunxian Huang <huangjunxian6@hisilicon.com>
Thu, 3 Jul 2025 11:39:05 +0000 (19:39 +0800)
committerLeon Romanovsky <leon@kernel.org>
Mon, 7 Jul 2025 05:37:35 +0000 (01:37 -0400)
Fix -Wframe-larger-than issue by allocating memory for qpc struct
with kzalloc() instead of using stack memory.

Fixes: 606bf89e98ef ("RDMA/hns: Refactor for hns_roce_v2_modify_qp function")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202506240032.CSgIyFct-lkp@intel.com/
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Link: https://patch.msgid.link/20250703113905.3597124-7-huangjunxian6@hisilicon.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index 2e9ef2fb8019a2aa275bedc922d8127c66974176..64bca08f3f1a74fd0ede411f29076231a5837d06 100644 (file)
@@ -5349,11 +5349,10 @@ static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
 {
        struct hns_roce_dev *hr_dev = to_hr_dev(ibqp->device);
        struct hns_roce_qp *hr_qp = to_hr_qp(ibqp);
-       struct hns_roce_v2_qp_context ctx[2];
-       struct hns_roce_v2_qp_context *context = ctx;
-       struct hns_roce_v2_qp_context *qpc_mask = ctx + 1;
+       struct hns_roce_v2_qp_context *context;
+       struct hns_roce_v2_qp_context *qpc_mask;
        struct ib_device *ibdev = &hr_dev->ib_dev;
-       int ret;
+       int ret = -ENOMEM;
 
        if (attr_mask & ~IB_QP_ATTR_STANDARD_BITS)
                return -EOPNOTSUPP;
@@ -5364,7 +5363,11 @@ static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
         * we should set all bits of the relevant fields in context mask to
         * 0 at the same time, else set them to 0x1.
         */
-       memset(context, 0, hr_dev->caps.qpc_sz);
+       context = kvzalloc(sizeof(*context), GFP_KERNEL);
+       qpc_mask = kvzalloc(sizeof(*qpc_mask), GFP_KERNEL);
+       if (!context || !qpc_mask)
+               goto out;
+
        memset(qpc_mask, 0xff, hr_dev->caps.qpc_sz);
 
        ret = hns_roce_v2_set_abs_fields(ibqp, attr, attr_mask, cur_state,
@@ -5406,6 +5409,8 @@ static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
                clear_qp(hr_qp);
 
 out:
+       kvfree(qpc_mask);
+       kvfree(context);
        return ret;
 }