From c41559afe58d37b5a544767b99c45ade3aaf5f58 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Thu, 21 Feb 2019 20:24:54 +0100 Subject: Add no-append flag to vlib_frame_t Change-Id: I01c4f5755d579282773ac227b0bc24f8ddbb2bd1 Signed-off-by: Damjan Marion --- src/vlib/main.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/vlib/main.c') diff --git a/src/vlib/main.c b/src/vlib/main.c index ae78c430134..049d80d9d17 100644 --- a/src/vlib/main.c +++ b/src/vlib/main.c @@ -233,7 +233,7 @@ vlib_frame_free (vlib_main_t * vm, vlib_node_runtime_t * r, vlib_frame_t * f) ASSERT (nf->frame_index != frame_index); } - f->frame_flags &= ~VLIB_FRAME_IS_ALLOCATED; + f->frame_flags &= ~(VLIB_FRAME_IS_ALLOCATED | VLIB_FRAME_NO_APPEND); vec_add1 (fs->free_frame_indices, frame_index); ASSERT (fs->n_alloc_frames > 0); @@ -387,9 +387,11 @@ vlib_get_next_frame_internal (vlib_main_t * vm, f->flags = 0; } - /* Allocate new frame if current one is already full. */ + /* Allocate new frame if current one is marked as no-append or + it is already full. */ n_used = f->n_vectors; - if (n_used >= VLIB_FRAME_SIZE || (allocate_new_next_frame && n_used > 0)) + if (n_used >= VLIB_FRAME_SIZE || (allocate_new_next_frame && n_used > 0) || + (f->frame_flags & VLIB_FRAME_NO_APPEND)) { /* Old frame may need to be freed after dispatch, since we'll have two redundant frames from node -> next node. */ @@ -1347,7 +1349,7 @@ dispatch_pending_node (vlib_main_t * vm, uword pending_frame_index, VLIB_NODE_STATE_POLLING, f, last_time_stamp); - f->frame_flags &= ~VLIB_FRAME_PENDING; + f->frame_flags &= ~(VLIB_FRAME_PENDING | VLIB_FRAME_NO_APPEND); /* Frame is ready to be used again, so restore it. */ if (restore_frame_index != ~0) -- cgit 1.2.3-korg