]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA: Use proper driver data response structs instead of open coding
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 12 May 2026 00:09:37 +0000 (21:09 -0300)
committerLeon Romanovsky <leon@kernel.org>
Mon, 18 May 2026 08:58:42 +0000 (04:58 -0400)
At some point the response structs were added and rdma-core is using
them, but the kernel was not changed to use them as well. Replace
the open-coded copy with the right struct and ib_respond_udata().

Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/mlx4/cq.c
drivers/infiniband/hw/mlx4/main.c
drivers/infiniband/hw/mlx4/srq.c
drivers/infiniband/hw/mlx5/cq.c
drivers/infiniband/hw/mthca/mthca_provider.c

index 7a6eb602d4a6deac381d5f4445c4a29694c0fe17..7e4505f6c78b30526a8562a9218006f2d094a273 100644 (file)
@@ -142,6 +142,7 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq,
 {
        struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
+       struct mlx4_ib_create_cq_resp uresp = {};
        int entries = attr->cqe;
        int vector = attr->comp_vector;
        struct mlx4_ib_dev *dev = to_mdev(ibdev);
@@ -219,10 +220,10 @@ int mlx4_ib_create_user_cq(struct ib_cq *ibcq,
        cq->mcq.event = mlx4_ib_cq_event;
        cq->mcq.usage = MLX4_RES_USAGE_USER_VERBS;
 
-       if (ib_copy_to_udata(udata, &cq->mcq.cqn, sizeof(__u32))) {
-               err = -EFAULT;
+       uresp.cqn = cq->mcq.cqn;
+       err = ib_respond_udata(udata, uresp);
+       if (err)
                goto err_cq_free;
-       }
 
        return 0;
 
index 4b187ec9e01738ed7d6a31981d24b00558bb41a0..25f9738bd7722398fbc4f262a2cee699f15025db 100644 (file)
@@ -1199,9 +1199,14 @@ static int mlx4_ib_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
        if (err)
                return err;
 
-       if (udata && ib_copy_to_udata(udata, &pd->pdn, sizeof(__u32))) {
-               mlx4_pd_free(to_mdev(ibdev)->dev, pd->pdn);
-               return -EFAULT;
+       if (udata) {
+               struct mlx4_ib_alloc_pd_resp uresp = { .pdn = pd->pdn };
+
+               err = ib_respond_udata(udata, uresp);
+               if (err) {
+                       mlx4_pd_free(to_mdev(ibdev)->dev, pd->pdn);
+                       return err;
+               }
        }
        return 0;
 }
index 5b23e5f8b84aca5c4f7083d5bd3f720cc1d13320..0b4df4f48ca14ff921c71fc5d73b7eeb9cb89152 100644 (file)
@@ -191,11 +191,15 @@ int mlx4_ib_create_srq(struct ib_srq *ib_srq,
        srq->msrq.event = mlx4_ib_srq_event;
        srq->ibsrq.ext.xrc.srq_num = srq->msrq.srqn;
 
-       if (udata)
-               if (ib_copy_to_udata(udata, &srq->msrq.srqn, sizeof (__u32))) {
-                       err = -EFAULT;
+       if (udata) {
+               struct mlx4_ib_create_srq_resp uresp = {
+                       .srqn = srq->msrq.srqn
+               };
+
+               err = ib_respond_udata(udata, uresp);
+               if (err)
                        goto err_wrid;
-               }
+       }
 
        init_attr->attr.max_wr = srq->msrq.max - 1;
 
index ae20d11f04fc19f177fed20ed4eb93d44574abef..64fad78cb256df15e0cff229610fb347344fd21b 100644 (file)
@@ -950,6 +950,7 @@ int mlx5_ib_create_user_cq(struct ib_cq *ibcq,
 {
        struct ib_udata *udata = &attrs->driver_udata;
        struct ib_device *ibdev = ibcq->device;
+       struct mlx5_ib_create_cq_resp uresp = {};
        int entries = attr->cqe;
        int vector = attr->comp_vector;
        struct mlx5_ib_dev *dev = to_mdev(ibdev);
@@ -1016,10 +1017,10 @@ int mlx5_ib_create_user_cq(struct ib_cq *ibcq,
 
        INIT_LIST_HEAD(&cq->wc_list);
 
-       if (ib_copy_to_udata(udata, &cq->mcq.cqn, sizeof(__u32))) {
-               err = -EFAULT;
+       uresp.cqn = cq->mcq.cqn;
+       err = ib_respond_udata(udata, uresp);
+       if (err)
                goto err_cmd;
-       }
 
        kvfree(cqb);
        return 0;
index 07c60797c860915b48e283052edc8a24cc1c461f..afa97d3801f783e1d8c036667c035b2a819eaa4a 100644 (file)
@@ -357,9 +357,12 @@ static int mthca_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata)
                return err;
 
        if (udata) {
-               if (ib_copy_to_udata(udata, &pd->pd_num, sizeof (__u32))) {
+               struct mthca_alloc_pd_resp uresp = { .pdn = pd->pd_num };
+
+               err = ib_respond_udata(udata, uresp);
+               if (err) {
                        mthca_pd_free(to_mdev(ibdev), pd);
-                       return -EFAULT;
+                       return err;
                }
        }
 
@@ -428,11 +431,17 @@ static int mthca_create_srq(struct ib_srq *ibsrq,
        if (err)
                return err;
 
-       if (context && ib_copy_to_udata(udata, &srq->srqn, sizeof(__u32))) {
-               mthca_free_srq(to_mdev(ibsrq->device), srq);
-               mthca_unmap_user_db(to_mdev(ibsrq->device), &context->uar,
-                                   context->db_tab, ucmd.db_index);
-               return -EFAULT;
+       if (context) {
+               struct mthca_create_srq_resp uresp = { .srqn = srq->srqn };
+
+               err = ib_respond_udata(udata, uresp);
+               if (err) {
+                       mthca_free_srq(to_mdev(ibsrq->device), srq);
+                       mthca_unmap_user_db(to_mdev(ibsrq->device),
+                                           &context->uar, context->db_tab,
+                                           ucmd.db_index);
+                       return err;
+               }
        }
 
        return 0;
@@ -631,10 +640,14 @@ static int mthca_create_cq(struct ib_cq *ibcq,
        if (err)
                goto err_unmap_arm;
 
-       if (udata && ib_copy_to_udata(udata, &cq->cqn, sizeof(__u32))) {
-               mthca_free_cq(to_mdev(ibdev), cq);
-               err = -EFAULT;
-               goto err_unmap_arm;
+       if (udata) {
+               struct mthca_create_cq_resp uresp = { .cqn = cq->cqn };
+
+               err = ib_respond_udata(udata, uresp);
+               if (err) {
+                       mthca_free_cq(to_mdev(ibdev), cq);
+                       goto err_unmap_arm;
+               }
        }
 
        cq->resize_buf = NULL;