mirror of https://gitee.com/openkylin/linux.git
e283546c04
When an MCDI command times out (whether or not we find it completed when we poll), call efx_mcdi_abandon(), which tells all subsequent MCDI calls to fail-fast, and queues up an FLR. Because an FLR doesn't lead to receiving any reboot even from the MC (unlike most other types of reset), we have to call efx_ef10_reset_mc_allocations. In efx_start_all(), if a reset (of any kind) is pending, we bail out. Without this, attempts to reconfigure (e.g. change mtu) can cause driver/mc state inconsistency if the first MCDI call triggers an FLR. For similar reasons, on EF10, in efx_reset_down(method=RESET_TYPE_MCDI_TIMEOUT), set the number of active queues to zero before calling efx_stop_all(). And, on farch, in efx_reset_up(method=RESET_TYPE_MCDI_TIMEOUT), set active_queues and flushes pending & outstanding to zero. efx_mcdi_mode_{poll,event}() should not take us out of fail-fast mode. Instead, this is done by efx_mcdi_reset() after the FLR completes. The new FLR reset_type RESET_TYPE_MCDI_TIMEOUT doesn't really fit into the hierarchy of reset 'scopes' whereby efx_reset() decides some resets subsume others. Thus, it uses separate logic. Also, fixed up some inconsistency around RESET_TYPE_MC_BIST, which was in the wrong place in that hierarchy. Signed-off-by: Shradha Shah <sshah@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
bitfield.h | ||
ef10.c | ||
ef10_regs.h | ||
efx.c | ||
efx.h | ||
enum.h | ||
ethtool.c | ||
falcon.c | ||
falcon_boards.c | ||
farch.c | ||
farch_regs.h | ||
filter.h | ||
io.h | ||
mcdi.c | ||
mcdi.h | ||
mcdi_mon.c | ||
mcdi_pcol.h | ||
mcdi_port.c | ||
mdio_10g.c | ||
mdio_10g.h | ||
mtd.c | ||
net_driver.h | ||
nic.c | ||
nic.h | ||
phy.h | ||
ptp.c | ||
qt202x_phy.c | ||
rx.c | ||
selftest.c | ||
selftest.h | ||
siena.c | ||
siena_sriov.c | ||
tenxpress.c | ||
tx.c | ||
txc43128_phy.c | ||
vfdi.h | ||
workarounds.h |