1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/net/ethernet/intel/fm10k
Jacob Keller d876c1583b fm10k: don't loop while resetting VFs due to VFLR event
We've always had a really weird looping construction for resetting VFs.
We read the VFLRE register and reset the VF if the corresponding bit is
set, which makes sense. However we loop continuously until we no longer
have any bits left unset. At first this makes sense, as a sort of "keep
trying until we succeed" concept.

Unfortunately this causes a problem if we happen to surprise remove
while this code is executing, because in this case we'll always read all
1s for the VFLRE register. This results in a hard lockup on the CPU
because the loop will never terminate.

Because our own reset function will clear the VFLR event register
always, (except when we've lost PCIe link obviously) there is no real
reason to loop. In practice, we'll loop over once and find that no VFs
are pending anymore.

Lets just check once. Since we're clear the notification when we reset
there's no benefit to the loop. Additionally, there shouldn't be a race
as future VLFRE events should trigger an interrupt. Additionally, we
didn't warn or do anything in the looped case anyways.

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-02 08:06:30 -07:00
..
fm10k.h fm10k: allow service task to reschedule itself 2017-04-05 22:47:30 -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 net: sched: get rid of struct tc_to_netdev 2017-08-07 09:42:37 -07:00
fm10k_pci.c fm10k: avoid needless delay when loading driver 2017-10-02 07:57:42 -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
Makefile fm10k: consistently use Intel(R) for driver names 2016-04-20 23:07:34 -07:00