The existing rte scheduler can only be safely configured once per port because a memory zone has a fixed size once it is created and can never be freed or change in size. This patch changes the scheduler to use rte_malloc instead. This allows for a port to be reconfigured by doing rte_sched_port_free followed rte_sched_port_config. The patch also removes the now unused name parameter from the port parameters structure. Signed-off-by: Stephen Hemminger --- app/test/test_sched.c | 2 -- lib/librte_sched/rte_sched.c | 29 ++++++----------------------- 2 files changed, 6 insertions(+), 25 deletions(-) --- a/lib/librte_sched/rte_sched.c 2014-05-14 09:01:15.085164140 -0700 +++ b/lib/librte_sched/rte_sched.c 2014-05-14 09:05:16.078491725 -0700 @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include @@ -306,11 +306,6 @@ rte_sched_port_check_params(struct rte_s return -1; } - /* name */ - if (params->name == NULL) { - return -2; - } - /* socket */ if ((params->socket < 0) || (params->socket >= RTE_MAX_NUMA_NODES)) { return -3; @@ -613,7 +608,6 @@ struct rte_sched_port * rte_sched_port_config(struct rte_sched_port_params *params) { struct rte_sched_port *port = NULL; - const struct rte_memzone *mz = NULL; uint32_t mem_size, bmp_mem_size, n_queues_per_port, i; /* Check user parameters. Determine the amount of memory to allocate */ @@ -623,21 +617,10 @@ rte_sched_port_config(struct rte_sched_p } /* Allocate memory to store the data structures */ - mz = rte_memzone_lookup(params->name); - if (mz) { - /* Use existing memzone, provided that its size is big enough */ - if (mz->len < mem_size) { - return NULL; - } - } else { - /* Create new memzone */ - mz = rte_memzone_reserve(params->name, mem_size, params->socket, 0); - if (mz == NULL) { - return NULL; - } + port = rte_zmalloc("qos_params", mem_size, CACHE_LINE_SIZE); + if (port == NULL) { + return NULL; } - memset(mz->addr, 0, mem_size); - port = (struct rte_sched_port *) mz->addr; /* User parameters */ port->n_subports_per_port = params->n_subports_per_port; @@ -716,9 +699,9 @@ rte_sched_port_free(struct rte_sched_por if (port == NULL){ return; } + rte_bitmap_free(port->bmp); - - return; + rte_free(port); } static void --- a/app/test/test_sched.c 2014-05-14 09:08:34.067612152 -0700 +++ b/app/test/test_sched.c 2014-05-14 09:08:48.723695881 -0700 @@ -83,7 +83,6 @@ static struct rte_sched_pipe_params pipe }; static struct rte_sched_port_params port_param = { - .name = "port_0", .socket = 0, /* computed */ .rate = 0, /* computed */ .mtu = 1522, @@ -172,7 +171,6 @@ test_sched(void) port_param.socket = 0; port_param.rate = (uint64_t) 10000 * 1000 * 1000 / 8; - port_param.name = "port_0"; port = rte_sched_port_config(&port_param); VERIFY(port != NULL, "Error config sched port\n");