Use thread local storage for thread index
[vpp.git] / src / vnet / map / ip4_map_t.c
index 15974d8..5f2bcbf 100644 (file)
@@ -477,7 +477,7 @@ ip4_map_t_icmp (vlib_main_t * vm,
   n_left_from = frame->n_vectors;
   next_index = node->cached_next_index;
   vlib_combined_counter_main_t *cm = map_main.domain_counters;
-  u32 cpu_index = os_get_cpu_number ();
+  u32 thread_index = vlib_get_thread_index ();
 
   while (n_left_from > 0)
     {
@@ -520,7 +520,7 @@ ip4_map_t_icmp (vlib_main_t * vm,
          if (PREDICT_TRUE (error0 == MAP_ERROR_NONE))
            {
              vlib_increment_combined_counter (cm + MAP_DOMAIN_COUNTER_TX,
-                                              cpu_index,
+                                              thread_index,
                                               vnet_buffer (p0)->map_t.
                                               map_domain_index, 1, len0);
            }
@@ -1051,7 +1051,7 @@ ip4_map_t (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
   n_left_from = frame->n_vectors;
   next_index = node->cached_next_index;
   vlib_combined_counter_main_t *cm = map_main.domain_counters;
-  u32 cpu_index = os_get_cpu_number ();
+  u32 thread_index = vlib_get_thread_index ();
 
   while (n_left_from > 0)
     {
@@ -1100,10 +1100,12 @@ ip4_map_t (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
              next1 = IP4_MAPT_NEXT_DROP;
            }
 
-         d0 = ip4_map_get_domain (vnet_buffer (p0)->ip.adj_index[VLIB_TX],
-                                  &vnet_buffer (p0)->map_t.map_domain_index);
-         d1 = ip4_map_get_domain (vnet_buffer (p1)->ip.adj_index[VLIB_TX],
-                                  &vnet_buffer (p1)->map_t.map_domain_index);
+         vnet_buffer (p0)->map_t.map_domain_index =
+           vnet_buffer (p0)->ip.adj_index[VLIB_TX];
+         d0 = ip4_map_get_domain (vnet_buffer (p0)->map_t.map_domain_index);
+         vnet_buffer (p1)->map_t.map_domain_index =
+           vnet_buffer (p1)->ip.adj_index[VLIB_TX];
+         d1 = ip4_map_get_domain (vnet_buffer (p1)->map_t.map_domain_index);
 
          vnet_buffer (p0)->map_t.mtu = d0->mtu ? d0->mtu : ~0;
          vnet_buffer (p1)->map_t.mtu = d1->mtu ? d1->mtu : ~0;
@@ -1156,7 +1158,7 @@ ip4_map_t (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
              (error0 == MAP_ERROR_NONE && next0 != IP4_MAPT_NEXT_MAPT_ICMP))
            {
              vlib_increment_combined_counter (cm + MAP_DOMAIN_COUNTER_TX,
-                                              cpu_index,
+                                              thread_index,
                                               vnet_buffer (p0)->map_t.
                                               map_domain_index, 1,
                                               clib_net_to_host_u16 (ip40->
@@ -1167,7 +1169,7 @@ ip4_map_t (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
              (error1 == MAP_ERROR_NONE && next1 != IP4_MAPT_NEXT_MAPT_ICMP))
            {
              vlib_increment_combined_counter (cm + MAP_DOMAIN_COUNTER_TX,
-                                              cpu_index,
+                                              thread_index,
                                               vnet_buffer (p1)->map_t.
                                               map_domain_index, 1,
                                               clib_net_to_host_u16 (ip41->
@@ -1213,8 +1215,9 @@ ip4_map_t (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
              next0 = IP4_MAPT_NEXT_DROP;
            }
 
-         d0 = ip4_map_get_domain (vnet_buffer (p0)->ip.adj_index[VLIB_TX],
-                                  &vnet_buffer (p0)->map_t.map_domain_index);
+         vnet_buffer (p0)->map_t.map_domain_index =
+           vnet_buffer (p0)->ip.adj_index[VLIB_TX];
+         d0 = ip4_map_get_domain (vnet_buffer (p0)->map_t.map_domain_index);
 
          vnet_buffer (p0)->map_t.mtu = d0->mtu ? d0->mtu : ~0;
 
@@ -1249,7 +1252,7 @@ ip4_map_t (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
              (error0 == MAP_ERROR_NONE && next0 != IP4_MAPT_NEXT_MAPT_ICMP))
            {
              vlib_increment_combined_counter (cm + MAP_DOMAIN_COUNTER_TX,
-                                              cpu_index,
+                                              thread_index,
                                               vnet_buffer (p0)->map_t.
                                               map_domain_index, 1,
                                               clib_net_to_host_u16 (ip40->