| From 7701389304957cf25e1fcb2adf10bc6eb49de690 Mon Sep 17 00:00:00 2001 |
| From: Talat Batheesh <talatb@mellanox.com> |
| Date: Sun, 21 Jan 2018 05:30:42 +0200 |
| Subject: net/mlx5e: Fix fixpoint divide exception in mlx5e_am_stats_compare |
| |
| [ Upstream commit e58edaa4863583b54409444f11b4f80dff0af1cd ] |
| |
| Helmut reported a bug about division by zero while |
| 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 |
| next dim iteration there is division 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> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| 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 23ccec4cb7f5..a1f3556307c7 100644 |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c |
| @@ -197,9 +197,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 : |
| -- |
| 2.17.1 |
| |