Rearrange prefetching in ipsec_output_inline 16/19116/2
authorVratko Polak <vrpolak@cisco.com>
Tue, 23 Apr 2019 13:52:28 +0000 (15:52 +0200)
committerDamjan Marion <dmarion@me.com>
Wed, 24 Apr 2019 11:29:56 +0000 (11:29 +0000)
Change-Id: I6151e57643ebed42f51b795980db2c52084295ab
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
src/vnet/ipsec/ipsec_output.c

index 47eeb46..a37e8c2 100644 (file)
@@ -205,18 +205,18 @@ ipsec_output_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
       u64 bytes0;
 
       bi0 = from[0];
-      bi1 = from[1];
       b0 = vlib_get_buffer (vm, bi0);
-      b1 = vlib_get_buffer (vm, bi1);
-      sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_TX];
-      iph_offset = vnet_buffer (b0)->ip.save_rewrite_length;
-      ip0 = (ip4_header_t *) ((u8 *) vlib_buffer_get_current (b0)
-                             + iph_offset);
       if (n_left_from > 1)
        {
+         bi1 = from[1];
+         b1 = vlib_get_buffer (vm, bi1);
          CLIB_PREFETCH (b1, CLIB_CACHE_LINE_BYTES * 2, STORE);
          vlib_prefetch_buffer_data (b1, LOAD);
        }
+      sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_TX];
+      iph_offset = vnet_buffer (b0)->ip.save_rewrite_length;
+      ip0 = (ip4_header_t *) ((u8 *) vlib_buffer_get_current (b0)
+                             + iph_offset);
 
       /* lookup for SPD only if sw_if_index is changed */
       if (PREDICT_FALSE (last_sw_if_index != sw_if_index0))