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

Honnappa Nagarahalli Honnappa.Nagarahalli at arm.com
Sat Oct 24 00:47:12 CEST 2020


<snip>

> >
> > 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); ?
test_enqdeq_impl requires the enqueue APIs to have 'const' pointer for data to be copied to the ring. Because of this, the 'src' parameter needs to be a 'const'.
If I change test_ring_inc_ptr to take const parameter, a lot of things in test_ring.c break as test_ring_inc_ptr is called with lot of non-const pointers.

> 
> 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