[dpdk-dev] [PATCH v3 4/5] test/ring: add functional tests for zero copy APIs

Ananyev, Konstantin konstantin.ananyev at intel.com
Fri Oct 23 16:20:25 CEST 2020


> 
> Add functional tests for zero copy APIs. Test enqueue/dequeue
> functions are created using the zero copy APIs to fit into
> the existing testing method.
> 
> Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli at arm.com>
> Reviewed-by: Dharmik Thakkar <dharmik.thakkar at arm.com>
> ---
>  app/test/test_ring.c | 196 +++++++++++++++++++++++++++++++++++++++++++
>  app/test/test_ring.h |  42 ++++++++++
>  2 files changed, 238 insertions(+)

....

> diff --git a/app/test/test_ring.h b/app/test/test_ring.h
> index 16697ee02..33c8a31fe 100644
> --- a/app/test/test_ring.h
> +++ b/app/test/test_ring.h
> @@ -53,6 +53,48 @@ test_ring_inc_ptr(void **obj, int esize, unsigned int n)
>  					(n * esize / sizeof(uint32_t)));
>  }
> 
> +static inline void
> +test_ring_mem_copy(void *dst, void * const *src, int esize, unsigned int num)
> +{
> +	size_t temp_sz;
> +
> +	temp_sz = num * sizeof(void *);
> +	if (esize != -1)
> +		temp_sz = esize * num;
> +
> +	memcpy(dst, src, temp_sz);
> +}
> +
> +/* Copy to the ring memory */
> +static inline void
> +test_ring_copy_to(struct rte_ring_zc_data *zcd, void * const *src, int esize,
> +	unsigned int num)
> +{
> +	test_ring_mem_copy(zcd->ptr1, src, esize, zcd->n1);
> +	if (zcd->n1 != num) {
> +		if (esize == -1)
> +			src = src + zcd->n1;
> +		else
> +			src = (void * const *)(((const uint32_t *)src) +
> +					(zcd->n1 * esize / sizeof(uint32_t)));

Why just not:
src = test_ring_inc_ptr(src, esize, zcd->n1);
?

Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>

> +		test_ring_mem_copy(zcd->ptr2, src,
> +					esize, num - zcd->n1);
> +	}
> +}
> +
> +/* Copy from the ring memory */
> +static inline void
> +test_ring_copy_from(struct rte_ring_zc_data *zcd, void *dst, int esize,
> +	unsigned int num)
> +{
> +	test_ring_mem_copy(dst, zcd->ptr1, esize, zcd->n1);
> +
> +	if (zcd->n1 != num) {
> +		dst = test_ring_inc_ptr(dst, esize, zcd->n1);
> +		test_ring_mem_copy(dst, zcd->ptr2, esize, num - zcd->n1);
> +	}
> +}
> +
>  static __rte_always_inline unsigned int
>  test_ring_enqueue(struct rte_ring *r, void **obj, int esize, unsigned int n,
>  			unsigned int api_type)
> --
> 2.17.1



More information about the dev mailing list