sfc: call mcdi_reboot_detected() when MC reboots during an MCDI command
authorJon Cooper <jcooper@solarflare.com>
Wed, 8 Feb 2017 16:51:33 +0000 (16:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Feb 2017 21:47:53 +0000 (16:47 -0500)
This function wasn't being called in this particular case when the MC
 reboots. This caused resource reallocations to not be handled properly
 and often ended up disabling the interface.

Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/mcdi.c

index 24b271b9c2601c018caa010f1d13c6d0fb075fb3..fae647dde0ee6cb158906da2147e61843021611d 100644 (file)
@@ -716,8 +716,11 @@ static int _efx_mcdi_rpc_finish(struct efx_nic *efx, unsigned int cmd,
                if (cmd == MC_CMD_REBOOT && rc == -EIO) {
                        /* Don't reset if MC_CMD_REBOOT returns EIO */
                } else if (rc == -EIO || rc == -EINTR) {
-                       netif_err(efx, hw, efx->net_dev, "MC fatal error %d\n",
-                                 -rc);
+                       netif_err(efx, hw, efx->net_dev, "MC reboot detected\n");
+                       netif_dbg(efx, hw, efx->net_dev, "MC rebooted during command %d rc %d\n",
+                                 cmd, -rc);
+                       if (efx->type->mcdi_reboot_detected)
+                               efx->type->mcdi_reboot_detected(efx);
                        efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE);
                } else if (proxy_handle && (rc == -EPROTO) &&
                           efx_mcdi_get_proxy_handle(efx, hdr_len, data_len,