| From 6e4ad03290537076d8adc9ad1f346c07ba493083 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 28 Apr 2022 14:11:42 -0700 |
| Subject: ice: fix possible under reporting of ethtool Tx and Rx statistics |
| |
| From: Paul Greenwalt <paul.greenwalt@intel.com> |
| |
| [ Upstream commit 31b6298fd8e29effe9ed6b77351ac5969be56ce0 ] |
| |
| The hardware statistics counters are not cleared during resets so the |
| drivers first access is to initialize the baseline and then subsequent |
| reads are for reporting the counters. The statistics counters are read |
| during the watchdog subtask when the interface is up. If the baseline |
| is not initialized before the interface is up, then there can be a brief |
| window in which some traffic can be transmitted/received before the |
| initial baseline reading takes place. |
| |
| Directly initialize ethtool statistics in driver open so the baseline will |
| be initialized when the interface is up, and any dropped packets |
| incremented before the interface is up won't be reported. |
| |
| Fixes: 28dc1b86f8ea9 ("ice: ignore dropped packets during init") |
| Signed-off-by: Paul Greenwalt <paul.greenwalt@intel.com> |
| Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel) |
| Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/intel/ice/ice_main.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c |
| index eb0625b52e45..aae79fdd5172 100644 |
| --- a/drivers/net/ethernet/intel/ice/ice_main.c |
| +++ b/drivers/net/ethernet/intel/ice/ice_main.c |
| @@ -5271,9 +5271,10 @@ static int ice_up_complete(struct ice_vsi *vsi) |
| netif_carrier_on(vsi->netdev); |
| } |
| |
| - /* clear this now, and the first stats read will be used as baseline */ |
| - vsi->stat_offsets_loaded = false; |
| - |
| + /* Perform an initial read of the statistics registers now to |
| + * set the baseline so counters are ready when interface is up |
| + */ |
| + ice_update_eth_stats(vsi); |
| ice_service_task_schedule(pf); |
| |
| return 0; |
| -- |
| 2.35.1 |
| |