From mboxrd@z Thu Jan 1 00:00:00 1970 From: Leon Romanovsky Subject: [PATCH rdma-next v3 06/14] IB/core: Introduce counters read verb Date: Thu, 31 May 2018 16:43:33 +0300 Message-ID: <20180531134341.18441-7-leon@kernel.org> References: <20180531134341.18441-1-leon@kernel.org> Cc: Leon Romanovsky , RDMA mailing list , Boris Pismenny , Matan Barak , "Michael J . Ruhl" , Or Gerlitz , Raed Salem , Yishai Hadas , Saeed Mahameed , linux-netdev To: Doug Ledford , Jason Gunthorpe Return-path: Received: from mail.kernel.org ([198.145.29.99]:33372 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755340AbeEaNoD (ORCPT ); Thu, 31 May 2018 09:44:03 -0400 In-Reply-To: <20180531134341.18441-1-leon@kernel.org> Sender: netdev-owner@vger.kernel.org List-ID: From: Raed Salem The user supplies counters instance and a reference to an output array of uint64_t. The driver reads the hardware counters values and writes them to the output index location in the user supplied array. All counters values are represented as uint64_t types. To be able to successfully read the data the counters must be first bound to an IB object. Downstream patches will present binding method for flow counters. Reviewed-by: Yishai Hadas Signed-off-by: Raed Salem Signed-off-by: Leon Romanovsky --- include/rdma/ib_verbs.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 90c548437c8a..ba49e874c841 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -2219,6 +2219,17 @@ struct ib_counters { atomic_t usecnt; }; +enum ib_read_counters_flags { + /* prefer read values from driver cache */ + IB_READ_COUNTERS_ATTR_PREFER_CACHED = 1 << 0, +}; + +struct ib_counters_read_attr { + u64 *counters_buff; + u32 ncounters; + u32 flags; /* use enum ib_read_counters_flags */ +}; + struct uverbs_attr_bundle; struct ib_device { @@ -2493,6 +2504,9 @@ struct ib_device { struct ib_counters * (*create_counters)(struct ib_device *device, struct uverbs_attr_bundle *attrs); int (*destroy_counters)(struct ib_counters *counters); + int (*read_counters)(struct ib_counters *counters, + struct ib_counters_read_attr *counters_read_attr, + struct uverbs_attr_bundle *attrs); /** * rdma netdev operation -- 2.14.3