This is a note to let you know that I've just added the patch titled bnxt_en: Fix error recovery regression to the 5.10-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: bnxt_en-fix-error-recovery-regression.patch and it can be found in the queue-5.10 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From eca4cf12acda306f851f6d2a05b1c9ef62cf0e81 Mon Sep 17 00:00:00 2001 From: Michael Chan <michael.chan@xxxxxxxxxxxx> Date: Sun, 12 Sep 2021 12:34:47 -0400 Subject: bnxt_en: Fix error recovery regression From: Michael Chan <michael.chan@xxxxxxxxxxxx> commit eca4cf12acda306f851f6d2a05b1c9ef62cf0e81 upstream. The recent patch has introduced a regression by not reading the reset count in the ERROR_RECOVERY async event handler. We may have just gone through a reset and the reset count has just incremented. If we don't update the reset count in the ERROR_RECOVERY event handler, the health check timer will see that the reset count has changed and will initiate an unintended reset. Restore the unconditional update of the reset count in bnxt_async_event_process() if error recovery watchdog is enabled. Also, update the reset count at the end of the reset sequence to make it even more robust. Fixes: 1b2b91831983 ("bnxt_en: Fix possible unintended driver initiated error recovery") Reviewed-by: Edwin Peer <edwin.peer@xxxxxxxxxxxx> Signed-off-by: Michael Chan <michael.chan@xxxxxxxxxxxx> Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2123,12 +2123,11 @@ static int bnxt_async_event_process(stru DIV_ROUND_UP(fw_health->polling_dsecs * HZ, bp->current_interval * 10); fw_health->tmr_counter = fw_health->tmr_multiplier; - if (!fw_health->enabled) { + if (!fw_health->enabled) fw_health->last_fw_heartbeat = bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG); - fw_health->last_fw_reset_cnt = - bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG); - } + fw_health->last_fw_reset_cnt = + bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG); netif_info(bp, drv, bp->dev, "Error recovery info: error recovery[1], master[%d], reset count[%u], health status: 0x%x\n", fw_health->master, fw_health->last_fw_reset_cnt, @@ -11653,6 +11652,11 @@ static void bnxt_fw_reset_task(struct wo dev_close(bp->dev); } + if ((bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY) && + bp->fw_health->enabled) { + bp->fw_health->last_fw_reset_cnt = + bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG); + } bp->fw_reset_state = 0; /* Make sure fw_reset_state is 0 before clearing the flag */ smp_mb__before_atomic(); Patches currently in stable-queue which might be from michael.chan@xxxxxxxxxxxx are queue-5.10/bnxt_en-log-firmware-debug-notifications.patch queue-5.10/bnxt_en-convert-to-use-netif_level-helpers.patch queue-5.10/bnxt_en-fix-error-recovery-regression.patch queue-5.10/bnxt_en-fix-possible-unintended-driver-initiated-err.patch queue-5.10/bnxt_en-make-bnxt_free_skbs-safe-to-call-after-bnxt_free_mem.patch queue-5.10/bnxt_en-fix-stored-fw_psid-version-masks.patch queue-5.10/bnxt_en-consolidate-firmware-reset-event-logging.patch queue-5.10/bnxt_en-improve-logging-of-error-recovery-settings-i.patch queue-5.10/bnxt_en-fix-asic.rev-in-devlink-dev-info-command.patch