| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Tariq Toukan <tariqt@mellanox.com> |
| Date: Thu, 18 May 2017 13:34:43 +0300 |
| Subject: net/mlx5: Tolerate irq_set_affinity_hint() failures |
| |
| From: Tariq Toukan <tariqt@mellanox.com> |
| |
| |
| [ Upstream commit b665d98edc9ab295169be2fc5bb4e89a46de0a1a ] |
| |
| Add tolerance to failures of irq_set_affinity_hint(). |
| Its role is to give hints that optimizes performance, |
| and should not block the driver load. |
| |
| In non-SMP systems, functionality is not available as |
| there is a single core, and all these calls definitely |
| fail. Hence, do not call the function and avoid the |
| warning prints. |
| |
| Fixes: db058a186f98 ("net/mlx5_core: Set irq affinity hints") |
| Signed-off-by: Tariq Toukan <tariqt@mellanox.com> |
| Cc: kernel-team@fb.com |
| Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/mellanox/mlx5/core/main.c | 15 ++++----------- |
| 1 file changed, 4 insertions(+), 11 deletions(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c |
| +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c |
| @@ -548,7 +548,6 @@ static int mlx5_irq_set_affinity_hint(st |
| struct mlx5_priv *priv = &mdev->priv; |
| struct msix_entry *msix = priv->msix_arr; |
| int irq = msix[i + MLX5_EQ_VEC_COMP_BASE].vector; |
| - int err; |
| |
| if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) { |
| mlx5_core_warn(mdev, "zalloc_cpumask_var failed"); |
| @@ -558,18 +557,12 @@ static int mlx5_irq_set_affinity_hint(st |
| cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node), |
| priv->irq_info[i].mask); |
| |
| - err = irq_set_affinity_hint(irq, priv->irq_info[i].mask); |
| - if (err) { |
| - mlx5_core_warn(mdev, "irq_set_affinity_hint failed,irq 0x%.4x", |
| - irq); |
| - goto err_clear_mask; |
| - } |
| +#ifdef CONFIG_SMP |
| + if (irq_set_affinity_hint(irq, priv->irq_info[i].mask)) |
| + mlx5_core_warn(mdev, "irq_set_affinity_hint failed, irq 0x%.4x", irq); |
| +#endif |
| |
| return 0; |
| - |
| -err_clear_mask: |
| - free_cpumask_var(priv->irq_info[i].mask); |
| - return err; |
| } |
| |
| static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i) |