Merge branch 'bnxt_en-error-recovery-bug-fixes'
Michael Chan says: ==================== bnxt_en: Error recovery bug fixes. Two error recovery related bug fixes for 2 corner cases. Please queue patch #2 for -stable. Thanks. ==================== Link: https://lore.kernel.org/r/1614332590-17865-1-git-send-email-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
eee7ede695
|
@ -8556,10 +8556,18 @@ static void bnxt_setup_inta(struct bnxt *bp)
|
|||
bp->irq_tbl[0].handler = bnxt_inta;
|
||||
}
|
||||
|
||||
static int bnxt_init_int_mode(struct bnxt *bp);
|
||||
|
||||
static int bnxt_setup_int_mode(struct bnxt *bp)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (!bp->irq_tbl) {
|
||||
rc = bnxt_init_int_mode(bp);
|
||||
if (rc || !bp->irq_tbl)
|
||||
return rc ?: -ENODEV;
|
||||
}
|
||||
|
||||
if (bp->flags & BNXT_FLAG_USING_MSIX)
|
||||
bnxt_setup_msix(bp);
|
||||
else
|
||||
|
@ -8744,7 +8752,7 @@ static int bnxt_init_inta(struct bnxt *bp)
|
|||
|
||||
static int bnxt_init_int_mode(struct bnxt *bp)
|
||||
{
|
||||
int rc = 0;
|
||||
int rc = -ENODEV;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_MSIX_CAP)
|
||||
rc = bnxt_init_msix(bp);
|
||||
|
@ -9514,7 +9522,8 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
|
|||
{
|
||||
struct hwrm_func_drv_if_change_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
struct hwrm_func_drv_if_change_input req = {0};
|
||||
bool resc_reinit = false, fw_reset = false;
|
||||
bool fw_reset = !bp->irq_tbl;
|
||||
bool resc_reinit = false;
|
||||
int rc, retry = 0;
|
||||
u32 flags = 0;
|
||||
|
||||
|
@ -9557,6 +9566,7 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
|
|||
|
||||
if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state) && !fw_reset) {
|
||||
netdev_err(bp->dev, "RESET_DONE not set during FW reset.\n");
|
||||
set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
|
||||
return -ENODEV;
|
||||
}
|
||||
if (resc_reinit || fw_reset) {
|
||||
|
@ -9890,6 +9900,9 @@ static int bnxt_reinit_after_abort(struct bnxt *bp)
|
|||
if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
return -EBUSY;
|
||||
|
||||
if (bp->dev->reg_state == NETREG_UNREGISTERED)
|
||||
return -ENODEV;
|
||||
|
||||
rc = bnxt_fw_init_one(bp);
|
||||
if (!rc) {
|
||||
bnxt_clear_int_mode(bp);
|
||||
|
|
Loading…
Reference in New Issue