[PATCH] ethdev: add dump regs for telemetry
Ferruh Yigit
ferruh.yigit at amd.com
Thu Dec 14 13:49:50 CET 2023
On 12/14/2023 1:56 AM, Jie Hai wrote:
> The ethdev library now registers a telemetry command for
> dump regs.
>
> An example usage is shown below:
> --> /ethdev/regs,test
> {
> "/ethdev/regs": {
> "regs_offset": 0,
> "regs_length": 3192,
> "regs_width": 4,
> "device_version": "0x1080f00",
> "regs_file": "port_0_regs_test"
> }
> }
>
> Signed-off-by: Jie Hai <haijie1 at huawei.com>
> ---
> lib/ethdev/rte_ethdev_telemetry.c | 93 +++++++++++++++++++++++++++++++
> 1 file changed, 93 insertions(+)
>
> diff --git a/lib/ethdev/rte_ethdev_telemetry.c b/lib/ethdev/rte_ethdev_telemetry.c
> index b01028ce9b60..33ec4739aa9b 100644
> --- a/lib/ethdev/rte_ethdev_telemetry.c
> +++ b/lib/ethdev/rte_ethdev_telemetry.c
> @@ -5,6 +5,7 @@
> #include <ctype.h>
> #include <stdlib.h>
>
> +#include <rte_malloc.h>
> #include <rte_kvargs.h>
> #include <rte_telemetry.h>
>
> @@ -1395,6 +1396,96 @@ eth_dev_handle_port_tm_node_caps(const char *cmd __rte_unused,
> return ret;
> }
>
> +static int
> +eth_dev_get_port_regs(uint16_t port_id, struct rte_dev_reg_info *reg_info,
> + const char *file_name)
> +{
> + uint64_t buf_size;
> + size_t nr_written;
> + void *data;
> + FILE *fp;
> + int ret;
> +
> + ret = rte_eth_dev_get_reg_info(port_id, reg_info);
> + if (ret != 0) {
> + RTE_ETHDEV_LOG(ERR,
> + "Error getting device reg info: %d\n", ret);
> + return ret;
> + }
> +
> + buf_size = reg_info->length * reg_info->width;
> + data = rte_zmalloc(NULL, buf_size, 0);
> + if (!data) {
> + RTE_ETHDEV_LOG(ERR,
> + "Error allocating %zu bytes buffer\n", buf_size);
> + return -ENOMEM;
> + }
> +
> + reg_info->data = data;
> + ret = rte_eth_dev_get_reg_info(port_id, reg_info);
> + if (ret != 0) {
> + RTE_ETHDEV_LOG(ERR,
> + "Error getting regs from device: %d\n", ret);
> + goto out;
> + }
> +
> + fp = fopen(file_name, "wb");
> + if (fp == NULL) {
> + printf("Error during opening '%s' for writing: %s\n",
> + file_name, strerror(errno));
> + ret = -EINVAL;
> + } else {
> + nr_written = fwrite(reg_info->data, 1, buf_size, fp);
>
Above code writes register data to a file.
I am not sure about this kind of usage of telemetry command, that it
cause data to be written to a file.
My understanding is, telemetry usage is based on what telemetry client
receives.
What do you think just keep the 'reg_info' fields excluding data to the
file?
More information about the dev
mailing list