X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_metrics%2Frte_metrics.c;h=e2a0fbeda8e27449ac63035a7d7f6b2aa73e258f;hb=c9a189f4ea365c40fd3296581014684f770249f6;hp=99a96b651c5ef8123299cb867480f1b23c6c1b34;hpb=219731302a0aa5b8edb30a6bc1cdea64e7824a98;p=dpdk.git diff --git a/lib/librte_metrics/rte_metrics.c b/lib/librte_metrics/rte_metrics.c index 99a96b651c..e2a0fbeda8 100644 --- a/lib/librte_metrics/rte_metrics.c +++ b/lib/librte_metrics/rte_metrics.c @@ -13,7 +13,8 @@ #include #include -#define RTE_METRICS_MAX_METRICS 256 +int metrics_initialized; + #define RTE_METRICS_MEMZONE_NAME "RTE_METRICS" /** @@ -61,6 +62,8 @@ rte_metrics_init(int socket_id) struct rte_metrics_data_s *stats; const struct rte_memzone *memzone; + if (metrics_initialized) + return; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return; @@ -74,6 +77,30 @@ rte_metrics_init(int socket_id) stats = memzone->addr; memset(stats, 0, sizeof(struct rte_metrics_data_s)); rte_spinlock_init(&stats->lock); + metrics_initialized = 1; +} + +int +rte_metrics_deinit(void) +{ + struct rte_metrics_data_s *stats; + const struct rte_memzone *memzone; + int ret; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -EINVAL; + + memzone = rte_memzone_lookup(RTE_METRICS_MEMZONE_NAME); + if (memzone == NULL) + return -EIO; + + stats = memzone->addr; + memset(stats, 0, sizeof(struct rte_metrics_data_s)); + + ret = rte_memzone_free(memzone); + if (ret == 0) + metrics_initialized = 0; + return ret; } int