@@ -51,6 +51,7 @@
#include <linux/list.h>
#include <rdma/ib_smi.h>
#include <rdma/ib_umem.h>
+#include <rdma/uverbs_ioctl_cmd.h>
#include <linux/in.h>
#include <linux/etherdevice.h>
#include <linux/mlx5/fs.h>
@@ -2919,8 +2920,6 @@ free:
return ARRAY_SIZE(names);
}
-DECLARE_UVERBS_TYPES_GROUP(root, &uverbs_common_types);
-
static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
{
struct mlx5_ib_dev *dev;
@@ -2929,6 +2928,10 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
const char *name;
int err;
int i;
+ static const struct uverbs_root_spec root_spec[] = {
+ [0] = {.types = &uverbs_common_types,
+ .group_id = 0},
+ };
port_type_cap = MLX5_CAP_GEN(mdev, port_type);
ll = mlx5_port_type_cap_to_rdma_ll(port_type_cap);
@@ -3131,10 +3134,15 @@ static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
if (err)
goto err_odp;
- dev->ib_dev.specs_root = (struct uverbs_root *)&root;
+ dev->ib_dev.specs_root =
+ uverbs_alloc_spec_tree(ARRAY_SIZE(root_spec),
+ root_spec);
+ if (IS_ERR(dev->ib_dev.specs_root))
+ goto err_q_cnt;
+
err = ib_register_device(&dev->ib_dev, NULL);
if (err)
- goto err_q_cnt;
+ goto err_alloc_spec_tree;
err = create_umr_res(dev);
if (err)
@@ -3157,6 +3165,9 @@ err_umrc:
err_dev:
ib_unregister_device(&dev->ib_dev);
+err_alloc_spec_tree:
+ uverbs_specs_free(dev->ib_dev.specs_root);
+
err_q_cnt:
mlx5_ib_dealloc_q_counters(dev);
@@ -3188,6 +3199,7 @@ static void mlx5_ib_remove(struct mlx5_core_dev *mdev, void *context)
mlx5_remove_roce_notifier(dev);
ib_unregister_device(&dev->ib_dev);
+ uverbs_specs_free(dev->ib_dev.specs_root);
mlx5_ib_dealloc_q_counters(dev);
destroy_umrc_res(dev);
mlx5_ib_odp_remove_one(dev);
This patch simply tells mlx5 to use the uverb objects declared by the common layer. Signed-off-by: Matan Barak <matanb@mellanox.com> --- drivers/infiniband/hw/mlx5/main.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)