Skip to content

Commit 977027b

Browse files
fengchengwenshemminger
authored andcommitted
ethdev: support hide zero when telemetry regs
Support hide zero when telemetry regs, and also modify filter usage. Now the usage: /ethdev/regs,0,hide_zero=true --hide zero values when dump regs /ethdev/regs,0,hide_zero=false --don't hide zero values /ethdev/regs,0,filter=ssu --filter ssu module when dump regs /ethdev/regs,0,filter=ssu,hide_zero=true --filter ssu module and hide zero values when dump regs Signed-off-by: Chengwen Feng <[email protected]>
1 parent cd717eb commit 977027b

File tree

1 file changed

+36
-16
lines changed

1 file changed

+36
-16
lines changed

lib/ethdev/rte_ethdev_telemetry.c

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1383,18 +1383,21 @@ eth_dev_handle_port_tm_node_caps(const char *cmd __rte_unused,
13831383

13841384
static void
13851385
eth_dev_add_reg_data(struct rte_tel_data *d, struct rte_dev_reg_info *reg_info,
1386-
uint32_t idx)
1386+
uint32_t idx, bool hide_zero)
13871387
{
1388+
uint64_t val;
1389+
13881390
if (reg_info->width == sizeof(uint32_t))
1389-
rte_tel_data_add_dict_uint_hex(d, reg_info->names[idx].name,
1390-
*((uint32_t *)reg_info->data + idx), 0);
1391+
val = *((uint32_t *)reg_info->data + idx);
13911392
else
1392-
rte_tel_data_add_dict_uint_hex(d, reg_info->names[idx].name,
1393-
*((uint64_t *)reg_info->data + idx), 0);
1393+
val = *((uint64_t *)reg_info->data + idx);
1394+
1395+
if (!hide_zero || val > 0)
1396+
rte_tel_data_add_dict_uint_hex(d, reg_info->names[idx].name, val, 0);
13941397
}
13951398

13961399
static int
1397-
eth_dev_store_regs(struct rte_tel_data *d, struct rte_dev_reg_info *reg_info)
1400+
eth_dev_store_regs(struct rte_tel_data *d, struct rte_dev_reg_info *reg_info, bool hide_zero)
13981401
{
13991402
struct rte_tel_data *groups[RTE_TEL_MAX_DICT_ENTRIES];
14001403
char group_name[RTE_TEL_MAX_STRING_LEN] = {0};
@@ -1419,7 +1422,7 @@ eth_dev_store_regs(struct rte_tel_data *d, struct rte_dev_reg_info *reg_info)
14191422

14201423
for (i = 0; i < reg_info->length; i++) {
14211424
if (i % RTE_TEL_MAX_DICT_ENTRIES != 0) {
1422-
eth_dev_add_reg_data(group, reg_info, i);
1425+
eth_dev_add_reg_data(group, reg_info, i, hide_zero);
14231426
continue;
14241427
}
14251428

@@ -1431,7 +1434,7 @@ eth_dev_store_regs(struct rte_tel_data *d, struct rte_dev_reg_info *reg_info)
14311434
}
14321435
groups[grp_num++] = group;
14331436
rte_tel_data_start_dict(group);
1434-
eth_dev_add_reg_data(group, reg_info, i);
1437+
eth_dev_add_reg_data(group, reg_info, i, hide_zero);
14351438
}
14361439

14371440
for (i = 0; i < grp_num; i++) {
@@ -1447,7 +1450,7 @@ eth_dev_store_regs(struct rte_tel_data *d, struct rte_dev_reg_info *reg_info)
14471450
}
14481451

14491452
static int
1450-
eth_dev_get_port_regs(int port_id, struct rte_tel_data *d, char *filter)
1453+
eth_dev_get_port_regs(int port_id, struct rte_tel_data *d, char *filter, bool hide_zero)
14511454
{
14521455
struct rte_dev_reg_info reg_info;
14531456
int ret;
@@ -1481,7 +1484,7 @@ eth_dev_get_port_regs(int port_id, struct rte_tel_data *d, char *filter)
14811484
goto out;
14821485
}
14831486

1484-
ret = eth_dev_store_regs(d, &reg_info);
1487+
ret = eth_dev_store_regs(d, &reg_info, hide_zero);
14851488
out:
14861489
free(reg_info.data);
14871490
free(reg_info.names);
@@ -1494,19 +1497,36 @@ eth_dev_handle_port_regs(const char *cmd __rte_unused,
14941497
const char *params,
14951498
struct rte_tel_data *d)
14961499
{
1497-
char *filter, *end_param;
1500+
const char *const valid_keys[] = { "filter", "hide_zero", NULL };
1501+
struct rte_kvargs *kvlist = NULL;
1502+
char *filter = NULL, *end_param;
1503+
const char *filter_val;
1504+
bool hide_zero = false;
14981505
uint16_t port_id;
14991506
int ret;
15001507

15011508
ret = eth_dev_parse_port_params(params, &port_id, &end_param, true);
15021509
if (ret != 0)
15031510
return ret;
15041511

1505-
filter = strtok(end_param, ",");
1506-
if (filter != NULL && strlen(filter) == 0)
1507-
filter = NULL;
1512+
if (*end_param != '\0') {
1513+
kvlist = rte_kvargs_parse(end_param, valid_keys);
1514+
filter_val = rte_kvargs_get(kvlist, "filter");
1515+
ret = rte_kvargs_process(kvlist, "hide_zero", eth_dev_parse_hide_zero, &hide_zero);
1516+
if (kvlist == NULL || (filter_val != NULL && strlen(filter_val) == 0) || ret != 0) {
1517+
RTE_ETHDEV_LOG_LINE(NOTICE,
1518+
"Unknown extra parameters passed to ethdev telemetry command, ignoring");
1519+
} else {
1520+
filter = (filter_val != NULL) ? strdup(filter_val) : NULL;
1521+
hide_zero = false;
1522+
}
1523+
rte_kvargs_free(kvlist);
1524+
}
1525+
1526+
ret = eth_dev_get_port_regs(port_id, d, filter, hide_zero);
1527+
free(filter);
15081528

1509-
return eth_dev_get_port_regs(port_id, d, filter);
1529+
return ret;
15101530
}
15111531

15121532
static int eth_dev_telemetry_do(const char *cmd, const char *params, void *arg,
@@ -1582,5 +1602,5 @@ RTE_INIT(ethdev_init_telemetry)
15821602
eth_dev_telemetry_do, eth_dev_handle_port_tm_node_caps,
15831603
"Returns TM Node Capabilities info for a port. Parameters: int port_id, int node_id (see tm_capability for the max)");
15841604
rte_telemetry_register_cmd("/ethdev/regs", eth_dev_handle_port_regs,
1585-
"Returns all or filtered registers info for a port. Parameters: int port_id, string module_name (Optional if show all)");
1605+
"Returns registers info for a port. Parameters: int port_id,filter=xxx(Optional if show all),hide_zero=true|false(Optional)");
15861606
}

0 commit comments

Comments
 (0)