Rather than having the xstats as fields inside the main driver structure,
create a separate structure type for them.

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
---
 drivers/raw/ioat/ioat_rawdev.c         | 21 ++++++++----------
 drivers/raw/ioat/rte_ioat_rawdev_fns.h | 30 ++++++++++++++++----------
 2 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/drivers/raw/ioat/ioat_rawdev.c b/drivers/raw/ioat/ioat_rawdev.c
index 48fe32d0a..e4d39a2ee 100644
--- a/drivers/raw/ioat/ioat_rawdev.c
+++ b/drivers/raw/ioat/ioat_rawdev.c
@@ -135,10 +135,10 @@ ioat_xstats_get(const struct rte_rawdev *dev, const 
unsigned int ids[],
 
        for (i = 0; i < n; i++) {
                switch (ids[i]) {
-               case 0: values[i] = ioat->enqueue_failed; break;
-               case 1: values[i] = ioat->enqueued; break;
-               case 2: values[i] = ioat->started; break;
-               case 3: values[i] = ioat->completed; break;
+               case 0: values[i] = ioat->xstats.enqueue_failed; break;
+               case 1: values[i] = ioat->xstats.enqueued; break;
+               case 2: values[i] = ioat->xstats.started; break;
+               case 3: values[i] = ioat->xstats.completed; break;
                default: values[i] = 0; break;
                }
        }
@@ -169,26 +169,23 @@ ioat_xstats_reset(struct rte_rawdev *dev, const uint32_t 
*ids, uint32_t nb_ids)
        unsigned int i;
 
        if (!ids) {
-               ioat->enqueue_failed = 0;
-               ioat->enqueued = 0;
-               ioat->started = 0;
-               ioat->completed = 0;
+               memset(&ioat->xstats, 0, sizeof(ioat->xstats));
                return 0;
        }
 
        for (i = 0; i < nb_ids; i++) {
                switch (ids[i]) {
                case 0:
-                       ioat->enqueue_failed = 0;
+                       ioat->xstats.enqueue_failed = 0;
                        break;
                case 1:
-                       ioat->enqueued = 0;
+                       ioat->xstats.enqueued = 0;
                        break;
                case 2:
-                       ioat->started = 0;
+                       ioat->xstats.started = 0;
                        break;
                case 3:
-                       ioat->completed = 0;
+                       ioat->xstats.completed = 0;
                        break;
                default:
                        IOAT_PMD_WARN("Invalid xstat id - cannot reset value");
diff --git a/drivers/raw/ioat/rte_ioat_rawdev_fns.h 
b/drivers/raw/ioat/rte_ioat_rawdev_fns.h
index 98af40894..813c1a157 100644
--- a/drivers/raw/ioat/rte_ioat_rawdev_fns.h
+++ b/drivers/raw/ioat/rte_ioat_rawdev_fns.h
@@ -47,17 +47,31 @@ enum rte_ioat_dev_type {
        RTE_IDXD_DEV,
 };
 
+/**
+ * @internal
+ * some statistics for tracking, if added/changed update xstats fns
+ */
+struct rte_ioat_xstats {
+       uint64_t enqueue_failed;
+       uint64_t enqueued;
+       uint64_t started;
+       uint64_t completed;
+};
+
 /**
  * @internal
  * Structure representing an IOAT device instance  * Structure representing a 
device instance
  */
 struct rte_ioat_rawdev {
+       /* common fields at the top - match those in rte_idxd_rawdev */
        enum rte_ioat_dev_type type;
+       struct rte_ioat_xstats xstats;
+
        struct rte_rawdev *rawdev;
        const struct rte_memzone *mz;
        const struct rte_memzone *desc_mz;
 
-       volatile uint16_t *doorbell;
+       volatile uint16_t *doorbell __rte_cache_aligned;
        phys_addr_t status_addr;
        phys_addr_t ring_addr;
 
@@ -70,12 +84,6 @@ struct rte_ioat_rawdev {
        unsigned short next_read;
        unsigned short next_write;
 
-       /* some statistics for tracking, if added/changed update xstats fns*/
-       uint64_t enqueue_failed __rte_cache_aligned;
-       uint64_t enqueued;
-       uint64_t started;
-       uint64_t completed;
-
        /* to report completions, the device will write status back here */
        volatile uint64_t status __rte_cache_aligned;
 
@@ -207,7 +215,7 @@ __ioat_enqueue_copy(int dev_id, phys_addr_t src, 
phys_addr_t dst,
        struct rte_ioat_generic_hw_desc *desc;
 
        if (space == 0) {
-               ioat->enqueue_failed++;
+               ioat->xstats.enqueue_failed++;
                return 0;
        }
 
@@ -226,7 +234,7 @@ __ioat_enqueue_copy(int dev_id, phys_addr_t src, 
phys_addr_t dst,
                                        (int64_t)src_hdl);
        rte_prefetch0(&ioat->desc_ring[ioat->next_write & mask]);
 
-       ioat->enqueued++;
+       ioat->xstats.enqueued++;
        return 1;
 }
 
@@ -241,7 +249,7 @@ __ioat_perform_ops(int dev_id)
                        .control.completion_update = 1;
        rte_compiler_barrier();
        *ioat->doorbell = ioat->next_write;
-       ioat->started = ioat->enqueued;
+       ioat->xstats.started = ioat->xstats.enqueued;
 }
 
 /**
@@ -307,7 +315,7 @@ __ioat_completed_ops(int dev_id, uint8_t max_copies,
 
 end:
        ioat->next_read = read;
-       ioat->completed += count;
+       ioat->xstats.completed += count;
        return count;
 }
 
-- 
2.25.1

Reply via email to