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
|
||||
* -EINVAL for invalid parameters failure.
|
||||
* @return
|
||||
* -ENOENT if max callbacks limit has been reached.
|
||||
* -ENOMEM for mem allocation failure.
|
||||
*/
|
||||
__rte_experimental
|
||||
int
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user