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)
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;
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));
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,
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;
}