]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/bnxt_re: Proper rollback if the ioremap fails
authorSelvin Xavier <selvin.xavier@broadcom.com>
Mon, 15 Jun 2026 22:47:46 +0000 (15:47 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 16 Jun 2026 15:19:10 +0000 (12:19 -0300)
bnxt_qplib_alloc_dpi returns success even if ioremap fails.
Add the proper rollback when the ioremap fails and return
-ENOMEM status.

Fixes: 0ac20faf5d83 ("RDMA/bnxt_re: Reorg the bar mapping")
Fixes: 360da60d6c6e ("RDMA/bnxt_re: Enable low latency push")
Link: https://patch.msgid.link/r/20260615224751.232802-11-selvin.xavier@broadcom.com
Reviewed-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/bnxt_re/qplib_res.c

index 95e0489c53c37194f0e9388c26a40ffec763e9bf..756f8b5f042a9479f11fb3ba61a4b8c345b52ac1 100644 (file)
@@ -764,9 +764,13 @@ int bnxt_qplib_alloc_dpi(struct bnxt_qplib_res *res,
                break;
        case BNXT_QPLIB_DPI_TYPE_WC:
                dpi->dbr = ioremap_wc(umaddr, PAGE_SIZE);
+               if (!dpi->dbr)
+                       goto fail_ioremap;
                break;
        default:
                dpi->dbr = ioremap(umaddr, PAGE_SIZE);
+               if (!dpi->dbr)
+                       goto fail_ioremap;
                break;
        }
 
@@ -774,6 +778,13 @@ int bnxt_qplib_alloc_dpi(struct bnxt_qplib_res *res,
        mutex_unlock(&res->dpi_tbl_lock);
        return 0;
 
+fail_ioremap:
+       /* Roll back the bit we just claimed. */
+       set_bit(bit_num, dpit->tbl);
+       dpit->app_tbl[bit_num] = NULL;
+       mutex_unlock(&res->dpi_tbl_lock);
+       return -ENOMEM;
+
 }
 
 int bnxt_qplib_dealloc_dpi(struct bnxt_qplib_res *res,