bnxt_en: call pci_alloc_irq_vectors() after bnxt_reserve_rings()
[ Upstream commit 1ae04e489dd757e1e61999362f33e7c554c3b9e3 ]
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: 4343838ca5 ("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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
aa15f389fc
commit
626af9b8e8
@@ -11851,13 +11851,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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user