[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