mlx4: do not fire tasklet unless necessary
authorEric Dumazet <edumazet@google.com>
Fri, 10 Feb 2017 12:27:58 +0000 (04:27 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Feb 2017 15:55:22 +0000 (10:55 -0500)
commit01f0f4253469e1b1e80bc84ae64728c294534836
tree04d19fb652370947799509fce5e87668e5835c98
parent99d5ceeea5120dd3ac2f879f4083697b70a1c89f
mlx4: do not fire tasklet unless necessary

All rx and rx netdev interrupts are handled by respectively
by mlx4_en_rx_irq() and mlx4_en_tx_irq() which simply schedule a NAPI.

But mlx4_eq_int() also fires a tasklet to service all items that were
queued via mlx4_add_cq_to_tasklet(), but this handler was not called
unless user cqe was handled.

This is very confusing, as "mpstat -I SCPU ..." show huge number of
tasklet invocations.

This patch saves this overhead, by carefully firing the tasklet directly
from mlx4_add_cq_to_tasklet(), removing four atomic operations per IRQ.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Tariq Toukan <tariqt@mellanox.com>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Acked-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/cq.c
drivers/net/ethernet/mellanox/mlx4/eq.c