Add zsda compressdev stats interface implementation.<br /> <br />Signed-off-by: Hanxiao Li <li.hanxiao@zte.com.cn> <br />---<br /> drivers/common/zsda/zsda_qp_common.c  | 63 +++++++++++++++++++++++++++<br /> drivers/common/zsda/zsda_qp_common.h  | 16 +++++++<br /> drivers/compress/zsda/zsda_comp_pmd.c | 25 ++++++++++-<br /> 3 files changed, 102 insertions(+), 2 deletions(-)<br /> <br />diff --git a/drivers/common/zsda/zsda_qp_common.c b/drivers/common/zsda/zsda_qp_common.c<br />index 9c7152eb24..70367e6c82 100644<br />--- a/drivers/common/zsda/zsda_qp_common.c<br />+++ b/drivers/common/zsda/zsda_qp_common.c<br />@@ -55,3 +55,66 @@ zsda_queue_pair_release(struct zsda_qp **qp_addr)<br />  <br />     return ZSDA_SUCCESS;<br /> }<br />+<br />+void<br />+zsda_stats_get(void **queue_pairs, const uint32_t nb_queue_pairs,<br />+          struct zsda_qp_stat *stats)<br />+{<br />+    enum zsda_service_type type;<br />+    uint32_t i;<br />+    struct zsda_qp *qp;<br />+<br />+    if ((stats == NULL) || (queue_pairs == NULL)) {<br />+        ZSDA_LOG(ERR, "Failed! stats or queue_pairs is NULL");<br />+        return;<br />+    }<br />+<br />+    for (i = 0; i < nb_queue_pairs; i++) {<br />+        qp = queue_pairs[i];<br />+<br />+        if (qp == NULL) {<br />+            ZSDA_LOG(ERR, "Failed! queue_pairs[i] is NULL");<br />+            break;<br />+        }<br />+<br />+        for (type = 0; type < ZSDA_SERVICE_INVALID; type++) {<br />+            if (qp->srv[type].used) {<br />+                stats->enqueued_count +=<br />+                    qp->srv[type].stats.enqueued_count;<br />+                stats->dequeued_count +=<br />+                    qp->srv[type].stats.dequeued_count;<br />+                stats->enqueue_err_count +=<br />+                    qp->srv[type].stats.enqueue_err_count;<br />+                stats->dequeue_err_count +=<br />+                    qp->srv[type].stats.dequeue_err_count;<br />+            }<br />+        }<br />+    }<br />+}<br />+<br />+void<br />+zsda_stats_reset(void **queue_pairs, const uint32_t nb_queue_pairs)<br />+{<br />+    enum zsda_service_type type;<br />+    uint32_t i;<br />+    struct zsda_qp *qp;<br />+<br />+    if (queue_pairs == NULL) {<br />+        ZSDA_LOG(ERR, "Failed! queue_pairs is NULL");<br />+        return;<br />+    }<br />+<br />+    for (i = 0; i < nb_queue_pairs; i++) {<br />+        qp = queue_pairs[i];<br />+<br />+        if (qp == NULL) {<br />+            ZSDA_LOG(ERR, "Failed! queue_pairs[i] is NULL");<br />+            break;<br />+        }<br />+        for (type = 0; type < ZSDA_MAX_SERVICES; type++) {<br />+            if (qp->srv[type].used)<br />+                memset(&(qp->srv[type].stats), 0,<br />+                       sizeof(struct zsda_qp_stat));<br />+        }<br />+    }<br />+}<br />diff --git a/drivers/common/zsda/zsda_qp_common.h b/drivers/common/zsda/zsda_qp_common.h<br />index 4bcec4ad4c..603c0e9e3a 100644<br />--- a/drivers/common/zsda/zsda_qp_common.h<br />+++ b/drivers/common/zsda/zsda_qp_common.h<br />@@ -52,10 +52,23 @@ struct zsda_queue {<br />     uint16_t sid;<br /> };<br />  <br />+struct zsda_qp_stat {<br />+    /**< Count of all operations enqueued */<br />+    uint64_t enqueued_count;<br />+    /**< Count of all operations dequeued */<br />+    uint64_t dequeued_count;<br />+<br />+    /**< Total error count on operations enqueued */<br />+    uint64_t enqueue_err_count;<br />+    /**< Total error count on operations dequeued */<br />+    uint64_t dequeue_err_count;<br />+};<br />+<br /> struct qp_srv {<br />     bool used;<br />     struct zsda_queue tx_q;<br />     struct zsda_queue rx_q;<br />+    struct zsda_qp_stat stats;<br />     struct rte_mempool *op_cookie_pool;<br />     void **op_cookies;<br />     uint16_t nb_descriptors;<br />@@ -66,5 +79,8 @@ struct zsda_qp {<br /> };<br />  <br /> int zsda_queue_pair_release(struct zsda_qp **qp_addr);<br />+void zsda_stats_get(void **queue_pairs, const uint32_t nb_queue_pairs,<br />+          struct zsda_qp_stat *stats);<br />+void zsda_stats_reset(void **queue_pairs, const uint32_t nb_queue_pairs);<br />  <br /> #endif /* _ZSDA_QP_COMMON_H_ */<br />diff --git a/drivers/compress/zsda/zsda_comp_pmd.c b/drivers/compress/zsda/zsda_comp_pmd.c<br />index 3bdcd66f6a..555178cd12 100644<br />--- a/drivers/compress/zsda/zsda_comp_pmd.c<br />+++ b/drivers/compress/zsda/zsda_comp_pmd.c<br />@@ -140,6 +140,27 @@ zsda_comp_dev_info_get(struct rte_compressdev *dev,<br />     }<br /> }<br />  <br />+static void<br />+zsda_comp_stats_get(struct rte_compressdev *dev,<br />+            struct rte_compressdev_stats *stats)<br />+{<br />+    struct zsda_qp_stat stats_info = {0};<br />+<br />+    zsda_stats_get(dev->data->queue_pairs, dev->data->nb_queue_pairs,<br />+               &stats_info);<br />+    stats->enqueued_count = stats_info.enqueued_count;<br />+    stats->dequeued_count = stats_info.dequeued_count;<br />+    stats->enqueue_err_count = stats_info.enqueue_err_count;<br />+    stats->dequeue_err_count = stats_info.dequeue_err_count;<br />+}<br />+<br />+<br />+static void<br />+zsda_comp_stats_reset(struct rte_compressdev *dev)<br />+{<br />+    zsda_stats_reset(dev->data->queue_pairs, dev->data->nb_queue_pairs);<br />+}<br />+<br /> static struct rte_compressdev_ops compress_zsda_ops = {<br />  <br />     .dev_configure = zsda_comp_dev_config,<br />@@ -148,8 +169,8 @@ static struct rte_compressdev_ops compress_zsda_ops = {<br />     .dev_close = zsda_comp_dev_close,<br />     .dev_infos_get = zsda_comp_dev_info_get,<br />  <br />-    .stats_get = NULL,<br />-    .stats_reset = NULL,<br />+    .stats_get = zsda_comp_stats_get,<br />+    .stats_reset = zsda_comp_stats_reset,<br />     .queue_pair_setup = NULL,<br />     .queue_pair_release = NULL,<br />  <br />--  <br />2.27.0<br />