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:
David Marchand 2021-05-06 10:27:54 +02:00
parent 2d2bf7de1a
commit 64307fad7d
2 changed files with 10 additions and 7 deletions

View File

@ -283,7 +283,7 @@ typedef void * (*handler)(void *sock_id);
* @return
* -EINVAL for invalid parameters failure.
* @return
* -ENOENT if max callbacks limit has been reached.
* -ENOMEM for mem allocation failure.
*/
__rte_experimental
int

View File

@ -27,9 +27,6 @@
#define MAX_OUTPUT_LEN (1024 * 16)
#define MAX_CONNECTIONS 10
/** Maximum number of telemetry callbacks. */
#define TELEMETRY_MAX_CALLBACKS 64
#ifndef RTE_EXEC_ENV_WINDOWS
static void *
client_handler(void *socket);
@ -62,7 +59,7 @@ static uint32_t logtype;
rte_log_ptr(RTE_LOG_ ## l, logtype, "TELEMETRY: " __VA_ARGS__)
/* 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 */
/* Used when accessing or modifying list of command callbacks */
static rte_spinlock_t callback_sl = RTE_SPINLOCK_INITIALIZER;
@ -73,15 +70,21 @@ static uint16_t v2_clients;
int
rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help)
{
struct cmd_callback *new_callbacks;
int i = 0;
if (strlen(cmd) >= MAX_CMD_LEN || fn == NULL || cmd[0] != '/'
|| strlen(help) >= MAX_HELP_LEN)
return -EINVAL;
if (num_callbacks >= TELEMETRY_MAX_CALLBACKS)
return -ENOENT;
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)
i++;
if (i != num_callbacks)