From patchwork Sun Sep 12 16:34:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 510337 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, MIME_HEADER_CTYPE_ONLY, SPF_HELO_NONE, SPF_PASS, T_TVD_MIME_NO_HEADERS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B15BC433EF for ; Sun, 12 Sep 2021 16:35:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E2EE860BD3 for ; Sun, 12 Sep 2021 16:35:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234097AbhILQgV (ORCPT ); Sun, 12 Sep 2021 12:36:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233093AbhILQgT (ORCPT ); Sun, 12 Sep 2021 12:36:19 -0400 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E2EA4C061574 for ; Sun, 12 Sep 2021 09:35:04 -0700 (PDT) Received: by mail-pj1-x102d.google.com with SMTP id gp20-20020a17090adf1400b00196b761920aso4796922pjb.3 for ; Sun, 12 Sep 2021 09:35:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7ppKr6ZTXlGI01b/hUzcLDMgG2UwV4lHjvewc0QSmag=; b=eXipoXONLV4sASgy3mBvCyN26zwcAOm3ic+1HGbX1kgDJLTLMw8SA8ZWkuVCJDFSGp N2nHxXXNOEXeww+8dWW3MIZ7G/JYolKCs/PAI3BF+nU7jzOMC85BGHWzNv4Emq1URJc6 LyfF10RXxCNnnfqdRH4x791O0GM3KfgBKgxPM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7ppKr6ZTXlGI01b/hUzcLDMgG2UwV4lHjvewc0QSmag=; b=dFUw/9YO16a3z/5FQus3QDbDVf9UMRBdnfyUAFK4brTGDwFZQHGZkvVIhyK5qAf6v8 DjQgv9qwvWZJHlej+fmPbGFWnmFspMZg19P6fHmI07VwRzQo7PtO9cEQesU6swqgCKk0 s+BYrP7YTXVGeEUS49I8gOYRQu9WAFbyNgAQOqdDfzScPNbvpiBWxi5mSTQSvfVFT3O1 LnCPpJEHSKlRFzT93qAv0CN6fvEWyWg1NczIfHpGSq9ayLq0hmknZUewbwRwAVG9FqSM tURDmCjn/65NbiAkmG/baJjaavVhxalnVi6pMhBY6MzEjomMw9QVq1R0odhMC8fP1EV6 kBPg== X-Gm-Message-State: AOAM5336mprpcMJ1q/3sjvAkHZK7WZIR/eyLYcreW2kApG/y9O7orHSz olrDwwOaI/q860UP7sFUt10Vx3iwLJ/RxA== X-Google-Smtp-Source: ABdhPJz5O9GF8cbnKl3pU4f08sBk/pwj7zR4ByCqpEwS0+/RalMk8Bju94EE2p51WgT4b9pmwWC24g== X-Received: by 2002:a17:90a:1a52:: with SMTP id 18mr7946002pjl.43.1631464504133; Sun, 12 Sep 2021 09:35:04 -0700 (PDT) Received: from localhost.swdvt.lab.broadcom.net ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id l22sm5444224pgo.45.2021.09.12.09.35.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 12 Sep 2021 09:35:03 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, kuba@kernel.org, edwin.peer@broadcom.com, gospo@broadcom.com Subject: [PATCH net 1/3] bnxt_en: Fix error recovery regression Date: Sun, 12 Sep 2021 12:34:47 -0400 Message-Id: <1631464489-8046-2-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1631464489-8046-1-git-send-email-michael.chan@broadcom.com> References: <1631464489-8046-1-git-send-email-michael.chan@broadcom.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 9b86516e59a1..8b0a2ae1367c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2213,12 +2213,11 @@ static int bnxt_async_event_process(struct bnxt *bp, 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, @@ -12207,6 +12206,11 @@ static void bnxt_fw_reset_task(struct work_struct *work) return; } + 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();