From a373149eef0323cb092cc78761871cd1f2bfc1e2 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Sun, 25 Feb 2018 22:50:39 +0100 Subject: [PATCH] vlib: add vlib_buffer_free_from_ring Change-Id: I63f7b14cd63eac9e64cace5d941190096ad148dc Signed-off-by: Damjan Marion --- src/vlib/buffer_funcs.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/vlib/buffer_funcs.h b/src/vlib/buffer_funcs.h index cda44d6aa20..6ea804f8ec4 100644 --- a/src/vlib/buffer_funcs.h +++ b/src/vlib/buffer_funcs.h @@ -433,6 +433,32 @@ vlib_buffer_free_one (vlib_main_t * vm, u32 buffer_index) vlib_buffer_free (vm, &buffer_index, /* n_buffers */ 1); } +/** \brief Free buffers from ring + + @param vm - (vlib_main_t *) vlib main data structure pointer + @param buffers - (u32 * ) buffer index ring + @param start - (u32) first slot in the ring + @param ring_size - (u32) ring size + @param n_buffers - (u32) number of buffers +*/ +always_inline void +vlib_buffer_free_from_ring (vlib_main_t * vm, u32 * ring, u32 start, + u32 ring_size, u32 n_buffers) +{ + ASSERT (n_buffers <= ring_size); + + if (PREDICT_TRUE (start + n_buffers <= ring_size)) + { + vlib_buffer_free (vm, ring + start, n_buffers); + } + else + { + vlib_buffer_free (vm, ring + start, ring_size - start); + vlib_buffer_free (vm, ring, n_buffers - (ring_size - start)); + } +} + + /* Add/delete buffer free lists. */ vlib_buffer_free_list_index_t vlib_buffer_create_free_list (vlib_main_t * vm, u32 n_data_bytes, -- 2.16.6