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