Message ID | 1516223596-11684-1-git-send-email-talgi@mellanox.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net/dim: Fix fixpoint divide exception in net_dim_stats_compare | expand |
From: Tal Gilboa <talgi@mellanox.com> Date: Wed, 17 Jan 2018 23:13:16 +0200 > From: Talat Batheesh <talatb@mellanox.com> > > Helmut reported a bug about devision 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 devision by zero. > > This patch prevent this division for both ppms and epms. > > Fixes: c3164d2fc48f ("net/mlx5e: Added BW check for DIM decision mechanism") > Fixes: 4c4dbb4a7363 ("net/mlx5e: Move dynamic interrupt coalescing code to include/linux") > Reported-by: Helmut Grauer <helmut.grauer@de.ibm.com> > Signed-off-by: Talat Batheesh <talatb@mellanox.com> > Signed-off-by: Tal Gilboa <talgi@mellanox.com> Applied, thanks.
diff --git a/include/linux/net_dim.h b/include/linux/net_dim.h index 1c7e450..bebeaad 100644 --- a/include/linux/net_dim.h +++ b/include/linux/net_dim.h @@ -244,10 +244,17 @@ static inline int net_dim_stats_compare(struct net_dim_stats *curr, return (curr->bpms > prev->bpms) ? NET_DIM_STATS_BETTER : NET_DIM_STATS_WORSE; + if (!prev->ppms) + return curr->ppms ? NET_DIM_STATS_BETTER : + NET_DIM_STATS_SAME; + if (IS_SIGNIFICANT_DIFF(curr->ppms, prev->ppms)) return (curr->ppms > prev->ppms) ? NET_DIM_STATS_BETTER : NET_DIM_STATS_WORSE; + if (!prev->epms) + return NET_DIM_STATS_SAME; + if (IS_SIGNIFICANT_DIFF(curr->epms, prev->epms)) return (curr->epms < prev->epms) ? NET_DIM_STATS_BETTER : NET_DIM_STATS_WORSE;