"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;
{
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)
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,