diff mbox series

i40iw: Fix error unwinding when i40iw_hmc_sd_one fails

Message ID 20210416002104.323-1-shiraz.saleem@intel.com (mailing list archive)
State Accepted
Delegated to: Jason Gunthorpe
Headers show
Series i40iw: Fix error unwinding when i40iw_hmc_sd_one fails | expand

Commit Message

Shiraz Saleem April 16, 2021, 12:21 a.m. UTC
From: Sindhu Devale <sindhu.devale@intel.com>

When i40iw_hmc_sd_one fails, chunk is freed without the
deletion of chunk entry in the PBLE info list.

Fix it by adding the chunk entry to the PBLE info list only
after successful addition of SD in i40iw_hmc_sd_one.

This fixes a static checker warning reported in [1]

[1] https://lore.kernel.org/linux-rdma/YHV4CFXzqTm23AOZ@mwanda/

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Sindhu Devale <sindhu.devale@intel.com>
Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
---
 drivers/infiniband/hw/i40iw/i40iw_pble.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

Comments

Jason Gunthorpe April 20, 2021, 7:10 p.m. UTC | #1
On Thu, Apr 15, 2021 at 07:21:04PM -0500, Shiraz Saleem wrote:
> From: Sindhu Devale <sindhu.devale@intel.com>
> 
> When i40iw_hmc_sd_one fails, chunk is freed without the
> deletion of chunk entry in the PBLE info list.
> 
> Fix it by adding the chunk entry to the PBLE info list only
> after successful addition of SD in i40iw_hmc_sd_one.
> 
> This fixes a static checker warning reported in [1]
> 
> [1] https://lore.kernel.org/linux-rdma/YHV4CFXzqTm23AOZ@mwanda/
> 
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Signed-off-by: Sindhu Devale <sindhu.devale@intel.com>
> Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
> ---
>  drivers/infiniband/hw/i40iw/i40iw_pble.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)

I added a fixes line an applied to for-next, thanks

Jason
diff mbox series

Patch

diff --git a/drivers/infiniband/hw/i40iw/i40iw_pble.c b/drivers/infiniband/hw/i40iw/i40iw_pble.c
index 53e5cd1..146a414 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_pble.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_pble.c
@@ -393,12 +393,9 @@  static enum i40iw_status_code add_pble_pool(struct i40iw_sc_dev *dev,
 	i40iw_debug(dev, I40IW_DEBUG_PBLE, "next_fpm_addr = %llx chunk_size[%u] = 0x%x\n",
 		    pble_rsrc->next_fpm_addr, chunk->size, chunk->size);
 	pble_rsrc->unallocated_pble -= (chunk->size >> 3);
-	list_add(&chunk->list, &pble_rsrc->pinfo.clist);
 	sd_reg_val = (sd_entry_type == I40IW_SD_TYPE_PAGED) ?
 			sd_entry->u.pd_table.pd_page_addr.pa : sd_entry->u.bp.addr.pa;
-	if (sd_entry->valid)
-		return 0;
-	if (dev->is_pf) {
+	if (dev->is_pf && !sd_entry->valid) {
 		ret_code = i40iw_hmc_sd_one(dev, hmc_info->hmc_fn_id,
 					    sd_reg_val, idx->sd_idx,
 					    sd_entry->entry_type, true);
@@ -409,6 +406,7 @@  static enum i40iw_status_code add_pble_pool(struct i40iw_sc_dev *dev,
 	}
 
 	sd_entry->valid = true;
+	list_add(&chunk->list, &pble_rsrc->pinfo.clist);
 	return 0;
  error:
 	kfree(chunk);