IB/mlx5: Add counters create and destroy support
authorRaed Salem <raeds@mellanox.com>
Thu, 31 May 2018 13:43:38 +0000 (16:43 +0300)
committerLeon Romanovsky <leonro@mellanox.com>
Sat, 2 Jun 2018 04:33:57 +0000 (07:33 +0300)
This patch implements the device counters create and destroy APIs and
introducing some internal management structures.

Downstream patches in this series will add the functionality to support
flow counters binding and reading.

Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Raed Salem <raeds@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/main.c
drivers/infiniband/hw/mlx5/mlx5_ib.h

index e94df85..8147101 100644 (file)
@@ -5006,6 +5006,27 @@ static void depopulate_specs_root(struct mlx5_ib_dev *dev)
        uverbs_free_spec_tree(dev->ib_dev.specs_root);
 }
 
+static int mlx5_ib_destroy_counters(struct ib_counters *counters)
+{
+       struct mlx5_ib_mcounters *mcounters = to_mcounters(counters);
+
+       kfree(mcounters);
+
+       return 0;
+}
+
+static struct ib_counters *mlx5_ib_create_counters(struct ib_device *device,
+                                                  struct uverbs_attr_bundle *attrs)
+{
+       struct mlx5_ib_mcounters *mcounters;
+
+       mcounters = kzalloc(sizeof(*mcounters), GFP_KERNEL);
+       if (!mcounters)
+               return ERR_PTR(-ENOMEM);
+
+       return &mcounters->ibcntrs;
+}
+
 void mlx5_ib_stage_init_cleanup(struct mlx5_ib_dev *dev)
 {
        mlx5_ib_cleanup_multiport_master(dev);
@@ -5249,6 +5270,8 @@ int mlx5_ib_stage_caps_init(struct mlx5_ib_dev *dev)
        dev->ib_dev.destroy_flow_action = mlx5_ib_destroy_flow_action;
        dev->ib_dev.modify_flow_action_esp = mlx5_ib_modify_flow_action_esp;
        dev->ib_dev.driver_id = RDMA_DRIVER_MLX5;
+       dev->ib_dev.create_counters = mlx5_ib_create_counters;
+       dev->ib_dev.destroy_counters = mlx5_ib_destroy_counters;
 
        err = init_node_data(dev);
        if (err)
index 49a1aa0..fd27ec1 100644 (file)
@@ -813,6 +813,16 @@ struct mlx5_memic {
        DECLARE_BITMAP(memic_alloc_pages, MLX5_MAX_MEMIC_PAGES);
 };
 
+struct mlx5_ib_mcounters {
+       struct ib_counters ibcntrs;
+};
+
+static inline struct mlx5_ib_mcounters *
+to_mcounters(struct ib_counters *ibcntrs)
+{
+       return container_of(ibcntrs, struct mlx5_ib_mcounters, ibcntrs);
+}
+
 struct mlx5_ib_dev {
        struct ib_device                ib_dev;
        struct mlx5_core_dev            *mdev;