[PATCH 01/20] devtools/cocci: add transform for rte_pktmbuf_free_bulk
Stephen Hemminger
stephen at networkplumber.org
Fri May 8 22:33:22 CEST 2026
Convert simple loops freeing mbufs one at a time into a
single rte_pktmbuf_free_bulk() call.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
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
More information about the dev
mailing list