X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fmemif%2Fnode.c;h=aef8ffbd0c2ca78f2e3003fd8fd70dfd90d6481f;hb=e10d167bfe8aec76cee138cbe33166ba89423c8c;hp=490c60356db47eb076b613661e25e952fde8dc51;hpb=e58041f242bf4bd120ecc9619b88348d80b94c17;p=vpp.git diff --git a/src/plugins/memif/node.c b/src/plugins/memif/node.c index 490c60356db..aef8ffbd0c2 100644 --- a/src/plugins/memif/node.c +++ b/src/plugins/memif/node.c @@ -180,12 +180,13 @@ memif_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, memif_main_t *mm = &memif_main; memif_ring_t *ring; memif_queue_t *mq; - u16 buffer_size = VLIB_BUFFER_DATA_SIZE; + u16 buffer_size = vlib_buffer_get_default_data_size (vm); uword n_trace = vlib_get_trace_count (vm, node); u16 nexts[MEMIF_RX_VECTOR_SZ], *next = nexts; u32 _to_next_bufs[MEMIF_RX_VECTOR_SZ], *to_next_bufs = _to_next_bufs, *bi; u32 n_rx_packets = 0, n_rx_bytes = 0; - u32 n_left, n_left_to_next, next_index; + u32 n_left, n_left_to_next; + u32 next_index = VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT; vlib_buffer_t *b0, *b1, *b2, *b3; u32 thread_index = vm->thread_index; memif_per_thread_data_t *ptd = vec_elt_at_index (mm->per_thread_data, @@ -280,7 +281,8 @@ memif_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, /* allocate free buffers */ vec_validate_aligned (ptd->buffers, n_buffers - 1, CLIB_CACHE_LINE_BYTES); - n_alloc = vlib_buffer_alloc (vm, ptd->buffers, n_buffers); + n_alloc = vlib_buffer_alloc_from_pool (vm, ptd->buffers, n_buffers, + mq->buffer_pool_index); if (PREDICT_FALSE (n_alloc != n_buffers)) { if (n_alloc) @@ -343,6 +345,8 @@ memif_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vnet_buffer (&ptd->buffer_template)->feature_arc_index = 0; ptd->buffer_template.current_data = start_offset; ptd->buffer_template.current_config_index = 0; + ptd->buffer_template.buffer_pool_index = mq->buffer_pool_index; + ptd->buffer_template.ref_count = 1; if (mode == MEMIF_INTERFACE_MODE_ETHERNET) { @@ -361,12 +365,13 @@ memif_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t *f; ethernet_input_frame_t *ef; nf = vlib_node_runtime_get_next_frame (vm, node, next_index); - f = vlib_get_frame (vm, nf->frame_index); + f = vlib_get_frame (vm, nf->frame); f->flags = ETH_INPUT_FRAME_F_SINGLE_SW_IF_IDX; ef = vlib_frame_scalar_args (f); ef->sw_if_index = mif->sw_if_index; ef->hw_if_index = mif->hw_if_index; + vlib_frame_no_append (f); } } @@ -380,10 +385,11 @@ memif_device_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, while (n_from >= 8) { - b0 = vlib_get_buffer (vm, po[4].first_buffer_vec_index); - b1 = vlib_get_buffer (vm, po[5].first_buffer_vec_index); - b2 = vlib_get_buffer (vm, po[6].first_buffer_vec_index); - b3 = vlib_get_buffer (vm, po[7].first_buffer_vec_index); + b0 = vlib_get_buffer (vm, ptd->buffers[po[0].first_buffer_vec_index]); + b1 = vlib_get_buffer (vm, ptd->buffers[po[1].first_buffer_vec_index]); + b2 = vlib_get_buffer (vm, ptd->buffers[po[2].first_buffer_vec_index]); + b3 = vlib_get_buffer (vm, ptd->buffers[po[3].first_buffer_vec_index]); + vlib_prefetch_buffer_header (b0, STORE); vlib_prefetch_buffer_header (b1, STORE); vlib_prefetch_buffer_header (b2, STORE); @@ -566,7 +572,7 @@ memif_device_input_zc_inline (vlib_main_t * vm, vlib_node_runtime_t * node, /* asume that somebody will want to add ethernet header on the packet so start with IP header at offset 14 */ start_offset = (mode == MEMIF_INTERFACE_MODE_IP) ? 14 : 0; - buffer_length = VLIB_BUFFER_DATA_SIZE - start_offset; + buffer_length = vlib_buffer_get_default_data_size (vm) - start_offset; cur_slot = mq->last_tail; last_slot = ring->tail; @@ -783,8 +789,9 @@ refill: clib_memset (dt, 0, sizeof (memif_desc_t)); dt->length = buffer_length; - n_alloc = vlib_buffer_alloc_to_ring (vm, mq->buffers, head & mask, - ring_size, n_slots); + n_alloc = vlib_buffer_alloc_to_ring_from_pool (vm, mq->buffers, head & mask, + ring_size, n_slots, + mq->buffer_pool_index); if (PREDICT_FALSE (n_alloc != n_slots)) { @@ -918,6 +925,7 @@ VLIB_NODE_FN (memif_input_node) (vlib_main_t * vm, /* *INDENT-OFF* */ VLIB_REGISTER_NODE (memif_input_node) = { .name = "memif-input", + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .sibling_of = "device-input", .format_trace = format_memif_input_trace, .type = VLIB_NODE_TYPE_INPUT,