]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
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 e94df85ddf08552e6447fa0f60a2e0b69b5d6edc..81471013b77609616aad855b152dca041fccf700 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 49a1aa0ff429c7617ba3d496ac20eaef7c102894..fd27ec1aed084854de0274f35a27e03d4b4b7877 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;