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