net/sfc: implement EVQ dummy exception handling
authorAndrew Rybchenko <arybchenko@solarflare.com>
Tue, 29 Nov 2016 16:19:10 +0000 (16:19 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 17 Jan 2017 18:39:26 +0000 (19:39 +0100)
Right now the code just logs the exception and sets flag to notify
subsequent event handlers and poller that recovery is required.

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@solarflare.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
drivers/net/sfc/sfc_ev.c

index 2ee579a..42009c0 100644 (file)
@@ -85,8 +85,24 @@ sfc_ev_exception(void *arg, __rte_unused uint32_t code,
 {
        struct sfc_evq *evq = arg;
 
-       sfc_err(evq->sa, "EVQ %u unexpected exception event",
-               evq->evq_index);
+       if (code == EFX_EXCEPTION_UNKNOWN_SENSOREVT)
+               return B_FALSE;
+
+       evq->exception = B_TRUE;
+       sfc_warn(evq->sa,
+                "hardware exception %s (code=%u, data=%#x) on EVQ %u;"
+                " needs recovery",
+                (code == EFX_EXCEPTION_RX_RECOVERY) ? "RX_RECOVERY" :
+                (code == EFX_EXCEPTION_RX_DSC_ERROR) ? "RX_DSC_ERROR" :
+                (code == EFX_EXCEPTION_TX_DSC_ERROR) ? "TX_DSC_ERROR" :
+                (code == EFX_EXCEPTION_FWALERT_SRAM) ? "FWALERT_SRAM" :
+                (code == EFX_EXCEPTION_UNKNOWN_FWALERT) ? "UNKNOWN_FWALERT" :
+                (code == EFX_EXCEPTION_RX_ERROR) ? "RX_ERROR" :
+                (code == EFX_EXCEPTION_TX_ERROR) ? "TX_ERROR" :
+                (code == EFX_EXCEPTION_EV_ERROR) ? "EV_ERROR" :
+                "UNKNOWN",
+                code, data, evq->evq_index);
+
        return B_TRUE;
 }