From: Srikanth Yalavarthi <syalavar...@marvell.com>

Added functions to get and reset device stats. Device stats
include number of requests enqueued, dequeued and errors. Added
function prototypes to used by driver implementations.

Signed-off-by: Srikanth Yalavarthi <syalavar...@marvell.com>
Signed-off-by: Jerin Jacob <jer...@marvell.com>
---
 lib/mldev/rte_mldev.c      | 40 ++++++++++++++++++++++++++++++++++++++
 lib/mldev/rte_mldev_core.h | 32 ++++++++++++++++++++++++++++++
 lib/mldev/version.map      |  2 ++
 3 files changed, 74 insertions(+)

diff --git a/lib/mldev/rte_mldev.c b/lib/mldev/rte_mldev.c
index 872e4e200a..bd65a44be5 100644
--- a/lib/mldev/rte_mldev.c
+++ b/lib/mldev/rte_mldev.c
@@ -357,6 +357,46 @@ rte_ml_dev_queue_pair_setup(int16_t dev_id, uint16_t 
queue_pair_id,
        return (*dev->dev_ops->dev_queue_pair_setup)(dev, queue_pair_id, 
qp_conf, socket_id);
 }
 
+int
+rte_ml_dev_stats_get(int16_t dev_id, struct rte_ml_dev_stats *stats)
+{
+       struct rte_ml_dev *dev;
+
+       if (!rte_ml_dev_is_valid_dev(dev_id)) {
+               RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
+               return -EINVAL;
+       }
+
+       dev = rte_ml_dev_pmd_get_dev(dev_id);
+       if (*dev->dev_ops->dev_stats_get == NULL)
+               return -ENOTSUP;
+
+       if (stats == NULL) {
+               RTE_MLDEV_LOG(ERR, "Dev %d, stats cannot be NULL\n", dev_id);
+               return -EINVAL;
+       }
+       memset(stats, 0, sizeof(struct rte_ml_dev_stats));
+
+       return (*dev->dev_ops->dev_stats_get)(dev, stats);
+}
+
+void
+rte_ml_dev_stats_reset(int16_t dev_id)
+{
+       struct rte_ml_dev *dev;
+
+       if (!rte_ml_dev_is_valid_dev(dev_id)) {
+               RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
+               return;
+       }
+
+       dev = rte_ml_dev_pmd_get_dev(dev_id);
+       if (*dev->dev_ops->dev_stats_reset == NULL)
+               return;
+
+       (*dev->dev_ops->dev_stats_reset)(dev);
+}
+
 int
 rte_ml_model_load(int16_t dev_id, struct rte_ml_model_params *params, uint16_t 
*model_id)
 {
diff --git a/lib/mldev/rte_mldev_core.h b/lib/mldev/rte_mldev_core.h
index b0144aaf0c..73eefc48c0 100644
--- a/lib/mldev/rte_mldev_core.h
+++ b/lib/mldev/rte_mldev_core.h
@@ -191,6 +191,32 @@ typedef int (*mldev_queue_pair_setup_t)(struct rte_ml_dev 
*dev, uint16_t queue_p
  */
 typedef int (*mldev_queue_pair_release_t)(struct rte_ml_dev *dev, uint16_t 
queue_pair_id);
 
+/**
+ * @internal
+ *
+ * Function used to get device statistics.
+ *
+ * @param dev
+ *     ML device pointer.
+ * @param stats
+ *     Pointer to ML device stats structure to update.
+ *
+ * @return
+ *     - 0 on success.
+ *     - < 0, error on failure.
+ */
+typedef int (*mldev_stats_get_t)(struct rte_ml_dev *dev, struct 
rte_ml_dev_stats *stats);
+
+/**
+ * @internal
+ *
+ * Function used to reset device statistics.
+ *
+ * @param dev
+ *     ML device pointer.
+ */
+typedef void (*mldev_stats_reset_t)(struct rte_ml_dev *dev);
+
 /**
  * @internal
  *
@@ -416,6 +442,12 @@ struct rte_ml_dev_ops {
        /** Release a device queue pair. */
        mldev_queue_pair_release_t dev_queue_pair_release;
 
+       /** Get device statistics. */
+       mldev_stats_get_t dev_stats_get;
+
+       /** Reset device statistics. */
+       mldev_stats_reset_t dev_stats_reset;
+
        /** Load an ML model. */
        mldev_model_load_t model_load;
 
diff --git a/lib/mldev/version.map b/lib/mldev/version.map
index b585b09ec1..58803722be 100644
--- a/lib/mldev/version.map
+++ b/lib/mldev/version.map
@@ -11,6 +11,8 @@ EXPERIMENTAL {
        rte_ml_dev_queue_pair_setup;
        rte_ml_dev_socket_id;
        rte_ml_dev_start;
+       rte_ml_dev_stats_get;
+       rte_ml_dev_stats_reset;
        rte_ml_dev_stop;
        rte_ml_enqueue_burst;
        rte_ml_io_dequantize;
-- 
2.39.1

Reply via email to