Re: [PATCH v2 for-next 12/17] RDMA/i40iw: Use refcount_t instead of atomic_t on refcount of i40iw_cqp_request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 21, 2021 at 7:35 PM Weihang Li <liweihang@xxxxxxxxxx> wrote:
>
> The refcount_t API will WARN on underflow and overflow of a reference
> counter, and avoid use-after-free risks.
>
> Cc: Faisal Latif <faisal.latif@xxxxxxxxx>
> Cc: Shiraz Saleem <shiraz.saleem@xxxxxxxxx>
> Signed-off-by: Weihang Li <liweihang@xxxxxxxxxx>
> ---
>  drivers/infiniband/hw/i40iw/i40iw.h       |  2 +-
>  drivers/infiniband/hw/i40iw/i40iw_main.c  |  2 +-
>  drivers/infiniband/hw/i40iw/i40iw_utils.c | 10 +++++-----

https://patchwork.kernel.org/project/linux-rdma/patch/20210520143809.819-22-shiraz.saleem@xxxxxxxxx/

In this commit, i40iw will be removed. And this commit will be merged
into upstream linux.
Not sure if this commit makes sense.

>  3 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h
> index be4094a..15c5dd6 100644
> --- a/drivers/infiniband/hw/i40iw/i40iw.h
> +++ b/drivers/infiniband/hw/i40iw/i40iw.h
> @@ -137,7 +137,7 @@ struct i40iw_cqp_request {
>         struct cqp_commands_info info;
>         wait_queue_head_t waitq;
>         struct list_head list;
> -       atomic_t refcount;
> +       refcount_t refcount;
>         void (*callback_fcn)(struct i40iw_cqp_request*, u32);
>         void *param;
>         struct i40iw_cqp_compl_info compl_info;
> diff --git a/drivers/infiniband/hw/i40iw/i40iw_main.c b/drivers/infiniband/hw/i40iw/i40iw_main.c
> index b496f30..fc48555 100644
> --- a/drivers/infiniband/hw/i40iw/i40iw_main.c
> +++ b/drivers/infiniband/hw/i40iw/i40iw_main.c
> @@ -1125,7 +1125,7 @@ static enum i40iw_status_code i40iw_alloc_local_mac_ipaddr_entry(struct i40iw_de
>         }
>
>         /* increment refcount, because we need the cqp request ret value */
> -       atomic_inc(&cqp_request->refcount);
> +       refcount_inc(&cqp_request->refcount);
>
>         cqp_info = &cqp_request->info;
>         cqp_info->cqp_cmd = OP_ALLOC_LOCAL_MAC_IPADDR_ENTRY;
> diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
> index 9ff825f..32ff432b 100644
> --- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
> +++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
> @@ -384,10 +384,10 @@ struct i40iw_cqp_request *i40iw_get_cqp_request(struct i40iw_cqp *cqp, bool wait
>         }
>
>         if (wait) {
> -               atomic_set(&cqp_request->refcount, 2);
> +               refcount_set(&cqp_request->refcount, 2);
>                 cqp_request->waiting = true;
>         } else {
> -               atomic_set(&cqp_request->refcount, 1);
> +               refcount_set(&cqp_request->refcount, 1);
>         }
>         return cqp_request;
>  }
> @@ -424,7 +424,7 @@ void i40iw_free_cqp_request(struct i40iw_cqp *cqp, struct i40iw_cqp_request *cqp
>  void i40iw_put_cqp_request(struct i40iw_cqp *cqp,
>                            struct i40iw_cqp_request *cqp_request)
>  {
> -       if (atomic_dec_and_test(&cqp_request->refcount))
> +       if (refcount_dec_and_test(&cqp_request->refcount))
>                 i40iw_free_cqp_request(cqp, cqp_request);
>  }
>
> @@ -445,7 +445,7 @@ static void i40iw_free_pending_cqp_request(struct i40iw_cqp *cqp,
>         }
>         i40iw_put_cqp_request(cqp, cqp_request);
>         wait_event_timeout(iwdev->close_wq,
> -                          !atomic_read(&cqp_request->refcount),
> +                          !refcount_read(&cqp_request->refcount),
>                            1000);
>  }
>
> @@ -1005,7 +1005,7 @@ static void i40iw_cqp_manage_hmc_fcn_callback(struct i40iw_cqp_request *cqp_requ
>
>         if (hmcfcninfo && hmcfcninfo->callback_fcn) {
>                 i40iw_debug(&iwdev->sc_dev, I40IW_DEBUG_HMC, "%s1\n", __func__);
> -               atomic_inc(&cqp_request->refcount);
> +               refcount_inc(&cqp_request->refcount);
>                 work = &iwdev->virtchnl_w[hmcfcninfo->iw_vf_idx];
>                 work->cqp_request = cqp_request;
>                 INIT_WORK(&work->work, i40iw_cqp_manage_hmc_fcn_worker);
> --
> 2.7.4
>



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux