[RFC,UPDATE,3/9] dmadev: add dump function
Checks
Commit Message
a dump() function to print the state of a device to a file (e.g. sterr
or stdout) is very useful for debugging drivers.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/dmadev/rte_dmadev.c | 17 +++++++++++++++++
lib/dmadev/rte_dmadev.h | 19 +++++++++++++++++++
lib/dmadev/rte_dmadev_pmd.h | 5 +++++
lib/dmadev/version.map | 1 +
4 files changed, 42 insertions(+)
@@ -345,6 +345,23 @@ rte_dmadev_xstats_reset(uint16_t dev_id, const uint32_t ids[], uint32_t nb_ids)
return (*dev->dev_ops->xstats_reset)(dev, ids, nb_ids);
}
+int
+rte_dmadev_dump(uint16_t dev_id, FILE *f)
+{
+ struct rte_dmadev *dev = &rte_dmadevices[dev_id];
+
+ RTE_DMADEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
+
+ fprintf(f, "DMA Dev %u, '%s' [%s]\n", dev->dev_id, dev->name,
+ dev->started ? "started" : "stopped");
+ fprintf(f, " Driver: %s\n", dev->driver_name);
+ fprintf(f, " Socket Id: %d\n", dev->socket_id);
+
+ if (dev->dev_ops->dump != NULL)
+ return (*dev->dev_ops->dump)(dev, f);
+ return 0;
+}
+
int
rte_dmadev_selftest(uint16_t dev_id)
{
@@ -357,6 +357,25 @@ __rte_experimental
int
rte_dmadev_close(uint16_t dev_id);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Dump DMA device info.
+ *
+ * @param dev_id
+ * The identifier of the device.
+ *
+ * @param f
+ * The file to write the output to.
+ *
+ * @return
+ * 0 on success. Non-zero otherwise.
+ */
+__rte_experimental
+int
+rte_dmadev_dump(uint16_t dev_id, FILE *f);
+
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
@@ -99,6 +99,9 @@ typedef int (*dmadev_close_t)(struct rte_dmadev *dev);
typedef int (*dmadev_reset_t)(struct rte_dmadev *dev);
/**< @internal Function used to reset a configured device. */
+typedef int (*dmadev_dump_t)(struct rte_dmadev *dev, FILE *f);
+/**< @internal Function used to dump out the state of a device for debugging. */
+
typedef int (*dmadev_queue_setup_t)(struct rte_dmadev *dev,
const struct rte_dmadev_queue_conf *conf);
/**< @internal Function used to allocate and set up a virt queue. */
@@ -147,6 +150,8 @@ struct rte_dmadev_ops {
dmadev_close_t dev_close;
/**< Reset device. */
dmadev_reset_t dev_reset;
+ /**< Dump device info for debugging */
+ dmadev_dump_t dump;
/**< Allocate and set up a virt queue. */
dmadev_queue_setup_t queue_setup;
@@ -4,6 +4,7 @@ EXPERIMENTAL {
rte_dmadevices;
rte_dmadev_pmd_allocate;
rte_dmadev_count;
+ rte_dmadev_dump;
rte_dmadev_get_dev_id;
rte_dmadev_socket_id;
rte_dmadev_info_get;