Remove c-11 memcpy checks from perf-critical code
[vpp.git] / src / vnet / devices / netmap / device.c
index 2152824..b14bff4 100644 (file)
@@ -63,7 +63,7 @@ format_netmap_device (u8 * s, va_list * args)
   int verbose = va_arg (*args, int);
   netmap_main_t *nm = &netmap_main;
   netmap_if_t *nif = vec_elt_at_index (nm->interfaces, dev_instance);
-  uword indent = format_get_indent (s);
+  u32 indent = format_get_indent (s);
 
   s = format (s, "NETMAP interface");
   if (verbose)
@@ -98,18 +98,14 @@ netmap_interface_tx (vlib_main_t * vm,
                     vlib_node_runtime_t * node, vlib_frame_t * frame)
 {
   netmap_main_t *nm = &netmap_main;
-  u32 *buffers = vlib_frame_args (frame);
+  u32 *buffers = vlib_frame_vector_args (frame);
   u32 n_left = frame->n_vectors;
   f64 const time_constant = 1e3;
   vnet_interface_output_runtime_t *rd = (void *) node->runtime_data;
   netmap_if_t *nif = pool_elt_at_index (nm->interfaces, rd->dev_instance);
   int cur_ring;
 
-  if (PREDICT_FALSE (nif->lockp != 0))
-    {
-      while (__sync_lock_test_and_set (nif->lockp, 1))
-       ;
-    }
+  clib_spinlock_lock_if_init (&nif->lockp);
 
   cur_ring = nif->first_tx_ring;
 
@@ -147,8 +143,8 @@ netmap_interface_tx (vlib_main_t * vm,
              b0 = vlib_get_buffer (vm, bi);
              len = b0->current_length;
              /* memcpy */
-             clib_memcpy ((u8 *) NETMAP_BUF (ring, slot->buf_idx) + offset,
-                          vlib_buffer_get_current (b0), len);
+             clib_memcpy_fast ((u8 *) NETMAP_BUF (ring, slot->buf_idx) +
+                               offset, vlib_buffer_get_current (b0), len);
              offset += len;
            }
          while ((bi = b0->next_buffer));
@@ -165,8 +161,7 @@ netmap_interface_tx (vlib_main_t * vm,
   if (n_left < frame->n_vectors)
     ioctl (nif->fd, NIOCTXSYNC, NULL);
 
-  if (PREDICT_FALSE (nif->lockp != 0))
-    *nif->lockp = 0;
+  clib_spinlock_unlock_if_init (&nif->lockp);
 
   if (n_left)
     vlib_error_count (vm, node->node_index,
@@ -174,7 +169,7 @@ netmap_interface_tx (vlib_main_t * vm,
                       frame->n_vectors ? NETMAP_TX_ERROR_PENDING_MSGS :
                       NETMAP_TX_ERROR_NO_FREE_SLOTS), n_left);
 
-  vlib_buffer_free (vm, vlib_frame_args (frame), frame->n_vectors);
+  vlib_buffer_free (vm, vlib_frame_vector_args (frame), frame->n_vectors);
   return frame->n_vectors;
 }