Memory zone's are inflexible and can not be destroyed. The size is fixed when initially created therefor QoS parameters could not be modified at run time, because table size for a subport might change. Signed-off-by: Stephen Hemminger --- a/lib/librte_sched/rte_sched.c 2013-08-02 03:41:05.000000000 -0700 +++ b/lib/librte_sched/rte_sched.c 2014-03-06 15:18:37.094154057 -0800 @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include @@ -613,7 +613,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 +622,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 +704,9 @@ rte_sched_port_free(struct rte_sched_por if (port == NULL){ return; } + rte_bitmap_free(port->bmp); - - return; + rte_free(port); } static void