On Mon, Apr 29, 2019 at 11:34:47AM +0300, Leon Romanovsky wrote: > From: Mark Zhang <markz@xxxxxxxxxxxx> > > This patch adds the ability to return all available counters > together with their properties and hwstats. > > Signed-off-by: Mark Zhang <markz@xxxxxxxxxxxx> > Reviewed-by: Majd Dibbiny <majd@xxxxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > drivers/infiniband/core/counters.c | 28 +++++ > drivers/infiniband/core/device.c | 2 + > drivers/infiniband/core/nldev.c | 173 +++++++++++++++++++++++++++++ > include/rdma/ib_verbs.h | 10 ++ > include/rdma/rdma_counter.h | 3 + > include/uapi/rdma/rdma_netlink.h | 10 +- > 6 files changed, 225 insertions(+), 1 deletion(-) > > diff --git a/drivers/infiniband/core/counters.c b/drivers/infiniband/core/counters.c > index 665e0d43c21b..36cd9eca1e46 100644 > +++ b/drivers/infiniband/core/counters.c > @@ -62,6 +62,9 @@ static struct rdma_counter *rdma_counter_alloc(struct ib_device *dev, u8 port, > { > struct rdma_counter *counter; > > + if (!dev->ops.counter_alloc_stats) > + return NULL; > + > counter = kzalloc(sizeof(*counter), GFP_KERNEL); > if (!counter) > return NULL; > @@ -69,16 +72,25 @@ static struct rdma_counter *rdma_counter_alloc(struct ib_device *dev, u8 port, > counter->device = dev; > counter->port = port; > counter->res.type = RDMA_RESTRACK_COUNTER; > + counter->stats = dev->ops.counter_alloc_stats(counter); > + if (!counter->stats) > + goto err_stats; > + > counter->mode.mode = mode; > atomic_set(&counter->usecnt, 0); > mutex_init(&counter->lock); > > return counter; > + > +err_stats: > + kfree(counter); > + return NULL; > } > > static void rdma_counter_dealloc(struct rdma_counter *counter) > { > rdma_restrack_del(&counter->res); > + kfree(counter->stats); > kfree(counter); > } > > @@ -279,6 +291,22 @@ int rdma_counter_unbind_qp(struct ib_qp *qp, bool force) > return 0; > } > > +int rdma_counter_query_stats(struct rdma_counter *counter) > +{ > + int ret; > + > + struct ib_device *dev = counter->device; > + Extra blank line Something about festive trees Jason