linux/drivers/net/ethernet/intel/fm10k
Jacob Keller 0b40f45748 fm10k: prepare_for_reset() when we lose PCIe Link
If we lose PCIe link, such as when an unannounced PFLR event occurs, or
when a device is surprise removed, we currently detach the device and
close the netdev. This unfortunately leaves a lot of things still
active, such as the msix_mbx_pf IRQ, and Tx/Rx resources.

This can cause problems because the register reads will return
potentially invalid values which may result in unknown driver behavior.

Begin the process of resetting using fm10k_prepare_for_reset(), much in
the same way as the suspend and resume cycle does. This will attempt to
shutdown as much as possible, in order to prevent possible issues.

A naive implementation for this has issues, because there are now
multiple flows calling the reset logic and setting a reset bit. This
would cause problems, because the "re-attach" routine might call
fm10k_handle_reset() prior to the reset actually finishing. Instead,
we'll add state bits to indicate which flow actually initiated the
reset.

For the general reset flow, we'll assume that if someone else is
resetting that we do not need to handle it at all, so it does not need
its own state bit. For the suspend case, we will simply issue a warning
indicating that we are attempting to recover from this case when
resuming.

For the detached subtask, we'll simply refuse to re-attach until we've
actually initiated a reset as part of that flow.

Finally, we'll stop attempting to manage the mailbox subtask when we're
detached, since there's nothing we can do if we don't have a PCIe
address.

Overall this produces a much cleaner shutdown and recovery cycle for
a PCIe surprise remove event.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Krishneil Singh <krishneil.k.singh@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2017-10-03 08:06:44 -07:00
..
fm10k_common.c fm10k: stop spurious link down messages when Tx FIFO is full 2017-10-02 07:40:31 -07:00
fm10k_common.h fm10k: prefer READ_ONCE instead of ACCESS_ONCE 2016-08-29 01:31:03 -07:00
fm10k_dcbnl.c fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00
fm10k_debugfs.c fm10k: Use seq_putc() in fm10k_dbg_desc_break() 2017-10-02 07:28:57 -07:00
fm10k_ethtool.c fm10k: future-proof state bitmaps using DECLARE_BITMAP 2017-04-05 22:47:30 -07:00
fm10k_iov.c fm10k: don't loop while resetting VFs due to VFLR event 2017-10-02 08:06:30 -07:00
fm10k_main.c fm10k: add missing fall through comment 2017-10-02 07:54:00 -07:00
fm10k_mbx.c fm10k: fix typos on fall through comments 2017-10-02 07:42:15 -07:00
fm10k_mbx.h fm10k: Reset mailbox global interrupts 2016-07-20 15:22:10 -07:00
fm10k_netdev.c fm10k: avoid divide by zero in rare cases when device is resetting 2017-10-02 08:07:57 -07:00
fm10k_pci.c fm10k: prepare_for_reset() when we lose PCIe Link 2017-10-03 08:06:44 -07:00
fm10k_pf.c fm10k: fix typos on fall through comments 2017-10-02 07:42:15 -07:00
fm10k_pf.h fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00
fm10k_tlv.c fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00
fm10k_tlv.h fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00
fm10k_type.h fm10k: add support for Rx offloads on one Geneve tunnel 2016-08-29 01:31:03 -07:00
fm10k_vf.c fm10k: don't stop reset due to FM10K_ERR_REQUESTS_PENDING 2016-07-20 15:22:11 -07:00
fm10k_vf.h fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00
fm10k.h fm10k: prepare_for_reset() when we lose PCIe Link 2017-10-03 08:06:44 -07:00
Makefile fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00