diff options
author | Tariq Toukan | 2017-07-02 12:17:42 +0200 |
---|---|---|
committer | Saeed Mahameed | 2017-09-03 05:34:09 +0200 |
commit | a8c2eb15797a0f0bf17734d365da7bdc3e263155 (patch) | |
tree | 155add1ef705830009a464619d4965608f97d99d /drivers/net/ethernet/mellanox/mlx5/core/en_main.c | |
parent | net/mlx5e: Use kernel's mechanism to avoid missing NAPIs (diff) | |
download | kernel-qcow2-linux-a8c2eb15797a0f0bf17734d365da7bdc3e263155.tar.gz kernel-qcow2-linux-a8c2eb15797a0f0bf17734d365da7bdc3e263155.tar.xz kernel-qcow2-linux-a8c2eb15797a0f0bf17734d365da7bdc3e263155.zip |
net/mlx5e: Stop NAPI when irq balancer changes affinity
NAPI context keeps rescheduling on same CPU as long as it's busy.
This doesn't give the oppurtunity for changes in irq affinities
to take effect.
Fix that by calling napi_complete_done() upon a change in affinity.
This would stop the NAPI and reschedule it on the new CPU.
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/en_main.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index b2f689ec0d72..20f34131d4e5 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -1761,7 +1761,9 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, struct net_device *netdev = priv->netdev; int cpu = mlx5e_get_cpu(priv, ix); struct mlx5e_channel *c; + unsigned int irq; int err; + int eqn; c = kzalloc_node(sizeof(*c), GFP_KERNEL, cpu_to_node(cpu)); if (!c) @@ -1778,6 +1780,9 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, c->num_tc = params->num_tc; c->xdp = !!params->xdp_prog; + mlx5_vector2eqn(priv->mdev, ix, &eqn, &irq); + c->irq_desc = irq_to_desc(irq); + netif_napi_add(netdev, &c->napi, mlx5e_napi_poll, 64); err = mlx5e_open_cq(c, icocq_moder, &cparam->icosq_cq, &c->icosq.cq); |