bnxt_en: Add a new BNXT_STATE_NAPI_DISABLED flag to keep track of NAPI state.
authorMichael Chan <michael.chan@broadcom.com>
Mon, 25 Jan 2021 07:08:17 +0000 (02:08 -0500)
committerJakub Kicinski <kuba@kernel.org>
Tue, 26 Jan 2021 03:20:04 +0000 (19:20 -0800)
Up until now, we don't need to keep track of this state because NAPI
is always enabled once and disabled once during bring up and shutdown.
For better error recovery in subsequent patches, we want to quiesce
the device earlier during fatal error conditions.  The normal shutdown
sequence will disable NAPI again and the flag will prevent disabling
NAPI twice.

Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
Reviewed-by: Edwin Peer <edwin.peer@broadcom.com>
Reviewed-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h

index 98caac9fbdee715fd6c694f7a02b707a7a1f8315..83846b50042a9754fea739c9d1dae96c830e5acd 100644 (file)
@@ -8836,7 +8836,8 @@ static void bnxt_disable_napi(struct bnxt *bp)
 {
        int i;
 
-       if (!bp->bnapi)
+       if (!bp->bnapi ||
+           test_and_set_bit(BNXT_STATE_NAPI_DISABLED, &bp->state))
                return;
 
        for (i = 0; i < bp->cp_nr_rings; i++) {
@@ -8853,6 +8854,7 @@ static void bnxt_enable_napi(struct bnxt *bp)
 {
        int i;
 
+       clear_bit(BNXT_STATE_NAPI_DISABLED, &bp->state);
        for (i = 0; i < bp->cp_nr_rings; i++) {
                struct bnxt_napi *bnapi = bp->bnapi[i];
                struct bnxt_cp_ring_info *cpr;
index bd36f00ef28ca92b90ee7ef4fe8ae2c2051762f1..4ef6888acdc6defe03ff068da4bdfe7ce4be146d 100644 (file)
@@ -1809,6 +1809,7 @@ struct bnxt {
 #define BNXT_STATE_FW_FATAL_COND       6
 #define BNXT_STATE_DRV_REGISTERED      7
 #define BNXT_STATE_PCI_CHANNEL_IO_FROZEN       8
+#define BNXT_STATE_NAPI_DISABLED       9
 
 #define BNXT_NO_FW_ACCESS(bp)                                  \
        (test_bit(BNXT_STATE_FW_FATAL_COND, &(bp)->state) ||    \