X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Favf%2Foutput.c;h=e4b4228c71de3b8ba277cb35643dc3231169075c;hb=ffba3c3;hp=a094050d6aca3135fbf21642019133f75fc41334;hpb=fcf9497d3bcd34b8b5090ee053575296cf56c5e6;p=vpp.git diff --git a/src/plugins/avf/output.c b/src/plugins/avf/output.c index a094050d6ac..e4b4228c71d 100644 --- a/src/plugins/avf/output.c +++ b/src/plugins/avf/output.c @@ -45,7 +45,7 @@ VNET_DEVICE_CLASS_TX_FN (avf_device_class) (vlib_main_t * vm, u8 qid = thread_index; avf_txq_t *txq = vec_elt_at_index (ad->txqs, qid % ad->num_queue_pairs); avf_tx_desc_t *d0, *d1, *d2, *d3; - u32 *buffers = vlib_frame_args (frame); + u32 *buffers = vlib_frame_vector_args (frame); u32 bi0, bi1, bi2, bi3; u16 n_left, n_left_to_send, n_in_batch; vlib_buffer_t *b0, *b1, *b2, *b3; @@ -61,7 +61,7 @@ VNET_DEVICE_CLASS_TX_FN (avf_device_class) (vlib_main_t * vm, next = txq->next; retry: - /* release cosumed bufs */ + /* release consumed bufs */ if (txq->n_enqueued) { u16 first, slot, n_free = 0; @@ -118,16 +118,21 @@ retry: b2 = vlib_get_buffer (vm, bi2); b3 = vlib_get_buffer (vm, bi3); -#if 0 - d->qword[0] = vlib_get_buffer_data_physical_address (vm, bi0) + - b0->current_data; -#else - d0->qword[0] = pointer_to_uword (b0->data) + b0->current_data; - d1->qword[0] = pointer_to_uword (b1->data) + b1->current_data; - d2->qword[0] = pointer_to_uword (b2->data) + b2->current_data; - d3->qword[0] = pointer_to_uword (b3->data) + b3->current_data; + if (ad->flags & AVF_DEVICE_F_VA_DMA) + { + d0->qword[0] = vlib_buffer_get_current_va (b0); + d1->qword[0] = vlib_buffer_get_current_va (b1); + d2->qword[0] = vlib_buffer_get_current_va (b2); + d3->qword[0] = vlib_buffer_get_current_va (b3); + } + else + { + d0->qword[0] = vlib_buffer_get_current_pa (vm, b0); + d1->qword[0] = vlib_buffer_get_current_pa (vm, b1); + d2->qword[0] = vlib_buffer_get_current_pa (vm, b2); + d3->qword[0] = vlib_buffer_get_current_pa (vm, b3); + } -#endif d0->qword[1] = ((u64) b0->current_length) << 34 | bits; d1->qword[1] = ((u64) b1->current_length) << 34 | bits; d2->qword[1] = ((u64) b2->current_length) << 34 | bits; @@ -146,12 +151,11 @@ retry: txq->bufs[next] = bi0; b0 = vlib_get_buffer (vm, bi0); -#if 0 - d->qword[0] = vlib_get_buffer_data_physical_address (vm, bi0) + - b0->current_data; -#else - d0->qword[0] = pointer_to_uword (b0->data) + b0->current_data; -#endif + if (ad->flags & AVF_DEVICE_F_VA_DMA) + d0->qword[0] = vlib_buffer_get_current_va (b0); + else + d0->qword[0] = vlib_buffer_get_current_pa (vm, b0); + d0->qword[1] = (((u64) b0->current_length) << 34) | bits; next = (next + 1) & mask;