]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bnxt_en: call pci_alloc_irq_vectors() after bnxt_reserve_rings()
authorKashyap Desai <kashyap.desai@broadcom.com>
Mon, 28 Apr 2025 22:58:59 +0000 (15:58 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Apr 2025 12:03:21 +0000 (13:03 +0100)
On some architectures (e.g. ARM), calling pci_alloc_irq_vectors()
will immediately cause the MSIX table to be written.  This will not
work if we haven't called bnxt_reserve_rings() to properly map
the MSIX table to the MSIX vectors reserved by FW.

Fix the FW error recovery path to delay the bnxt_init_int_mode() ->
pci_alloc_irq_vectors() call by removing it from bnxt_hwrm_if_change().
bnxt_request_irq() later in the code path will call it and by then the
MSIX table is properly mapped.

Fixes: 4343838ca5eb ("bnxt_en: Replace deprecated PCI MSIX APIs")
Suggested-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index cfc9ccab39bf8c6234105ccbb5db7d0a95ec2823..3b2ea36f25a2a7c651b1db0ee95e8c44e584dd16 100644 (file)
@@ -12399,13 +12399,8 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
                                set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
                                return rc;
                        }
+                       /* IRQ will be initialized later in bnxt_request_irq()*/
                        bnxt_clear_int_mode(bp);
-                       rc = bnxt_init_int_mode(bp);
-                       if (rc) {
-                               clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state);
-                               netdev_err(bp->dev, "init int mode failed\n");
-                               return rc;
-                       }
                }
                rc = bnxt_cancel_reservations(bp, fw_reset);
        }