• Steve Hodgson's avatar
    sfc: Workaround flush failures on Falcon B0 · fd371e32
    Steve Hodgson authored
    Under certain conditions a PHY may backpressure Falcon B0
    in such a way that flushes timeout. In normal circumstances
    the phy poller would fix the PHY, and the flush could complete.
    
    But efx_nic_flush_queues() is always called after efx_stop_all(),
    so the poller has been stopped. Even if this weren't the case,
    how long would we have to wait for the poller to fix this? And
    several callers of efx_nic_flush_queues() are about to reset
    the device anyway - so we don't need to do anything.
    
    Work around this bug by scheduling a reset. Ensure that the
    MAC is never rewired back into the datapath before the reset
    runs (we already ignore all rx events anyway).
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fd371e32
falcon.c 49.6 KB