On Mon, Jun 22, 2026 at 08:36:23AM +0530, Tejasree Kondoj wrote: > Add test cases to verify zero fill and one fill > > Signed-off-by: Vidya Sagar Velumuri <[email protected]> > --- > app/test/test.h | 4 +++ > app/test/test_dmadev.c | 57 ++++++++++++++++++++++++------------------ > 2 files changed, 37 insertions(+), 24 deletions(-) >
Not a bad idea. One piece of feedback inline below. Otherwise: Acked-by: Bruce Richardson <[email protected]> > diff --git a/app/test/test.h b/app/test/test.h > index 1f12fc5397..5fc2d7d048 100644 > --- a/app/test/test.h > +++ b/app/test/test.h > @@ -28,6 +28,10 @@ > > #include <rte_test.h> > > +#ifndef ARRAY_SIZE > +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) > +#endif > + > #define TEST_ASSERT RTE_TEST_ASSERT > > #define TEST_ASSERT_EQUAL RTE_TEST_ASSERT_EQUAL > diff --git a/app/test/test_dmadev.c b/app/test/test_dmadev.c > index b30f2214e5..d4299e501d 100644 > --- a/app/test/test_dmadev.c > +++ b/app/test/test_dmadev.c > @@ -931,42 +931,51 @@ test_completion_handling(int16_t dev_id, uint16_t vchan) > static int > test_enqueue_fill(int16_t dev_id, uint16_t vchan) > { > + uint64_t pattern[3] = {0x0, 0xfedcba9876543210, 0xffffffffffffffff}; > const unsigned int lengths[] = {8, 64, 1024, 50, 100, 89}; > + unsigned int i, j, k; > struct rte_mbuf *dst; > char *dst_data; > - uint64_t pattern = 0xfedcba9876543210; > - unsigned int i, j; > > dst = rte_pktmbuf_alloc(pool); > if (dst == NULL) > ERR_RETURN("Failed to allocate mbuf\n"); > dst_data = rte_pktmbuf_mtod(dst, char *); > > - for (i = 0; i < RTE_DIM(lengths); i++) { > - /* reset dst_data */ > - memset(dst_data, 0, rte_pktmbuf_data_len(dst)); > + for (k = 0; k < ARRAY_SIZE(pattern); k++) { > + for (i = 0; i < RTE_DIM(lengths); i++) { > + /* reset dst_data */ > + memset(dst_data, 0, rte_pktmbuf_data_len(dst)); > + I don't think we should reset between each run, because of the zero-fill operation, which we cannot detect if it runs properly. I'd suggest therefore: * zero the buffer outside the main loop * Run the non-zero patterns first, checking each one, without reset * Do the zero-pattern at the end, so we can see that zeroing works. > + /* perform the fill operation */ > + int id = rte_dma_fill(dev_id, vchan, pattern[k], > + rte_pktmbuf_iova(dst), lengths[i], > RTE_DMA_OP_FLAG_SUBMIT); > + if (id < 0) { > + if (id == -ENOTSUP) { > + rte_pktmbuf_free(dst); > + return 0; > + } > + ERR_RETURN("Error with rte_dma_fill\n"); > + } > + await_hw(dev_id, vchan); > > - /* perform the fill operation */ > - int id = rte_dma_fill(dev_id, vchan, pattern, > - rte_pktmbuf_iova(dst), lengths[i], > RTE_DMA_OP_FLAG_SUBMIT); > - if (id < 0) > - ERR_RETURN("Error with rte_dma_fill\n"); > - await_hw(dev_id, vchan); > + if (rte_dma_completed(dev_id, vchan, 1, NULL, NULL) != > 1) > + ERR_RETURN("Error: fill operation failed > (length: %u)\n", > + lengths[i]); > + /* check the data from the fill operation is correct */ > + for (j = 0; j < lengths[i]; j++) { > + char pat_byte = ((char *)&pattern[k])[j % 8]; > > - if (rte_dma_completed(dev_id, vchan, 1, NULL, NULL) != 1) > - ERR_RETURN("Error: fill operation failed (length: > %u)\n", lengths[i]); > - /* check the data from the fill operation is correct */ > - for (j = 0; j < lengths[i]; j++) { > - char pat_byte = ((char *)&pattern)[j % 8]; > - if (dst_data[j] != pat_byte) > - ERR_RETURN("Error with fill operation (lengths > = %u): got (%x), not (%x)\n", > - lengths[i], dst_data[j], > pat_byte); > + if (dst_data[j] != pat_byte) > + ERR_RETURN("Error with fill operation > (lengths = %u): got (%x), not (%x)\n", > + lengths[i], > dst_data[j], pat_byte); > + } > + /* check that the data after the fill operation was not > written to */ > + for (; j < rte_pktmbuf_data_len(dst); j++) > + if (dst_data[j] != 0) > + ERR_RETURN("Error, fill operation wrote > too far (lengths = %u): got (%x), not (%x)\n", > + lengths[i], > dst_data[j], 0); > } > - /* check that the data after the fill operation was not written > to */ > - for (; j < rte_pktmbuf_data_len(dst); j++) > - if (dst_data[j] != 0) > - ERR_RETURN("Error, fill operation wrote too far > (lengths = %u): got (%x), not (%x)\n", > - lengths[i], dst_data[j], 0); > } > > rte_pktmbuf_free(dst); > -- > 2.34.1 >

