Convert the pattern: if (udata->inlen && !ib_is_udata_cleared(udata, 0, udata->inlen))
Using Coccinelle: virtual patch virtual context virtual report @@ expression udata; @@ ( - udata->inlen && !ib_is_udata_cleared(udata, 0, udata->inlen) + !ib_is_udata_in_empty(udata) | - udata->inlen > 0 && !ib_is_udata_cleared(udata, 0, udata->inlen) + !ib_is_udata_in_empty(udata) ) @@ expression udata; @@ - udata && udata->inlen && !ib_is_udata_cleared(udata, 0, udata->inlen) + !ib_is_udata_in_empty(udata) These cases are already checking for zeroed data that the kernel does not understand. 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 | 43 +++++++++------------------ drivers/infiniband/hw/mlx4/main.c | 6 ++-- drivers/infiniband/hw/mlx4/qp.c | 7 ++--- drivers/infiniband/hw/mlx5/main.c | 5 ++-- drivers/infiniband/hw/mlx5/qp.c | 7 ++--- 5 files changed, 26 insertions(+), 42 deletions(-) diff --git a/drivers/infiniband/hw/efa/efa_verbs.c b/drivers/infiniband/hw/efa/efa_verbs.c index 7bd0838ebc99e4..3ad5d6e27b1590 100644 --- a/drivers/infiniband/hw/efa/efa_verbs.c +++ b/drivers/infiniband/hw/efa/efa_verbs.c @@ -218,12 +218,9 @@ int efa_query_device(struct ib_device *ibdev, struct efa_dev *dev = to_edev(ibdev); int err; - if (udata && udata->inlen && - !ib_is_udata_cleared(udata, 0, udata->inlen)) { - ibdev_dbg(ibdev, - "Incompatible ABI params, udata not cleared\n"); - return -EINVAL; - } + err = ib_is_udata_in_empty(udata); + if (err) + return err; dev_attr = &dev->dev_attr; @@ -433,13 +430,9 @@ int efa_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) struct efa_pd *pd = to_epd(ibpd); int err; - if (udata->inlen && - !ib_is_udata_cleared(udata, 0, udata->inlen)) { - ibdev_dbg(&dev->ibdev, - "Incompatible ABI params, udata not cleared\n"); - err = -EINVAL; + err = ib_is_udata_in_empty(udata); + if (err) goto err_out; - } err = efa_com_alloc_pd(&dev->edev, &result); if (err) @@ -982,12 +975,9 @@ int efa_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, if (qp_attr_mask & ~IB_QP_ATTR_STANDARD_BITS) return -EOPNOTSUPP; - if (udata->inlen && - !ib_is_udata_cleared(udata, 0, udata->inlen)) { - ibdev_dbg(&dev->ibdev, - "Incompatible ABI params, udata not cleared\n"); - return -EINVAL; - } + err = ib_is_udata_in_empty(udata); + if (err) + return err; cur_state = qp_attr_mask & IB_QP_CUR_STATE ? qp_attr->cur_qp_state : qp->state; @@ -1612,13 +1602,11 @@ static struct efa_mr *efa_alloc_mr(struct ib_pd *ibpd, int access_flags, struct efa_dev *dev = to_edev(ibpd->device); int supp_access_flags; struct efa_mr *mr; + int ret; - if (udata && udata->inlen && - !ib_is_udata_cleared(udata, 0, udata->inlen)) { - ibdev_dbg(&dev->ibdev, - "Incompatible ABI params, udata not cleared\n"); - return ERR_PTR(-EINVAL); - } + ret = ib_is_udata_in_empty(udata); + if (ret) + return ERR_PTR(ret); supp_access_flags = IB_ACCESS_LOCAL_WRITE | @@ -2082,12 +2070,9 @@ int efa_create_ah(struct ib_ah *ibah, goto err_out; } - if (udata->inlen && - !ib_is_udata_cleared(udata, 0, udata->inlen)) { - ibdev_dbg(&dev->ibdev, "Incompatible ABI params\n"); - err = -EINVAL; + err = ib_is_udata_in_empty(udata); + if (err) goto err_out; - } memcpy(params.dest_addr, ah_attr->grh.dgid.raw, sizeof(params.dest_addr)); diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 464c9ab4251636..16e9ce8138cb30 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -1696,9 +1696,9 @@ static struct ib_flow *mlx4_ib_create_flow(struct ib_qp *qp, (flow_attr->type != IB_FLOW_ATTR_NORMAL)) return ERR_PTR(-EOPNOTSUPP); - if (udata && - udata->inlen && !ib_is_udata_cleared(udata, 0, udata->inlen)) - return ERR_PTR(-EOPNOTSUPP); + err = ib_is_udata_in_empty(udata); + if (err) + return ERR_PTR(err); memset(type, 0, sizeof(type)); diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 790be09d985a1a..aca8a985ce33cd 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c @@ -4297,10 +4297,9 @@ int mlx4_ib_create_rwq_ind_table(struct ib_rwq_ind_table *rwq_ind_table, size_t min_resp_len; int i, err = 0; - if (udata->inlen > 0 && - !ib_is_udata_cleared(udata, 0, - udata->inlen)) - return -EOPNOTSUPP; + err = ib_is_udata_in_empty(udata); + if (err) + return err; min_resp_len = offsetof(typeof(resp), reserved) + sizeof(resp.reserved); if (udata->outlen && udata->outlen < min_resp_len) diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c index e02bfb1479f5c3..7d435cf5a2fdae 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c @@ -964,8 +964,9 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, resp.response_length = resp_len; - if (uhw && uhw->inlen && !ib_is_udata_cleared(uhw, 0, uhw->inlen)) - return -EINVAL; + err = ib_is_udata_in_empty(uhw); + if (err) + return err; memset(props, 0, sizeof(*props)); err = mlx5_query_system_image_guid(ibdev, diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index 8f50e7342a7694..81d98b5010f1ca 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c @@ -5533,10 +5533,9 @@ int mlx5_ib_create_rwq_ind_table(struct ib_rwq_ind_table *ib_rwq_ind_table, u32 *in; void *rqtc; - if (udata->inlen > 0 && - !ib_is_udata_cleared(udata, 0, - udata->inlen)) - return -EOPNOTSUPP; + err = ib_is_udata_in_empty(udata); + if (err) + return err; if (init_attr->log_ind_tbl_size > MLX5_CAP_GEN(dev->mdev, log_max_rqt_size)) { -- 2.43.0
