diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/sfc/mcdi.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c index e1967fbad161..3ef71a0f99a8 100644 --- a/drivers/net/ethernet/sfc/mcdi.c +++ b/drivers/net/ethernet/sfc/mcdi.c | |||
@@ -207,7 +207,9 @@ out: | |||
207 | return 0; | 207 | return 0; |
208 | } | 208 | } |
209 | 209 | ||
210 | /* Test and clear MC-rebooted flag for this port/function */ | 210 | /* Test and clear MC-rebooted flag for this port/function; reset |
211 | * software state as necessary. | ||
212 | */ | ||
211 | int efx_mcdi_poll_reboot(struct efx_nic *efx) | 213 | int efx_mcdi_poll_reboot(struct efx_nic *efx) |
212 | { | 214 | { |
213 | unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_STATUS(efx); | 215 | unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_STATUS(efx); |
@@ -223,6 +225,11 @@ int efx_mcdi_poll_reboot(struct efx_nic *efx) | |||
223 | if (value == 0) | 225 | if (value == 0) |
224 | return 0; | 226 | return 0; |
225 | 227 | ||
228 | /* MAC statistics have been cleared on the NIC; clear our copy | ||
229 | * so that efx_update_diff_stat() can continue to work. | ||
230 | */ | ||
231 | memset(&efx->mac_stats, 0, sizeof(efx->mac_stats)); | ||
232 | |||
226 | EFX_ZERO_DWORD(reg); | 233 | EFX_ZERO_DWORD(reg); |
227 | efx_writed(efx, ®, addr); | 234 | efx_writed(efx, ®, addr); |
228 | 235 | ||