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 <andreas.schultz@travelping.com>
Signed-off-by: Dave Barach <dave@barachs.net>
diff --git a/src/vnet/devices/virtio/vhost_user_input.c b/src/vnet/devices/virtio/vhost_user_input.c
index 79c66ee..c4ea328 100644
--- a/src/vnet/devices/virtio/vhost_user_input.c
+++ b/src/vnet/devices/virtio/vhost_user_input.c
@@ -397,7 +397,7 @@
       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 156f975..2d850e9 100644
--- a/src/vnet/pg/input.c
+++ b/src/vnet/pg/input.c
@@ -1567,7 +1567,7 @@
 	  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 7349897..2ebdd59 100644
--- a/src/vnet/unix/gdb_funcs.c
+++ b/src/vnet/unix/gdb_funcs.c
@@ -111,8 +111,8 @@
 		     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);
 	  }
       }
   }