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 <haij...@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?