diff options
author | Christian Ehrhardt <christian.ehrhardt@canonical.com> | 2019-04-15 14:36:48 +0200 |
---|---|---|
committer | Christian Ehrhardt <christian.ehrhardt@canonical.com> | 2019-04-15 14:39:46 +0200 |
commit | e2bea7436061ca2e7e14bfcfdc5870f2555c3965 (patch) | |
tree | 46c62ce8f227674d6880430f9623edb4e77b9f9a /lib/librte_telemetry | |
parent | a4f0fa29488e582ab8b5ef9db475b3d26ded690c (diff) |
New upstream version 18.11.1
Change-Id: Ic52e74a9ed6f3ae06acea4a27357bd7153efc2a3
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Diffstat (limited to 'lib/librte_telemetry')
-rw-r--r-- | lib/librte_telemetry/rte_telemetry.c | 40 | ||||
-rw-r--r-- | lib/librte_telemetry/rte_telemetry_internal.h | 2 |
2 files changed, 32 insertions, 10 deletions
diff --git a/lib/librte_telemetry/rte_telemetry.c b/lib/librte_telemetry/rte_telemetry.c index 016431f1..7fb247ea 100644 --- a/lib/librte_telemetry/rte_telemetry.c +++ b/lib/librte_telemetry/rte_telemetry.c @@ -558,7 +558,7 @@ rte_telemetry_send_ports_stats_values(uint32_t *metric_ids, int num_metric_ids, } ret = rte_telemetry_update_metrics_ethdev(telemetry, - port_ids[i], telemetry->reg_index); + port_ids[i], telemetry->reg_index[i]); if (ret < 0) { TELEMETRY_LOG_ERR("Failed to update ethdev metrics"); return -1; @@ -658,23 +658,45 @@ free_xstats: static int32_t rte_telemetry_initial_accept(struct telemetry_impl *telemetry) { + struct driver_index { + const void *dev_ops; + int reg_index; + } drv_idx[RTE_MAX_ETHPORTS]; + int nb_drv_idx = 0; uint16_t pid; int ret; int selftest = 0; RTE_ETH_FOREACH_DEV(pid) { - telemetry->reg_index = rte_telemetry_reg_ethdev_to_metrics(pid); - break; - } + int i; + /* Different device types have different numbers of stats, so + * first check if the stats for this type of device have + * already been registered + */ + for (i = 0; i < nb_drv_idx; i++) { + if (rte_eth_devices[pid].dev_ops == drv_idx[i].dev_ops) { + telemetry->reg_index[pid] = drv_idx[i].reg_index; + break; + } + } + if (i < nb_drv_idx) + continue; /* we found a match, go to next port */ - if (telemetry->reg_index < 0) { - TELEMETRY_LOG_ERR("Failed to register ethdev metrics"); - return -1; + /* No match, register a new set of xstats for this port */ + ret = rte_telemetry_reg_ethdev_to_metrics(pid); + if (ret < 0) { + TELEMETRY_LOG_ERR("Failed to register ethdev metrics"); + return -1; + } + telemetry->reg_index[pid] = ret; + drv_idx[nb_drv_idx].dev_ops = rte_eth_devices[pid].dev_ops; + drv_idx[nb_drv_idx].reg_index = ret; + nb_drv_idx++; } telemetry->metrics_register_done = 1; if (selftest) { - ret = rte_telemetry_socket_messaging_testing(telemetry->reg_index, + ret = rte_telemetry_socket_messaging_testing(telemetry->reg_index[0], telemetry->server_fd); if (ret < 0) return -1; @@ -1299,7 +1321,7 @@ rte_telemetry_socket_messaging_testing(int index, int socket) } telemetry->server_fd = socket; - telemetry->reg_index = index; + telemetry->reg_index[0] = index; TELEMETRY_LOG_INFO("Beginning Telemetry socket message Selftest"); rte_telemetry_socket_test_setup(telemetry, &send_fd, &recv_fd); TELEMETRY_LOG_INFO("Register valid client test"); diff --git a/lib/librte_telemetry/rte_telemetry_internal.h b/lib/librte_telemetry/rte_telemetry_internal.h index de7afda3..c298c391 100644 --- a/lib/librte_telemetry/rte_telemetry_internal.h +++ b/lib/librte_telemetry/rte_telemetry_internal.h @@ -36,7 +36,7 @@ typedef struct telemetry_impl { pthread_t thread_id; int thread_status; uint32_t socket_id; - int reg_index; + int reg_index[RTE_MAX_ETHPORTS]; int metrics_register_done; TAILQ_HEAD(, telemetry_client) client_list_head; struct telemetry_client *request_client; |