]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/bnxt_re: Free SRQ toggle page after firmware teardown
authorSelvin Xavier <selvin.xavier@broadcom.com>
Mon, 15 Jun 2026 22:47:38 +0000 (15:47 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 16 Jun 2026 14:52:01 +0000 (11:52 -0300)
Free the toggle page only after firmware teardown completes so that
an NQ interrupt arriving during bnxt_qplib_destroy_srq() won't write
the toggle values to an already-freed page. Move free_page() after
bnxt_qplib_destroy_srq().

Fixes: 181028a0d84c ("RDMA/bnxt_re: Share a page to expose per SRQ info with userspace")
Link: https://patch.msgid.link/r/20260615224751.232802-3-selvin.xavier@broadcom.com
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/bnxt_re/ib_verbs.c

index 13e765f10db1078129169852ec14045cecf709e1..e48ae2e62be88374e34e2014a83d422449c1b15a 100644 (file)
@@ -2149,11 +2149,11 @@ int bnxt_re_destroy_srq(struct ib_srq *ib_srq, struct ib_udata *udata)
        if (ret)
                return ret;
 
-       if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT) {
-               free_page((unsigned long)srq->uctx_srq_page);
+       if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT)
                hash_del(&srq->hash_entry);
-       }
        bnxt_qplib_destroy_srq(&rdev->qplib_res, qplib_srq);
+       if (rdev->chip_ctx->modes.toggle_bits & BNXT_QPLIB_SRQ_TOGGLE_BIT)
+               free_page((unsigned long)srq->uctx_srq_page);
        ib_umem_release(srq->umem);
        atomic_dec(&rdev->stats.res.srq_count);
        return ib_respond_empty_udata(udata);