telemetry: remove static limit on callbacks count
This code is not performance sensitive and can be switched to dynamic allocations. Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Ciara Power <ciara.power@intel.com>
This commit is contained in:
parent
2d2bf7de1a
commit
64307fad7d
@ -283,7 +283,7 @@ typedef void * (*handler)(void *sock_id);
|
|||||||
* @return
|
* @return
|
||||||
* -EINVAL for invalid parameters failure.
|
* -EINVAL for invalid parameters failure.
|
||||||
* @return
|
* @return
|
||||||
* -ENOENT if max callbacks limit has been reached.
|
* -ENOMEM for mem allocation failure.
|
||||||
*/
|
*/
|
||||||
__rte_experimental
|
__rte_experimental
|
||||||
int
|
int
|
||||||
|
@ -27,9 +27,6 @@
|
|||||||
#define MAX_OUTPUT_LEN (1024 * 16)
|
#define MAX_OUTPUT_LEN (1024 * 16)
|
||||||
#define MAX_CONNECTIONS 10
|
#define MAX_CONNECTIONS 10
|
||||||
|
|
||||||
/** Maximum number of telemetry callbacks. */
|
|
||||||
#define TELEMETRY_MAX_CALLBACKS 64
|
|
||||||
|
|
||||||
#ifndef RTE_EXEC_ENV_WINDOWS
|
#ifndef RTE_EXEC_ENV_WINDOWS
|
||||||
static void *
|
static void *
|
||||||
client_handler(void *socket);
|
client_handler(void *socket);
|
||||||
@ -62,7 +59,7 @@ static uint32_t logtype;
|
|||||||
rte_log_ptr(RTE_LOG_ ## l, logtype, "TELEMETRY: " __VA_ARGS__)
|
rte_log_ptr(RTE_LOG_ ## l, logtype, "TELEMETRY: " __VA_ARGS__)
|
||||||
|
|
||||||
/* list of command callbacks, with one command registered by default */
|
/* list of command callbacks, with one command registered by default */
|
||||||
static struct cmd_callback callbacks[TELEMETRY_MAX_CALLBACKS];
|
static struct cmd_callback *callbacks;
|
||||||
static int num_callbacks; /* How many commands are registered */
|
static int num_callbacks; /* How many commands are registered */
|
||||||
/* Used when accessing or modifying list of command callbacks */
|
/* Used when accessing or modifying list of command callbacks */
|
||||||
static rte_spinlock_t callback_sl = RTE_SPINLOCK_INITIALIZER;
|
static rte_spinlock_t callback_sl = RTE_SPINLOCK_INITIALIZER;
|
||||||
@ -73,15 +70,21 @@ static uint16_t v2_clients;
|
|||||||
int
|
int
|
||||||
rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help)
|
rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help)
|
||||||
{
|
{
|
||||||
|
struct cmd_callback *new_callbacks;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (strlen(cmd) >= MAX_CMD_LEN || fn == NULL || cmd[0] != '/'
|
if (strlen(cmd) >= MAX_CMD_LEN || fn == NULL || cmd[0] != '/'
|
||||||
|| strlen(help) >= MAX_HELP_LEN)
|
|| strlen(help) >= MAX_HELP_LEN)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (num_callbacks >= TELEMETRY_MAX_CALLBACKS)
|
|
||||||
return -ENOENT;
|
|
||||||
|
|
||||||
rte_spinlock_lock(&callback_sl);
|
rte_spinlock_lock(&callback_sl);
|
||||||
|
new_callbacks = realloc(callbacks, sizeof(callbacks[0]) * (num_callbacks + 1));
|
||||||
|
if (new_callbacks == NULL) {
|
||||||
|
rte_spinlock_unlock(&callback_sl);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
callbacks = new_callbacks;
|
||||||
|
|
||||||
while (i < num_callbacks && strcmp(cmd, callbacks[i].cmd) > 0)
|
while (i < num_callbacks && strcmp(cmd, callbacks[i].cmd) > 0)
|
||||||
i++;
|
i++;
|
||||||
if (i != num_callbacks)
|
if (i != num_callbacks)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user