From 58b2eb1af562c292feb6d3cdce4656746e61da75 Mon Sep 17 00:00:00 2001 From: Andreas Schultz Date: Mon, 15 Jul 2019 15:40:56 +0200 Subject: vlib: convert frame_index into real pointers The fast path almost always has to deal with the real pointers. Deriving the frame pointer from a frame_index requires a load of the 32bit frame_index from memory, another 64bit load of the heap base pointer and some calculations. Lets store the full pointer instead and do a single 64bit load only. This helps avoiding problems when the heap is grown and frames are allocated below vm->heap_aligned_base. Type: refactor Change-Id: Ifa6e6e984aafe1e2755bff80f0a4dfcddee3623c Signed-off-by: Andreas Schultz Signed-off-by: Dave Barach --- src/vnet/devices/virtio/vhost_user_input.c | 2 +- src/vnet/pg/input.c | 2 +- src/vnet/unix/gdb_funcs.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/vnet') diff --git a/src/vnet/devices/virtio/vhost_user_input.c b/src/vnet/devices/virtio/vhost_user_input.c index 79c66eecd90..c4ea32814b3 100644 --- a/src/vnet/devices/virtio/vhost_user_input.c +++ b/src/vnet/devices/virtio/vhost_user_input.c @@ -397,7 +397,7 @@ vhost_user_if_input (vlib_main_t * vm, vlib_frame_t *f; ethernet_input_frame_t *ef; nf = vlib_node_runtime_get_next_frame (vm, node, next_index); - f = vlib_get_frame (vm, nf->frame_index); + f = vlib_get_frame (vm, nf->frame); f->flags = ETH_INPUT_FRAME_F_SINGLE_SW_IF_IDX; ef = vlib_frame_scalar_args (f); diff --git a/src/vnet/pg/input.c b/src/vnet/pg/input.c index 156f97545c2..2d850e939b0 100644 --- a/src/vnet/pg/input.c +++ b/src/vnet/pg/input.c @@ -1567,7 +1567,7 @@ pg_generate_packets (vlib_node_runtime_t * node, pg_interface_t *pi; vlib_get_new_next_frame (vm, node, next_index, to_next, n_left); nf = vlib_node_runtime_get_next_frame (vm, node, next_index); - f = vlib_get_frame (vm, nf->frame_index); + f = vlib_get_frame (vm, nf->frame); f->flags = ETH_INPUT_FRAME_F_SINGLE_SW_IF_IDX; ef = vlib_frame_scalar_args (f); diff --git a/src/vnet/unix/gdb_funcs.c b/src/vnet/unix/gdb_funcs.c index 7349897d35d..2ebdd5960ca 100644 --- a/src/vnet/unix/gdb_funcs.c +++ b/src/vnet/unix/gdb_funcs.c @@ -111,8 +111,8 @@ vlib_dump_frame_ownership (void) nm->nodes[this_node_runtime->node_index]->name, index - first_nf_index, nm->nodes[owned_runtime->node_index]->name); - fformat (stderr, " nf index %d nf->frame_index %d\n", - nf - vm->node_main.next_frames, nf->frame_index); + fformat (stderr, " nf index %d nf->frame %p\n", + nf - vm->node_main.next_frames, nf->frame); } } } -- cgit 1.2.3-korg