Convert the pattern:

   ib_copy_to_udata(udata, &resp, min(sizeof(resp), udata->outlen));

Using Coccinelle:

@@
identifier resp;
expression udata;
@@

- ib_copy_to_udata(udata, &resp, min(sizeof(resp), udata->outlen))
+ ib_respond_udata(udata, resp)

@@
identifier resp;
expression udata;
@@

- ib_copy_to_udata(udata, &resp, min(udata->outlen, sizeof(resp)))
+ ib_respond_udata(udata, resp)

Run another pass with AI to propagate the return code correctly and
remove redundant prints.

Signed-off-by: Jason Gunthorpe <[email protected]>
---
 drivers/infiniband/hw/efa/efa_verbs.c        | 44 +++++-------------
 drivers/infiniband/hw/erdma/erdma_verbs.c    |  3 +-
 drivers/infiniband/hw/hns/hns_roce_ah.c      |  4 +-
 drivers/infiniband/hw/hns/hns_roce_cq.c      |  3 +-
 drivers/infiniband/hw/hns/hns_roce_main.c    |  3 +-
 drivers/infiniband/hw/hns/hns_roce_pd.c      |  8 ++--
 drivers/infiniband/hw/hns/hns_roce_qp.c      | 13 ++----
 drivers/infiniband/hw/hns/hns_roce_srq.c     |  6 +--
 drivers/infiniband/hw/irdma/verbs.c          | 48 +++++++-------------
 drivers/infiniband/hw/mana/cq.c              |  6 +--
 drivers/infiniband/hw/mana/qp.c              |  6 +--
 drivers/infiniband/hw/mlx5/srq.c             |  7 +--
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c |  8 ++--
 13 files changed, 49 insertions(+), 110 deletions(-)

diff --git a/drivers/infiniband/hw/efa/efa_verbs.c 
b/drivers/infiniband/hw/efa/efa_verbs.c
index 3ad5d6e27b1590..395290ab05847a 100644
--- a/drivers/infiniband/hw/efa/efa_verbs.c
+++ b/drivers/infiniband/hw/efa/efa_verbs.c
@@ -270,13 +270,9 @@ int efa_query_device(struct ib_device *ibdev,
                if (dev->neqs)
                        resp.device_caps |= 
EFA_QUERY_DEVICE_CAPS_CQ_NOTIFICATIONS;
 
-               err = ib_copy_to_udata(udata, &resp,
-                                      min(sizeof(resp), udata->outlen));
-               if (err) {
-                       ibdev_dbg(ibdev,
-                                 "Failed to copy udata for query_device\n");
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        return err;
-               }
        }
 
        return 0;
@@ -442,13 +438,9 @@ int efa_alloc_pd(struct ib_pd *ibpd, struct ib_udata 
*udata)
        resp.pdn = result.pdn;
 
        if (udata->outlen) {
-               err = ib_copy_to_udata(udata, &resp,
-                                      min(sizeof(resp), udata->outlen));
-               if (err) {
-                       ibdev_dbg(&dev->ibdev,
-                                 "Failed to copy udata for alloc_pd\n");
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto err_dealloc_pd;
-               }
        }
 
        ibdev_dbg(&dev->ibdev, "Allocated pd[%d]\n", pd->pdn);
@@ -782,14 +774,9 @@ int efa_create_qp(struct ib_qp *ibqp, struct 
ib_qp_init_attr *init_attr,
        qp->max_inline_data = init_attr->cap.max_inline_data;
 
        if (udata->outlen) {
-               err = ib_copy_to_udata(udata, &resp,
-                                      min(sizeof(resp), udata->outlen));
-               if (err) {
-                       ibdev_dbg(&dev->ibdev,
-                                 "Failed to copy udata for qp[%u]\n",
-                                 create_qp_resp.qp_num);
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto err_remove_mmap_entries;
-               }
        }
 
        ibdev_dbg(&dev->ibdev, "Created qp[%d]\n", qp->ibqp.qp_num);
@@ -1226,13 +1213,9 @@ int efa_create_user_cq(struct ib_cq *ibcq, const struct 
ib_cq_init_attr *attr,
        }
 
        if (udata->outlen) {
-               err = ib_copy_to_udata(udata, &resp,
-                                      min(sizeof(resp), udata->outlen));
-               if (err) {
-                       ibdev_dbg(ibdev,
-                                 "Failed to copy udata for create_cq\n");
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto err_xa_erase;
-               }
        }
 
        ibdev_dbg(ibdev, "Created cq[%d], cq depth[%u]. dma[%pad] virt[0x%p]\n",
@@ -1935,8 +1918,7 @@ int efa_alloc_ucontext(struct ib_ucontext *ibucontext, 
struct ib_udata *udata)
        resp.max_tx_batch = dev->dev_attr.max_tx_batch;
        resp.min_sq_wr = dev->dev_attr.min_sq_depth;
 
-       err = ib_copy_to_udata(udata, &resp,
-                              min(sizeof(resp), udata->outlen));
+       err = ib_respond_udata(udata, resp);
        if (err)
                goto err_dealloc_uar;
 
@@ -2087,13 +2069,9 @@ int efa_create_ah(struct ib_ah *ibah,
        resp.efa_address_handle = result.ah;
 
        if (udata->outlen) {
-               err = ib_copy_to_udata(udata, &resp,
-                                      min(sizeof(resp), udata->outlen));
-               if (err) {
-                       ibdev_dbg(&dev->ibdev,
-                                 "Failed to copy udata for create_ah 
response\n");
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto err_destroy_ah;
-               }
        }
        ibdev_dbg(&dev->ibdev, "Created ah[%d]\n", ah->ah);
 
diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c 
b/drivers/infiniband/hw/erdma/erdma_verbs.c
index 5523b4e151e1ff..9bba470c6e3257 100644
--- a/drivers/infiniband/hw/erdma/erdma_verbs.c
+++ b/drivers/infiniband/hw/erdma/erdma_verbs.c
@@ -1990,8 +1990,7 @@ int erdma_create_cq(struct ib_cq *ibcq, const struct 
ib_cq_init_attr *attr,
                uresp.cq_id = cq->cqn;
                uresp.num_cqe = depth;
 
-               ret = ib_copy_to_udata(udata, &uresp,
-                                      min(sizeof(uresp), udata->outlen));
+               ret = ib_respond_udata(udata, uresp);
                if (ret)
                        goto err_free_res;
        } else {
diff --git a/drivers/infiniband/hw/hns/hns_roce_ah.c 
b/drivers/infiniband/hw/hns/hns_roce_ah.c
index 8a605da8a93c97..925ddf15b68102 100644
--- a/drivers/infiniband/hw/hns/hns_roce_ah.c
+++ b/drivers/infiniband/hw/hns/hns_roce_ah.c
@@ -32,6 +32,7 @@
 
 #include <rdma/ib_addr.h>
 #include <rdma/ib_cache.h>
+#include <rdma/uverbs_ioctl.h>
 #include "hns_roce_device.h"
 #include "hns_roce_hw_v2.h"
 
@@ -112,8 +113,7 @@ int hns_roce_create_ah(struct ib_ah *ibah, struct 
rdma_ah_init_attr *init_attr,
                resp.priority = ah->av.sl;
                resp.tc_mode = tc_mode;
                memcpy(resp.dmac, ah_attr->roce.dmac, ETH_ALEN);
-               ret = ib_copy_to_udata(udata, &resp,
-                                      min(udata->outlen, sizeof(resp)));
+               ret = ib_respond_udata(udata, resp);
        }
 
 err_out:
diff --git a/drivers/infiniband/hw/hns/hns_roce_cq.c 
b/drivers/infiniband/hw/hns/hns_roce_cq.c
index 621568e114054b..24de651f735e03 100644
--- a/drivers/infiniband/hw/hns/hns_roce_cq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_cq.c
@@ -452,8 +452,7 @@ int hns_roce_create_cq(struct ib_cq *ib_cq, const struct 
ib_cq_init_attr *attr,
 
        if (udata) {
                resp.cqn = hr_cq->cqn;
-               ret = ib_copy_to_udata(udata, &resp,
-                                      min(udata->outlen, sizeof(resp)));
+               ret = ib_respond_udata(udata, resp);
                if (ret)
                        goto err_cqc;
        }
diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c 
b/drivers/infiniband/hw/hns/hns_roce_main.c
index 0dbe99aab6ad21..c17ff5347a0147 100644
--- a/drivers/infiniband/hw/hns/hns_roce_main.c
+++ b/drivers/infiniband/hw/hns/hns_roce_main.c
@@ -477,8 +477,7 @@ static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
 
        resp.cqe_size = hr_dev->caps.cqe_sz;
 
-       ret = ib_copy_to_udata(udata, &resp,
-                              min(udata->outlen, sizeof(resp)));
+       ret = ib_respond_udata(udata, resp);
        if (ret)
                goto error_fail_copy_to_udata;
 
diff --git a/drivers/infiniband/hw/hns/hns_roce_pd.c 
b/drivers/infiniband/hw/hns/hns_roce_pd.c
index 225c3e328e0e08..73bb000574c50d 100644
--- a/drivers/infiniband/hw/hns/hns_roce_pd.c
+++ b/drivers/infiniband/hw/hns/hns_roce_pd.c
@@ -30,6 +30,7 @@
  * SOFTWARE.
  */
 
+#include <rdma/uverbs_ioctl.h>
 #include "hns_roce_device.h"
 
 void hns_roce_init_pd_table(struct hns_roce_dev *hr_dev)
@@ -61,12 +62,9 @@ int hns_roce_alloc_pd(struct ib_pd *ibpd, struct ib_udata 
*udata)
        if (udata) {
                struct hns_roce_ib_alloc_pd_resp resp = {.pdn = pd->pdn};
 
-               ret = ib_copy_to_udata(udata, &resp,
-                                      min(udata->outlen, sizeof(resp)));
-               if (ret) {
+               ret = ib_respond_udata(udata, resp);
+               if (ret)
                        ida_free(&pd_ida->ida, id);
-                       ibdev_err(ib_dev, "failed to copy to udata, ret = 
%d\n", ret);
-               }
        }
 
        return ret;
diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c 
b/drivers/infiniband/hw/hns/hns_roce_qp.c
index a27ea85bb06323..6d63613dcd5a9a 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -1235,12 +1235,9 @@ static int hns_roce_create_qp_common(struct hns_roce_dev 
*hr_dev,
 
        if (udata) {
                resp.cap_flags = hr_qp->en_flags;
-               ret = ib_copy_to_udata(udata, &resp,
-                                      min(udata->outlen, sizeof(resp)));
-               if (ret) {
-                       ibdev_err(ibdev, "copy qp resp failed!\n");
+               ret = ib_respond_udata(udata, resp);
+               if (ret)
                        goto err_flow_ctrl;
-               }
        }
 
        if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_QP_FLOW_CTRL) {
@@ -1487,11 +1484,7 @@ int hns_roce_modify_qp(struct ib_qp *ibqp, struct 
ib_qp_attr *attr,
        if (udata && udata->outlen) {
                resp.tc_mode = hr_qp->tc_mode;
                resp.priority = hr_qp->sl;
-               ret = ib_copy_to_udata(udata, &resp,
-                                      min(udata->outlen, sizeof(resp)));
-               if (ret)
-                       ibdev_err_ratelimited(&hr_dev->ib_dev,
-                                             "failed to copy modify qp 
resp.\n");
+               ret = ib_respond_udata(udata, resp);
        }
 
 out:
diff --git a/drivers/infiniband/hw/hns/hns_roce_srq.c 
b/drivers/infiniband/hw/hns/hns_roce_srq.c
index d6201ddde0292a..113037c83a0376 100644
--- a/drivers/infiniband/hw/hns/hns_roce_srq.c
+++ b/drivers/infiniband/hw/hns/hns_roce_srq.c
@@ -473,11 +473,9 @@ int hns_roce_create_srq(struct ib_srq *ib_srq,
        if (udata) {
                resp.cap_flags = srq->cap_flags;
                resp.srqn = srq->srqn;
-               if (ib_copy_to_udata(udata, &resp,
-                                    min(udata->outlen, sizeof(resp)))) {
-                       ret = -EFAULT;
+               ret = ib_respond_udata(udata, resp);
+               if (ret)
                        goto err_srqc;
-               }
        }
 
        srq->event = hns_roce_ib_srq_event;
diff --git a/drivers/infiniband/hw/irdma/verbs.c 
b/drivers/infiniband/hw/irdma/verbs.c
index 17086048d2d7fc..79e72a457e7983 100644
--- a/drivers/infiniband/hw/irdma/verbs.c
+++ b/drivers/infiniband/hw/irdma/verbs.c
@@ -325,9 +325,9 @@ static int irdma_alloc_ucontext(struct ib_ucontext *uctx,
                uresp.max_pds = iwdev->rf->sc_dev.hw_attrs.max_hw_pds;
                uresp.wq_size = iwdev->rf->sc_dev.hw_attrs.max_qp_wr * 2;
                uresp.kernel_ver = req.userspace_ver;
-               if (ib_copy_to_udata(udata, &uresp,
-                                    min(sizeof(uresp), udata->outlen)))
-                       return -EFAULT;
+               ret = ib_respond_udata(udata, uresp);
+               if (ret)
+                       return ret;
        } else {
                u64 bar_off = 
(uintptr_t)iwdev->rf->sc_dev.hw_regs[IRDMA_DB_ADDR_OFFSET];
 
@@ -354,10 +354,10 @@ static int irdma_alloc_ucontext(struct ib_ucontext *uctx,
                uresp.comp_mask |= IRDMA_ALLOC_UCTX_MIN_HW_WQ_SIZE;
                uresp.max_hw_srq_quanta = uk_attrs->max_hw_srq_quanta;
                uresp.comp_mask |= IRDMA_ALLOC_UCTX_MAX_HW_SRQ_QUANTA;
-               if (ib_copy_to_udata(udata, &uresp,
-                                    min(sizeof(uresp), udata->outlen))) {
+               ret = ib_respond_udata(udata, uresp);
+               if (ret) {
                        rdma_user_mmap_entry_remove(ucontext->db_mmap_entry);
-                       return -EFAULT;
+                       return ret;
                }
        }
 
@@ -420,11 +420,9 @@ static int irdma_alloc_pd(struct ib_pd *pd, struct 
ib_udata *udata)
                                                  ibucontext);
                irdma_sc_pd_init(dev, sc_pd, pd_id, ucontext->abi_ver);
                uresp.pd_id = pd_id;
-               if (ib_copy_to_udata(udata, &uresp,
-                                    min(sizeof(uresp), udata->outlen))) {
-                       err = -EFAULT;
+               err = ib_respond_udata(udata, uresp);
+               if (err)
                        goto error;
-               }
        } else {
                irdma_sc_pd_init(dev, sc_pd, pd_id, IRDMA_ABI_VER);
        }
@@ -1124,10 +1122,8 @@ static int irdma_create_qp(struct ib_qp *ibqp,
                uresp.qp_id = qp_num;
                uresp.qp_caps = qp->qp_uk.qp_caps;
 
-               err_code = ib_copy_to_udata(udata, &uresp,
-                                           min(sizeof(uresp), udata->outlen));
+               err_code = ib_respond_udata(udata, uresp);
                if (err_code) {
-                       ibdev_dbg(&iwdev->ibdev, "VERBS: copy_to_udata 
failed\n");
                        irdma_destroy_qp(&iwqp->ibqp, udata);
                        return err_code;
                }
@@ -1612,12 +1608,9 @@ int irdma_modify_qp_roce(struct ib_qp *ibqp, struct 
ib_qp_attr *attr,
                                uresp.push_valid = 1;
                                uresp.push_offset = iwqp->sc_qp.push_offset;
                        }
-                       ret = ib_copy_to_udata(udata, &uresp, min(sizeof(uresp),
-                                              udata->outlen));
+                       ret = ib_respond_udata(udata, uresp);
                        if (ret) {
                                irdma_remove_push_mmap_entries(iwqp);
-                               ibdev_dbg(&iwdev->ibdev,
-                                         "VERBS: copy_to_udata failed\n");
                                return ret;
                        }
                }
@@ -1860,12 +1853,9 @@ int irdma_modify_qp(struct ib_qp *ibqp, struct 
ib_qp_attr *attr, int attr_mask,
                        uresp.push_offset = iwqp->sc_qp.push_offset;
                }
 
-               err = ib_copy_to_udata(udata, &uresp, min(sizeof(uresp),
-                                      udata->outlen));
+               err = ib_respond_udata(udata, uresp);
                if (err) {
                        irdma_remove_push_mmap_entries(iwqp);
-                       ibdev_dbg(&iwdev->ibdev,
-                                 "VERBS: copy_to_udata failed\n");
                        return err;
                }
        }
@@ -2418,11 +2408,9 @@ static int irdma_create_srq(struct ib_srq *ibsrq,
 
                resp.srq_id = iwsrq->srq_num;
                resp.srq_size = ukinfo->srq_size;
-               if (ib_copy_to_udata(udata, &resp,
-                                    min(sizeof(resp), udata->outlen))) {
-                       err_code = -EPROTO;
+               err_code = ib_respond_udata(udata, resp);
+               if (err_code)
                        goto srq_destroy;
-               }
        }
 
        return 0;
@@ -2664,13 +2652,9 @@ static int irdma_create_cq(struct ib_cq *ibcq,
 
                resp.cq_id = info.cq_uk_init_info.cq_id;
                resp.cq_size = info.cq_uk_init_info.cq_size;
-               if (ib_copy_to_udata(udata, &resp,
-                                    min(sizeof(resp), udata->outlen))) {
-                       ibdev_dbg(&iwdev->ibdev,
-                                 "VERBS: copy to user data\n");
-                       err_code = -EPROTO;
+               err_code = ib_respond_udata(udata, resp);
+               if (err_code)
                        goto cq_destroy;
-               }
        }
 
        init_completion(&iwcq->free_cq);
@@ -5330,7 +5314,7 @@ static int irdma_create_user_ah(struct ib_ah *ibah,
        mutex_unlock(&iwdev->rf->ah_tbl_lock);
 
        uresp.ah_id = ah->sc_ah.ah_info.ah_idx;
-       err = ib_copy_to_udata(udata, &uresp, min(sizeof(uresp), 
udata->outlen));
+       err = ib_respond_udata(udata, uresp);
        if (err)
                irdma_destroy_ah(ibah, attr->flags);
 
diff --git a/drivers/infiniband/hw/mana/cq.c b/drivers/infiniband/hw/mana/cq.c
index f4cbe21763bf11..43b3ef65d3fc6d 100644
--- a/drivers/infiniband/hw/mana/cq.c
+++ b/drivers/infiniband/hw/mana/cq.c
@@ -79,11 +79,9 @@ int mana_ib_create_cq(struct ib_cq *ibcq, const struct 
ib_cq_init_attr *attr,
 
        if (udata) {
                resp.cqid = cq->queue.id;
-               err = ib_copy_to_udata(udata, &resp, min(sizeof(resp), 
udata->outlen));
-               if (err) {
-                       ibdev_dbg(&mdev->ib_dev, "Failed to copy to udata, 
%d\n", err);
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto err_remove_cq_cb;
-               }
        }
 
        spin_lock_init(&cq->cq_lock);
diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c
index f503445a38f2d8..afc1d0e299aaf4 100644
--- a/drivers/infiniband/hw/mana/qp.c
+++ b/drivers/infiniband/hw/mana/qp.c
@@ -555,11 +555,9 @@ static int mana_ib_create_rc_qp(struct ib_qp *ibqp, struct 
ib_pd *ibpd,
                        resp.queue_id[j] = qp->rc_qp.queues[i].id;
                        j++;
                }
-               err = ib_copy_to_udata(udata, &resp, min(sizeof(resp), 
udata->outlen));
-               if (err) {
-                       ibdev_dbg(&mdev->ib_dev, "Failed to copy to udata, 
%d\n", err);
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto destroy_qp;
-               }
        }
 
        err = mana_table_store_qp(mdev, qp);
diff --git a/drivers/infiniband/hw/mlx5/srq.c b/drivers/infiniband/hw/mlx5/srq.c
index 852f6f502d14d0..3fb8519a4ce0d7 100644
--- a/drivers/infiniband/hw/mlx5/srq.c
+++ b/drivers/infiniband/hw/mlx5/srq.c
@@ -292,12 +292,9 @@ int mlx5_ib_create_srq(struct ib_srq *ib_srq,
                        .srqn = srq->msrq.srqn,
                };
 
-               if (ib_copy_to_udata(udata, &resp, min(udata->outlen,
-                                    sizeof(resp)))) {
-                       mlx5_ib_dbg(dev, "copy to user failed\n");
-                       err = -EFAULT;
+               err = ib_respond_udata(udata, resp);
+               if (err)
                        goto err_core;
-               }
        }
 
        init_attr->attr.max_wr = srq->msrq.max - 1;
diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c 
b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c
index 16aab967a20308..cefcb243c3a6f2 100644
--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c
+++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c
@@ -406,12 +406,10 @@ int pvrdma_create_qp(struct ib_qp *ibqp, struct 
ib_qp_init_attr *init_attr,
                qp_resp.qpn = qp->ibqp.qp_num;
                qp_resp.qp_handle = qp->qp_handle;
 
-               if (ib_copy_to_udata(udata, &qp_resp,
-                                    min(udata->outlen, sizeof(qp_resp)))) {
-                       dev_warn(&dev->pdev->dev,
-                                "failed to copy back udata\n");
+               ret = ib_respond_udata(udata, qp_resp);
+               if (ret) {
                        __pvrdma_destroy_qp(dev, qp);
-                       return -EINVAL;
+                       return ret;
                }
        }
 
-- 
2.43.0


Reply via email to