metrics: add function to deinitialise library
Once the library usage is over, it must be deinitialized which will free the shared memory reserved during initialization. Observed an issue while running 'metrics_autotest' continuously without quiting. For the first run 'metrics_autotest' passes all test cases but second run onwards first test case fails because metrics library is already initialized during first run. Signed-off-by: Harman Kalra <hkalra@marvell.com> Acked-by: Remy Horton <remy.horton@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com>
This commit is contained in:
parent
c199ca1576
commit
44dc7c0a26
@ -154,6 +154,20 @@ print out all metrics for a given port:
|
||||
}
|
||||
|
||||
|
||||
Deinitialising the library
|
||||
--------------------------
|
||||
|
||||
Once the library usage is done, it must be deinitialized by calling
|
||||
``rte_metrics_deinit()`` which will free the shared memory reserved
|
||||
during initialization.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
err = rte_metrics_deinit(void);
|
||||
|
||||
If the return value is negative, it means deinitialization failed.
|
||||
This function **must** be called from a primary process.
|
||||
|
||||
Bit-rate statistics library
|
||||
---------------------------
|
||||
|
||||
|
@ -76,6 +76,26 @@ rte_metrics_init(int socket_id)
|
||||
rte_spinlock_init(&stats->lock);
|
||||
}
|
||||
|
||||
int
|
||||
rte_metrics_deinit(void)
|
||||
{
|
||||
struct rte_metrics_data_s *stats;
|
||||
const struct rte_memzone *memzone;
|
||||
|
||||
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));
|
||||
|
||||
return rte_memzone_free(memzone);
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
rte_metrics_reg_name(const char *name)
|
||||
{
|
||||
|
@ -24,6 +24,7 @@
|
||||
#define _RTE_METRICS_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <rte_compat.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -80,6 +81,23 @@ struct rte_metric_value {
|
||||
*/
|
||||
void rte_metrics_init(int socket_id);
|
||||
|
||||
/**
|
||||
* @warning
|
||||
* @b EXPERIMENTAL: this API may change without prior notice
|
||||
*
|
||||
* Deinitialize metric module. This function must be called from
|
||||
* a primary process after all the metrics usage is over, to
|
||||
* release the shared memory.
|
||||
*
|
||||
* @return
|
||||
* -EINVAL - invalid parameter.
|
||||
* -EIO: Error, unable to access metrics shared memory
|
||||
* (rte_metrics_init() not called)
|
||||
* 0 - success
|
||||
*/
|
||||
__rte_experimental
|
||||
int rte_metrics_deinit(void);
|
||||
|
||||
/**
|
||||
* Register a metric, making it available as a reporting parameter.
|
||||
*
|
||||
|
@ -11,3 +11,9 @@ DPDK_17.05 {
|
||||
|
||||
local: *;
|
||||
};
|
||||
|
||||
EXPERIMENTAL {
|
||||
global:
|
||||
|
||||
rte_metrics_deinit;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user