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.richardson@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(-)
@@ -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");
@@ -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;
}