]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mlx4_core: set device to use extended counters
authorYishai Hadas <yishaih@mellanox.com>
Mon, 24 Dec 2012 11:22:54 +0000 (13:22 +0200)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 7 Jul 2015 21:45:07 +0000 (14:45 -0700)
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
Reviewed-on: http://r-webdev02.lab.mtl.com:8080/479
Tested-by: Redmine Issue
Reviewed-by: Yevgeny Petrilin <yevgenyp@mellanox.com>
Mini-Regression: Yevgeny Petrilin <yevgenyp@mellanox.com>
Reviewed-by: Vladimir Sokolovsky <vlad@mellanox.com>
(Ported from Mellanox OFED 2.4)

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
drivers/net/ethernet/mellanox/mlx4/main.c
include/linux/mlx4/device.h

index fcb26f2b246ab72153fa323db6377c129f481e59..1951b2c4ec0f73d47f20dd1ec145a69c0fc8f769 100644 (file)
@@ -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)
index 1ed388f598c5d7c5b5190ba8fe62d0e4bfcae55c..ce7efff302f9cfd231bdd0de2de6a892e5017d36 100644 (file)
@@ -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,