diff options
author | Tariq Toukan <tariqt@mellanox.com> | 2017-05-18 06:34:43 -0400 |
---|---|---|
committer | Saeed Mahameed <saeedm@mellanox.com> | 2017-05-23 09:23:32 -0400 |
commit | b665d98edc9ab295169be2fc5bb4e89a46de0a1a (patch) | |
tree | 6ae433a8ce37a29fc4de3a5b7c12d42d2b9789ed | |
parent | 73dd3a4839c1d27c36d4dcc92e1ff44225ecbeb7 (diff) |
net/mlx5: Tolerate irq_set_affinity_hint() failures
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>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/main.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 0c123d571b4c..fe5546bb4153 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c | |||
@@ -612,7 +612,6 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i) | |||
612 | struct mlx5_priv *priv = &mdev->priv; | 612 | struct mlx5_priv *priv = &mdev->priv; |
613 | struct msix_entry *msix = priv->msix_arr; | 613 | struct msix_entry *msix = priv->msix_arr; |
614 | int irq = msix[i + MLX5_EQ_VEC_COMP_BASE].vector; | 614 | int irq = msix[i + MLX5_EQ_VEC_COMP_BASE].vector; |
615 | int err; | ||
616 | 615 | ||
617 | if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) { | 616 | if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) { |
618 | mlx5_core_warn(mdev, "zalloc_cpumask_var failed"); | 617 | mlx5_core_warn(mdev, "zalloc_cpumask_var failed"); |
@@ -622,18 +621,12 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i) | |||
622 | cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node), | 621 | cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node), |
623 | priv->irq_info[i].mask); | 622 | priv->irq_info[i].mask); |
624 | 623 | ||
625 | err = irq_set_affinity_hint(irq, priv->irq_info[i].mask); | 624 | #ifdef CONFIG_SMP |
626 | if (err) { | 625 | if (irq_set_affinity_hint(irq, priv->irq_info[i].mask)) |
627 | mlx5_core_warn(mdev, "irq_set_affinity_hint failed,irq 0x%.4x", | 626 | mlx5_core_warn(mdev, "irq_set_affinity_hint failed, irq 0x%.4x", irq); |
628 | irq); | 627 | #endif |
629 | goto err_clear_mask; | ||
630 | } | ||
631 | 628 | ||
632 | return 0; | 629 | return 0; |
633 | |||
634 | err_clear_mask: | ||
635 | free_cpumask_var(priv->irq_info[i].mask); | ||
636 | return err; | ||
637 | } | 630 | } |
638 | 631 | ||
639 | static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i) | 632 | static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i) |