diff options
author | Damjan Marion <damarion@cisco.com> | 2020-03-02 19:02:15 +0100 |
---|---|---|
committer | Damjan Marion <damarion@cisco.com> | 2020-03-02 19:27:35 +0100 |
commit | b9250a9eee1dc259f11bdb9bb8c881da56b52895 (patch) | |
tree | a49ddbaa3d1b2d752fd26fdc5a6c8eb5e9704ab0 /src/vlib | |
parent | 599d088804085c88beda0026fa0984f8177d31c0 (diff) |
rdma: improve rx loop
Type: improvement
Change-Id: If81847bc0c92d167ce03e1e94a2f8e18f8154af2
Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'src/vlib')
-rw-r--r-- | src/vlib/buffer_funcs.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/vlib/buffer_funcs.h b/src/vlib/buffer_funcs.h index 58abdb18841..07f270c8c23 100644 --- a/src/vlib/buffer_funcs.h +++ b/src/vlib/buffer_funcs.h @@ -140,6 +140,24 @@ vlib_buffer_copy_indices (u32 * dst, u32 * src, u32 n_indices) } } +always_inline void +vlib_buffer_copy_indices_from_ring (u32 * dst, 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_copy_indices (dst, ring + start, n_buffers); + } + else + { + u32 n = ring_size - start; + vlib_buffer_copy_indices (dst, ring + start, n); + vlib_buffer_copy_indices (dst + n, ring, n_buffers - n); + } +} + STATIC_ASSERT_OFFSET_OF (vlib_buffer_t, template_end, 64); static_always_inline void vlib_buffer_copy_template (vlib_buffer_t * b, vlib_buffer_t * bt) |