Convert simple loops freeing mbufs one at a time into a single rte_pktmbuf_free_bulk() call.
Signed-off-by: Stephen Hemminger <[email protected]> --- devtools/cocci/free_bulk.cocci | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 devtools/cocci/free_bulk.cocci diff --git a/devtools/cocci/free_bulk.cocci b/devtools/cocci/free_bulk.cocci new file mode 100644 index 0000000000..51ce58400a --- /dev/null +++ b/devtools/cocci/free_bulk.cocci @@ -0,0 +1,57 @@ +// +// Replace simple loops freeing mbufs one-by-one with rte_pktmbuf_free_bulk(). +// +// rte_pktmbuf_free_bulk() handles NULL entries internally, so per-element +// NULL guards are folded in as well. Loops whose body does more than the +// free (clearing the slot, bookkeeping, etc.) are not matched. +// +@@ +expression A, N; +identifier i; +@@ + +( +- for (i = 0; i < N; i++) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +| +- for (i = 0; i < N; ++i) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +| +- for (i = 0; i < N; i++) +- if (A[i] != NULL) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +| +- for (i = 0; i < N; i++) +- if (A[i]) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +) + +@@ +expression A, N; +identifier i; +type T; +@@ + +( +- for (T i = 0; i < N; i++) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +| +- for (T i = 0; i < N; ++i) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +| +- for (T i = 0; i < N; i++) +- if (A[i] != NULL) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +| +- for (T i = 0; i < N; i++) +- if (A[i]) +- rte_pktmbuf_free(A[i]); ++ rte_pktmbuf_free_bulk(A, N); +) -- 2.53.0

