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 2021/5/22 17:42, Zhu Yanjun wrote:
> 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.
> 

I see, changes on i40iw will be dropped from this series, thanks.

Weihang

>>  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