sfc: Recover from RX queue flush failure
authorSteve Hodgson <shodgson@solarflare.com>
Mon, 9 Jun 2008 18:34:32 +0000 (19:34 +0100)
committerJeff Garzik <jgarzik@redhat.com>
Tue, 10 Jun 2008 22:20:21 +0000 (18:20 -0400)
RX queue flush can fail if traffic continues to arrive.  Recover by
performing an invisible reset.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/net/sfc/falcon.c

index d3f749c72d41d76f5291407b946fefd93217241e..790db89db3454cd8da3ef1feb873b27b781abd1b 100644 (file)
@@ -733,8 +733,10 @@ void falcon_fini_rx(struct efx_rx_queue *rx_queue)
                        continue;
                break;
        }
-       if (rc)
+       if (rc) {
                EFX_ERR(efx, "failed to flush rx queue %d\n", rx_queue->queue);
+               efx_schedule_reset(efx, RESET_TYPE_INVISIBLE);
+       }
 
        /* Remove RX descriptor ring from card */
        EFX_ZERO_OWORD(rx_desc_ptr);