be2net: gather debug info and reset adapter (only for Lancer) on a tx-timeout
authorSuresh Reddy <suresh.reddy@broadcom.com>
Tue, 31 Jul 2018 15:39:42 +0000 (11:39 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 1 Aug 2018 16:39:09 +0000 (09:39 -0700)
commitc1b3bdb2ffa9a343ded117e01d6b4b43b9df53f8
tree504b794a8191bacb67460733973759745d224f1b
parent96d395020e87607b3454edc2f49a03ddcfbef986
be2net: gather debug info and reset adapter (only for Lancer) on a tx-timeout

This patch handles a TX-timeout as follows:

1) This patch gathers and prints the following info that can
   help in diagnosing the cause of a TX-timeout.
   a) TX queue and completion queue entries.
   b) SKB and TCP/UDP header details.

2) For Lancer NICs (TX-timeout recovery is not supported for
   BE3/Skyhawk-R NICs), it recovers from the TX timeout as follows:

   a) On a TX-timeout, driver sets the PHYSDEV_CONTROL_FW_RESET_MASK
      bit in the PHYSDEV_CONTROL register. Lancer firmware goes into
      an error state and indicates this back to the driver via a bit
      in a doorbell register.
   b) Driver detects this and calls be_err_recover(). DMA is disabled,
      all pending TX skbs are unmapped and freed (be_close()). All rings
      are destroyed (be_clear()).
   c) The driver waits for the FW to re-initialize and re-creates all
      rings along with other data structs (be_resume())

Signed-off-by: Suresh Reddy <suresh.reddy@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_main.c