mlx4: support allocation of counters
PATCH 2/3 mlx4: support allocation of counters
CX devices support sets of counters that can be used to count packets and data octets in receive and transmit. This patch queries the device to check support for counters, either basic or extended, and initializes a bitmap allocator to control allocations.
Signed-off-by Eli Cohen <eli-VPRAkNaXOzVS1MOuV/[email protected]>
--- drivers/net/mlx4/fw.c | 14 +++++++- drivers/net/mlx4/main.c | 84 ++++++++++++++++++++++++++++++++++++++++++- drivers/net/mlx4/mlx4.h | 1 + include/linux/mlx4/device.h | 12 ++++++ 4 files changed, 109 insertions(+), 2 deletions(-)
drivers/net/mlx4/fw.c +13 -1
@@ -99,7 +99,9 @@ static void dump_dev_cap_flags(struct mlx4_dev *dev, u64 flags) [21] = "UD multicast support", [24] = "Demand paging support", [25] = "Router support", - [30] = "IBoE support" + [30] = "IBoE support", + [48] = "Basic counters support", + [49] = "Extended counters support", };int i;
@@ -214,6 +216,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)#define QUERY_DEV_CAP_BMME_FLAGS_OFFSET 0x94#define QUERY_DEV_CAP_RSVD_LKEY_OFFSET 0x98#define QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET 0xa0 +#define QUERY_DEV_CAP_MAX_BASIC_CNT_OFFSET 0x68 +#define QUERY_DEV_CAP_MAX_EXT_CNT_OFFSET 0x6c mailbox =mlx4_alloc_cmd_mailbox (dev);if (IS_ERR (mailbox))
@@ -355,6 +359,10 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) QUERY_DEV_CAP_RSVD_LKEY_OFFSET);MLX4_GET (dev_cap->max_icm_sz, outbox,QUERY_DEV_CAP_MAX_ICM_SZ_OFFSET ); +MLX4_GET (dev_cap->max_basic_counters, outbox, +QUERY_DEV_CAP_MAX_BASIC_CNT_OFFSET ); +MLX4_GET (dev_cap->max_ext_counters, outbox, +QUERY_DEV_CAP_MAX_EXT_CNT_OFFSET );if (dev->flags &MLX4_FLAG_OLD_PORT_CMDS ) {for (i =1 ; i <= dev_cap->num_ports; ++i) {
@@ -779,6 +787,10 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)if (enable_qos) *(inbox +INIT_HCA_FLAGS_OFFSET /4 ) |=cpu_to_be32 (1 <<2 ); +/* counters mode */ + *(inbox +INIT_HCA_FLAGS_OFFSET /4 ) |= +cpu_to_be32 (dev->caps.counters_mode <<4 ); +/* QPC/EEC/CQC/EQC/RDMARC attributes */ MLX4_PUT (inbox, param->qpc_base,INIT_HCA_QPC_BASE_OFFSET );
drivers/net/mlx4/main.c +83 -1
131 lines not on this page · raw message
drivers/net/mlx4/mlx4.h +1 -0
@@ -303,6 +303,7 @@ struct mlx4_priv {struct mlx4_srq_table srq_table;struct mlx4_qp_table qp_table;struct mlx4_mcg_table mcg_table; +struct mlx4_bitmap counters_bitmap;struct mlx4_catas_err catas_err;
include/linux/mlx4/device.h +12 -0
@@ -176,6 +176,12 @@ enum { MLX4_MAX_FAST_REG_PAGES = 511, }; +enum { +MLX4_COUNTERS_DISABLED , +MLX4_COUNTERS_BASIC , +MLX4_COUNTERS_EXT +}; +static inline u64 mlx4_fw_ver (u64 major,u64 minor,u64 subminor) {return (major <<32 ) | (minor <<16 ) | subminor;
@@ -252,6 +258,9 @@ struct mlx4_caps {u8 supported_type[MLX4_MAX_PORTS +1 ];u32 port_mask;enum mlx4_port_type possible_type[MLX4_MAX_PORTS +1 ]; +u8 counters_mode; +u32 max_basic_counters; +u32 max_ext_counters; };struct mlx4_buf_list {
@@ -521,4 +530,7 @@ int mlx4_fmr_free(struct mlx4_dev *dev, struct mlx4_fmr *fmr);int mlx4_SYNC_TPT (struct mlx4_dev *dev);int mlx4_test_interrupts (struct mlx4_dev *dev); +int mlx4_counter_alloc (struct mlx4_dev *dev,u32 *idx); +void mlx4_counter_free (struct mlx4_dev *dev,u32 idx); +#endif /* MLX4_DEVICE_H */
Signature · 6 lines
1.6.0.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html