mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Verbs flow counters support
This series comes to allow user space applications to monitor real time traffic activity and events of the verbs objects it manages, e.g.: ibv_qp, ibv_wq, ibv_flow. This API enables generic counters creation and define mapping to association with a verbs object, current mlx5 driver using this API for flow counters. With this API, an application can monitor the entire life cycle of object activity, defined here as a static counters attachment. This API also allows dynamic counters monitoring of measurement points for a partial period in the verbs object life cycle. In addition it presents the implementation of the generic counters interface. This will be achieved by extending flow creation by adding a new flow count specification type which allows the user to associate a previously created flow counters using the generic verbs counters interface to the created flow, once associated the user could read statistics by using the read function of the generic counters interface. The API includes: 1. create and destroyed API of a new counters objects 2. read the counters values from HW Note: Attaching API to allow application to define the measurement points per objects is a user space only API and this data is passed to kernel when the counted object (e.g. flow) is created with the counters object. -----BEGIN PGP SIGNATURE----- iHQEABYIAB0WIQT1m3YD37UfMCUQBNwp8NhrnBAZsQUCWxIiqQAKCRAp8NhrnBAZ sWJRAPYl06nEfQjRlW//ZE/pO2oKXbfEevg7nnbpe80ERlxLAQDA2LHAcU7ma/NC hS5yxIq1gLSA27N+5qAoFVK8vJ5ZCg== =EiAV -----END PGP SIGNATURE----- Merge tag 'verbs_flow_counters' of git://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git into for-next Pull verbs counters series from Leon Romanovsky: ==================== Verbs flow counters support This series comes to allow user space applications to monitor real time traffic activity and events of the verbs objects it manages, e.g.: ibv_qp, ibv_wq, ibv_flow. The API enables generic counters creation and define mapping to association with a verbs object, the current mlx5 driver is using this API for flow counters. With this API, an application can monitor the entire life cycle of object activity, defined here as a static counters attachment. This API also allows dynamic counters monitoring of measurement points for a partial period in the verbs object life cycle. In addition it presents the implementation of the generic counters interface. This will be achieved by extending flow creation by adding a new flow count specification type which allows the user to associate a previously created flow counters using the generic verbs counters interface to the created flow, once associated the user could read statistics by using the read function of the generic counters interface. The API includes: 1. create and destroyed API of a new counters objects 2. read the counters values from HW Note: Attaching API to allow application to define the measurement points per objects is a user space only API and this data is passed to kernel when the counted object (e.g. flow) is created with the counters object. =================== * tag 'verbs_flow_counters': IB/mlx5: Add counters read support IB/mlx5: Add flow counters read support IB/mlx5: Add flow counters binding support IB/mlx5: Add counters create and destroy support IB/uverbs: Add support for flow counters IB/core: Add support for flow counters IB/core: Support passing uhw for create_flow IB/uverbs: Add read counters support IB/core: Introduce counters read verb IB/uverbs: Add create/destroy counters support IB/core: Introduce counters object and its create/destroy IB/uverbs: Add an ib_uobject getter to ioctl() infrastructure net/mlx5: Export flow counter related API net/mlx5: Use flow counter pointer as input to the query function
This commit is contained in:
commit
0f45e69d62
20 changed files with 712 additions and 56 deletions
|
|
@ -55,6 +55,7 @@ enum uverbs_default_objects {
|
|||
UVERBS_OBJECT_WQ,
|
||||
UVERBS_OBJECT_FLOW_ACTION,
|
||||
UVERBS_OBJECT_DM,
|
||||
UVERBS_OBJECT_COUNTERS,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -131,4 +132,24 @@ enum uverbs_methods_mr {
|
|||
UVERBS_METHOD_DM_MR_REG,
|
||||
};
|
||||
|
||||
enum uverbs_attrs_create_counters_cmd_attr_ids {
|
||||
UVERBS_ATTR_CREATE_COUNTERS_HANDLE,
|
||||
};
|
||||
|
||||
enum uverbs_attrs_destroy_counters_cmd_attr_ids {
|
||||
UVERBS_ATTR_DESTROY_COUNTERS_HANDLE,
|
||||
};
|
||||
|
||||
enum uverbs_attrs_read_counters_cmd_attr_ids {
|
||||
UVERBS_ATTR_READ_COUNTERS_HANDLE,
|
||||
UVERBS_ATTR_READ_COUNTERS_BUFF,
|
||||
UVERBS_ATTR_READ_COUNTERS_FLAGS,
|
||||
};
|
||||
|
||||
enum uverbs_methods_actions_counters_ops {
|
||||
UVERBS_METHOD_COUNTERS_CREATE,
|
||||
UVERBS_METHOD_COUNTERS_DESTROY,
|
||||
UVERBS_METHOD_COUNTERS_READ,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -998,6 +998,19 @@ struct ib_uverbs_flow_spec_action_handle {
|
|||
__u32 reserved1;
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_spec_action_count {
|
||||
union {
|
||||
struct ib_uverbs_flow_spec_hdr hdr;
|
||||
struct {
|
||||
__u32 type;
|
||||
__u16 size;
|
||||
__u16 reserved;
|
||||
};
|
||||
};
|
||||
__u32 handle;
|
||||
__u32 reserved1;
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_tunnel_filter {
|
||||
__be32 tunnel_id;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
#include <linux/if_ether.h> /* For ETH_ALEN. */
|
||||
#include <rdma/ib_user_ioctl_verbs.h>
|
||||
|
||||
enum {
|
||||
MLX5_QP_FLAG_SIGNATURE = 1 << 0,
|
||||
|
|
@ -443,4 +444,27 @@ enum {
|
|||
enum {
|
||||
MLX5_IB_CLOCK_INFO_V1 = 0,
|
||||
};
|
||||
|
||||
struct mlx5_ib_flow_counters_desc {
|
||||
__u32 description;
|
||||
__u32 index;
|
||||
};
|
||||
|
||||
struct mlx5_ib_flow_counters_data {
|
||||
RDMA_UAPI_PTR(struct mlx5_ib_flow_counters_desc *, counters_data);
|
||||
__u32 ncounters;
|
||||
__u32 reserved;
|
||||
};
|
||||
|
||||
struct mlx5_ib_create_flow {
|
||||
__u32 ncounters_data;
|
||||
__u32 reserved;
|
||||
/*
|
||||
* Following are counters data based on ncounters_data, each
|
||||
* entry in the data[] should match a corresponding counter object
|
||||
* that was pointed by a counters spec upon the flow creation
|
||||
*/
|
||||
struct mlx5_ib_flow_counters_data data[];
|
||||
};
|
||||
|
||||
#endif /* MLX5_ABI_USER_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue