Message ID | 20180119201031.20401-1-saeedm@mellanox.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net] net/mlx5e: Fix fixpoint divide exception in mlx5e_am_stats_compare | expand |
Hello! On 1/19/2018 11:10 PM, Saeed Mahameed wrote: > From: Talat Batheesh <talatb@mellanox.com> > > Helmut reported a bug about devision by zero while Division. > running traffic and doing physical cable pull test. > > When the cable unplugged the ppms become zero, so when > dividing the current ppms by the previous ppms in the You got it right the on the 2nd time. :-) > next dim iteration there is devision by zero. > > This patch prevent this division for both ppms and epms. > > Fixes: c3164d2fc48f ("net/mlx5e: Added BW check for DIM decision mechanism") > Reported-by: Helmut Grauer <helmut.grauer@de.ibm.com> > Signed-off-by: Talat Batheesh <talatb@mellanox.com> > Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> [...] MBR, Sergei
On 01/20/2018 12:10 AM, Sergei Shtylyov wrote: > Hello! > > On 1/19/2018 11:10 PM, Saeed Mahameed wrote: > >> From: Talat Batheesh <talatb@mellanox.com> >> >> Helmut reported a bug about devision by zero while > > Division. > >> running traffic and doing physical cable pull test. >> >> When the cable unplugged the ppms become zero, so when >> dividing the current ppms by the previous ppms in the > > You got it right the on the 2nd time. :-) > BTW, you missed one ;-) Fixed both in V2. Thanks !
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c index e401d9d245f3..b69a705fd787 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c @@ -201,9 +201,15 @@ static int mlx5e_am_stats_compare(struct mlx5e_rx_am_stats *curr, return (curr->bpms > prev->bpms) ? MLX5E_AM_STATS_BETTER : MLX5E_AM_STATS_WORSE; + if (!prev->ppms) + return curr->ppms ? MLX5E_AM_STATS_BETTER : + MLX5E_AM_STATS_SAME; + if (IS_SIGNIFICANT_DIFF(curr->ppms, prev->ppms)) return (curr->ppms > prev->ppms) ? MLX5E_AM_STATS_BETTER : MLX5E_AM_STATS_WORSE; + if (!prev->epms) + return MLX5E_AM_STATS_SAME; if (IS_SIGNIFICANT_DIFF(curr->epms, prev->epms)) return (curr->epms < prev->epms) ? MLX5E_AM_STATS_BETTER :