net/mlx5: debugfs, Add num of in-use FW command interface slots
authorTariq Toukan <tariqt@nvidia.com>
Wed, 8 Jun 2022 04:52:31 +0000 (07:52 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Wed, 13 Jul 2022 22:56:46 +0000 (15:56 -0700)
Expose the number of busy / in-use slots in the FW command interface via
a read-only debugfs entry. This improves observability and helps in the
performance bottleneck analysis.

Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c

index 9caa1b52321b62bc242595ddff9f49843b41cb5d..3e232a65a0c3e1b94aa1929a42325f1022036efd 100644 (file)
@@ -166,6 +166,28 @@ static const struct file_operations stats_fops = {
        .write  = average_write,
 };
 
+static ssize_t slots_read(struct file *filp, char __user *buf, size_t count,
+                         loff_t *pos)
+{
+       struct mlx5_cmd *cmd;
+       char tbuf[6];
+       int weight;
+       int field;
+       int ret;
+
+       cmd = filp->private_data;
+       weight = bitmap_weight(&cmd->bitmask, cmd->max_reg_cmds);
+       field = cmd->max_reg_cmds - weight;
+       ret = snprintf(tbuf, sizeof(tbuf), "%d\n", field);
+       return simple_read_from_buffer(buf, count, pos, tbuf, ret);
+}
+
+static const struct file_operations slots_fops = {
+       .owner  = THIS_MODULE,
+       .open   = simple_open,
+       .read   = slots_read,
+};
+
 void mlx5_cmdif_debugfs_init(struct mlx5_core_dev *dev)
 {
        struct mlx5_cmd_stats *stats;
@@ -176,6 +198,8 @@ void mlx5_cmdif_debugfs_init(struct mlx5_core_dev *dev)
        cmd = &dev->priv.dbg.cmdif_debugfs;
        *cmd = debugfs_create_dir("commands", dev->priv.dbg.dbg_root);
 
+       debugfs_create_file("slots_inuse", 0400, *cmd, &dev->cmd, &slots_fops);
+
        for (i = 0; i < MLX5_CMD_OP_MAX; i++) {
                stats = &dev->cmd.stats[i];
                namep = mlx5_command_str(i);