avoid using thread local storage for thread index
[vpp.git] / src / vnet / devices / virtio / node.c
index f746ada..339c48c 100644 (file)
@@ -30,6 +30,8 @@
 #include <vnet/ethernet/ethernet.h>
 #include <vnet/devices/devices.h>
 #include <vnet/feature/feature.h>
+#include <vnet/ip/ip4_packet.h>
+#include <vnet/ip/ip6_packet.h>
 #include <vnet/devices/virtio/virtio.h>
 
 
@@ -81,10 +83,9 @@ static_always_inline void
 virtio_refill_vring (vlib_main_t * vm, virtio_vring_t * vring)
 {
   const int hdr_sz = sizeof (struct virtio_net_hdr_v1);
-  u16 used, next, avail, n_slots, n_alloc;
+  u16 used, next, avail, n_slots;
   u16 sz = vring->size;
   u16 mask = sz - 1;
-  int i;
 
   used = vring->desc_in_use;
 
@@ -94,14 +95,8 @@ virtio_refill_vring (vlib_main_t * vm, virtio_vring_t * vring)
   n_slots = sz - used;
   next = vring->desc_next;
   avail = vring->avail->idx;
-  n_alloc = vlib_buffer_alloc (vm, &vring->buffers[next], n_slots);
-
-  if (PREDICT_FALSE (n_alloc < n_slots))
-    n_slots = n_alloc;
-
-  i = next + n_slots - sz;
-  if (PREDICT_FALSE (i > 0))
-    clib_memcpy (vring->buffers, &vring->buffers[sz], i * sizeof (u32));
+  n_slots = vlib_buffer_alloc_to_ring (vm, vring->buffers, next, vring->size,
+                                      n_slots);
 
   while (n_slots)
     {
@@ -133,7 +128,7 @@ virtio_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                            vlib_frame_t * frame, virtio_if_t * vif, u16 qid)
 {
   vnet_main_t *vnm = vnet_get_main ();
-  u32 thread_index = vlib_get_thread_index ();
+  u32 thread_index = vm->thread_index;
   uword n_trace = vlib_get_trace_count (vm, node);
   virtio_vring_t *vring = vec_elt_at_index (vif->vrings, 0);
   u32 next_index = VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT;