'rte_pie_rt_data_init(NULL)' is not expected, and it's ought to fail when this happen. The malloc inside the function didn't work. So remove the malloc otherwise will lead to a memory leak.
Fixes: 44c730b0e37971 ("sched: add PIE based congestion management") Signed-off-by: Weiguo Li <liw...@foxmail.com> Acked-by: Stephen Hemminger <step...@networkplumber.org> Acked-by: Cristian Dumitrescu <cristian.dumitre...@intel.com> --- v5: * fix compile error v4: * replace all assignments to zero by a memset. v3: * fix typo v2: * revise according to Stephen's suggestion. --- lib/sched/rte_pie.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/lib/sched/rte_pie.c b/lib/sched/rte_pie.c index cdb7bab697..d37b79e6dd 100644 --- a/lib/sched/rte_pie.c +++ b/lib/sched/rte_pie.c @@ -3,6 +3,7 @@ */ #include <stdlib.h> +#include <string.h> #include "rte_pie.h" #include <rte_malloc.h> @@ -15,26 +16,11 @@ int rte_pie_rt_data_init(struct rte_pie *pie) { if (pie == NULL) { - /* Allocate memory to use the PIE data structure */ - pie = rte_malloc(NULL, sizeof(struct rte_pie), 0); - - if (pie == NULL) - RTE_LOG(ERR, SCHED, "%s: Memory allocation fails\n", __func__); - - return -1; + RTE_LOG(ERR, SCHED, "%s: Invalid addr for pie\n", __func__); + return -EINVAL; } - pie->active = 0; - pie->in_measurement = 0; - pie->departed_bytes_count = 0; - pie->start_measurement = 0; - pie->last_measurement = 0; - pie->qlen = 0; - pie->avg_dq_time = 0; - pie->burst_allowance = 0; - pie->qdelay_old = 0; - pie->drop_prob = 0; - pie->accu_prob = 0; + memset(pie, 0, sizeof(*pie)); return 0; } -- 2.25.1