diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2012-10-01 20:58:35 +0100 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2013-04-12 21:10:15 -0400 |
commit | 441ec00b36098f1e8b7ba34846dc74b8199399e4 (patch) | |
tree | 0c46345d0135c28d930031a88060b35456ab6c66 | |
parent | 4ec2d04149211ad03a0dbbf99091d265dc78f187 (diff) |
sfc: Reset driver's MAC stats after MC reboot seen
[ Upstream commit 876be083b669c43203c0ee8709d749896e1d8d60 ]
If the MC reboots then the stats it reports to us will have been
reset. We need to reset ours to get efx_update_diff_stat() working
properly.
(Ideally we would maintain stats across the reboot, but as this should
only happen immediately after a firmware upgrade it's not really worth
the trouble.)
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-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 8407d4171a40..29e5842db770 100644 --- a/drivers/net/ethernet/sfc/mcdi.c +++ b/drivers/net/ethernet/sfc/mcdi.c @@ -207,7 +207,9 @@ out: return 0; } -/* Test and clear MC-rebooted flag for this port/function */ +/* Test and clear MC-rebooted flag for this port/function; reset + * software state as necessary. + */ int efx_mcdi_poll_reboot(struct efx_nic *efx) { unsigned int addr = FR_CZ_MC_TREG_SMEM + MCDI_STATUS(efx); @@ -223,6 +225,11 @@ int efx_mcdi_poll_reboot(struct efx_nic *efx) if (value == 0) return 0; + /* MAC statistics have been cleared on the NIC; clear our copy + * so that efx_update_diff_stat() can continue to work. + */ + memset(&efx->mac_stats, 0, sizeof(efx->mac_stats)); + EFX_ZERO_DWORD(reg); efx_writed(efx, ®, addr); |