aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKamal Heib <kamalh@mellanox.com>2017-01-18 07:10:32 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-03-18 07:14:35 -0400
commitc8186699527b5b0ee080e510afac9a3db797aa1b (patch)
tree261df9d0797806d4bd90337113093200be8908e1
parent8fed8fc18839d7aec7ea046d79eb814dce6255c3 (diff)
IB/mlx5: Verify that Q counters are supported
commit 45bded2c216da6010184ac5ebe88c27f73439009 upstream. Make sure that the Q counters are supported by the FW before trying to allocate/deallocte them, this will avoid driver load failure when they aren't supported by the FW. Fixes: 0837e86a7a34 ('IB/mlx5: Add per port counters') Signed-off-by: Kamal Heib <kamalh@mellanox.com> Reviewed-by: Mark Bloch <markb@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/infiniband/hw/mlx5/main.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 4cab29ea394c..11bfa27b022c 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -3141,9 +3141,11 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
3141 if (err) 3141 if (err)
3142 goto err_rsrc; 3142 goto err_rsrc;
3143 3143
3144 err = mlx5_ib_alloc_q_counters(dev); 3144 if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt)) {
3145 if (err) 3145 err = mlx5_ib_alloc_q_counters(dev);
3146 goto err_odp; 3146 if (err)
3147 goto err_odp;
3148 }
3147 3149
3148 err = ib_register_device(&dev->ib_dev, NULL); 3150 err = ib_register_device(&dev->ib_dev, NULL);
3149 if (err) 3151 if (err)
@@ -3171,7 +3173,8 @@ err_dev:
3171 ib_unregister_device(&dev->ib_dev); 3173 ib_unregister_device(&dev->ib_dev);
3172 3174
3173err_q_cnt: 3175err_q_cnt:
3174 mlx5_ib_dealloc_q_counters(dev); 3176 if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt))
3177 mlx5_ib_dealloc_q_counters(dev);
3175 3178
3176err_odp: 3179err_odp:
3177 mlx5_ib_odp_remove_one(dev); 3180 mlx5_ib_odp_remove_one(dev);
@@ -3201,7 +3204,8 @@ static void mlx5_ib_remove(struct mlx5_core_dev *mdev, void *context)
3201 3204
3202 mlx5_remove_roce_notifier(dev); 3205 mlx5_remove_roce_notifier(dev);
3203 ib_unregister_device(&dev->ib_dev); 3206 ib_unregister_device(&dev->ib_dev);
3204 mlx5_ib_dealloc_q_counters(dev); 3207 if (MLX5_CAP_GEN(dev->mdev, max_qp_cnt))
3208 mlx5_ib_dealloc_q_counters(dev);
3205 destroy_umrc_res(dev); 3209 destroy_umrc_res(dev);
3206 mlx5_ib_odp_remove_one(dev); 3210 mlx5_ib_odp_remove_one(dev);
3207 destroy_dev_resources(&dev->devr); 3211 destroy_dev_resources(&dev->devr);