aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mlx4
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/mlx4')
-rw-r--r--drivers/net/mlx4/en_netdev.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/net/mlx4/en_netdev.c b/drivers/net/mlx4/en_netdev.c
index 93f4abd990a9..c8a24dcca762 100644
--- a/drivers/net/mlx4/en_netdev.c
+++ b/drivers/net/mlx4/en_netdev.c
@@ -414,6 +414,7 @@ static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv)
414 unsigned long avg_pkt_size; 414 unsigned long avg_pkt_size;
415 unsigned long rx_packets; 415 unsigned long rx_packets;
416 unsigned long rx_bytes; 416 unsigned long rx_bytes;
417 unsigned long rx_byte_diff;
417 unsigned long tx_packets; 418 unsigned long tx_packets;
418 unsigned long tx_pkt_diff; 419 unsigned long tx_pkt_diff;
419 unsigned long rx_pkt_diff; 420 unsigned long rx_pkt_diff;
@@ -437,6 +438,8 @@ static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv)
437 rx_pkt_diff = ((unsigned long) (rx_packets - 438 rx_pkt_diff = ((unsigned long) (rx_packets -
438 priv->last_moder_packets)); 439 priv->last_moder_packets));
439 packets = max(tx_pkt_diff, rx_pkt_diff); 440 packets = max(tx_pkt_diff, rx_pkt_diff);
441 rx_byte_diff = rx_bytes - priv->last_moder_bytes;
442 rx_byte_diff = rx_byte_diff ? rx_byte_diff : 1;
440 rate = packets * HZ / period; 443 rate = packets * HZ / period;
441 avg_pkt_size = packets ? ((unsigned long) (rx_bytes - 444 avg_pkt_size = packets ? ((unsigned long) (rx_bytes -
442 priv->last_moder_bytes)) / packets : 0; 445 priv->last_moder_bytes)) / packets : 0;
@@ -447,10 +450,13 @@ static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv)
447 /* If tx and rx packet rates are not balanced, assume that 450 /* If tx and rx packet rates are not balanced, assume that
448 * traffic is mainly BW bound and apply maximum moderation. 451 * traffic is mainly BW bound and apply maximum moderation.
449 * Otherwise, moderate according to packet rate */ 452 * Otherwise, moderate according to packet rate */
450 if (2 * tx_pkt_diff > 3 * rx_pkt_diff || 453 if (2 * tx_pkt_diff > 3 * rx_pkt_diff &&
451 2 * rx_pkt_diff > 3 * tx_pkt_diff) { 454 rx_pkt_diff / rx_byte_diff <
455 MLX4_EN_SMALL_PKT_SIZE)
456 moder_time = priv->rx_usecs_low;
457 else if (2 * rx_pkt_diff > 3 * tx_pkt_diff)
452 moder_time = priv->rx_usecs_high; 458 moder_time = priv->rx_usecs_high;
453 } else { 459 else {
454 if (rate < priv->pkt_rate_low) 460 if (rate < priv->pkt_rate_low)
455 moder_time = priv->rx_usecs_low; 461 moder_time = priv->rx_usecs_low;
456 else if (rate > priv->pkt_rate_high) 462 else if (rate > priv->pkt_rate_high)