From 988a0f581df9ad9d9c58142487e99eabab63fdcf Mon Sep 17 00:00:00 2001 From: Yishai Hadas Date: Mon, 24 Dec 2012 13:22:54 +0200 Subject: [PATCH] mlx4_core: set device to use extended counters Signed-off-by: Yishai Hadas Reviewed-on: http://r-webdev02.lab.mtl.com:8080/479 Tested-by: Redmine Issue Reviewed-by: Yevgeny Petrilin Mini-Regression: Yevgeny Petrilin Reviewed-by: Vladimir Sokolovsky (Ported from Mellanox OFED 2.4) Signed-off-by: Mukesh Kacker --- drivers/net/ethernet/mellanox/mlx4/main.c | 24 ++++++++++++++++++++++- include/linux/mlx4/device.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index fcb26f2b246a..1951b2c4ec0f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c @@ -203,6 +203,10 @@ MODULE_PARM_DESC(log_num_mtt, "log maximum number of memory translation table segments per " "HCA (default: max(20, 2*MTTs for register all of the host memory limited to 30))"); +enum { + MLX4_IF_STATE_BASIC, + MLX4_IF_STATE_EXTENDED +}; static void process_mod_param_profile(struct mlx4_profile *profile) { struct sysinfo si; @@ -2272,12 +2276,30 @@ static int mlx4_init_counters_table(struct mlx4_dev *dev) { struct mlx4_priv *priv = mlx4_priv(dev); int nent; + int res; if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS)) return -ENOENT; nent = dev->caps.max_counters; - return mlx4_bitmap_init(&priv->counters_bitmap, nent, nent - 1, 0, 0); + res = mlx4_bitmap_init(&priv->counters_bitmap, nent, nent - 1, 0, 0); + if (res) + return res; + + if (mlx4_is_slave(dev)) + return 0; + + if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS_EXT)) + return 0; + + res = mlx4_cmd(dev, MLX4_IF_STATE_EXTENDED, 0, 0, + MLX4_CMD_SET_IF_STAT, MLX4_CMD_TIME_CLASS_A, MLX4_CMD_NATIVE); + + if (res) + mlx4_err(dev, "Failed to set extended counters (err=%d)\n", + res); + return res; + } static void mlx4_cleanup_counters_table(struct mlx4_dev *dev) diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 1ed388f598c5..ce7efff302f9 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h @@ -172,6 +172,7 @@ enum { MLX4_DEV_CAP_FLAG_VEP_UC_STEER = 1LL << 41, MLX4_DEV_CAP_FLAG_VEP_MC_STEER = 1LL << 42, MLX4_DEV_CAP_FLAG_COUNTERS = 1LL << 48, + MLX4_DEV_CAP_FLAG_COUNTERS_EXT = 1LL << 49, MLX4_DEV_CAP_FLAG_RSS_IP_FRAG = 1LL << 52, MLX4_DEV_CAP_FLAG_SET_ETH_SCHED = 1LL << 53, MLX4_DEV_CAP_FLAG_SENSE_SUPPORT = 1LL << 55, -- 2.50.1