All of lore.kernel.org
 help / color / mirror / Atom feed
From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
To: Feifei Wang <Feifei.Wang2@arm.com>,
	Konstantin Ananyev <konstantin.ananyev@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, nd <nd@arm.com>,
	Feifei Wang <Feifei.Wang2@arm.com>,
	Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>,
	nd <nd@arm.com>
Subject: Re: [dpdk-dev] [PATCH v3 1/6] test/ring: add check to validate dequeued objects
Date: Mon, 14 Sep 2020 04:26:43 +0000	[thread overview]
Message-ID: <DBAPR08MB58143C008A6B5471AE2E0F2098230@DBAPR08MB5814.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <20200911161002.19816-2-feifei.wang2@arm.com>

<snip>

> 
> Add check in test_ring_basic_ex and test_ring_with_exact_size for single
> element enqueue and dequeue operations to validate the dequeued objects.
> 
> Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
> Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> Reviewed-by: Phil Yang <phil.yang@arm.com>
> Reviewed-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
Looks good.
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>

> ---
>  app/test/test_ring.c | 135 +++++++++++++++++++++++++++++++------------
>  1 file changed, 99 insertions(+), 36 deletions(-)
> 
> diff --git a/app/test/test_ring.c b/app/test/test_ring.c index
> 0ae97d341..6e48cc0b1 100644
> --- a/app/test/test_ring.c
> +++ b/app/test/test_ring.c
> @@ -780,15 +780,9 @@ test_ring_basic_ex(void)
>  	int ret = -1;
>  	unsigned int i, j;
>  	struct rte_ring *rp = NULL;
> -	void *obj = NULL;
> +	void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
> 
>  	for (i = 0; i < RTE_DIM(esize); i++) {
> -		obj = test_ring_calloc(RING_SIZE, esize[i]);
> -		if (obj == NULL) {
> -			printf("%s: failed to alloc memory\n", __func__);
> -			goto fail_test;
> -		}
> -
>  		rp = test_ring_create("test_ring_basic_ex", esize[i], RING_SIZE,
>  					SOCKET_ID_ANY,
>  					RING_F_SP_ENQ | RING_F_SC_DEQ);
> @@ -797,6 +791,23 @@ test_ring_basic_ex(void)
>  			goto fail_test;
>  		}
> 
> +		/* alloc dummy object pointers */
> +		src = test_ring_calloc(RING_SIZE, esize[i]);
> +		if (src == NULL) {
> +			printf("%s: failed to alloc src memory\n", __func__);
> +			goto fail_test;
> +		}
> +		test_ring_mem_init(src, RING_SIZE, esize[i]);
> +		cur_src = src;
> +
> +		/* alloc some room for copied objects */
> +		dst = test_ring_calloc(RING_SIZE, esize[i]);
> +		if (dst == NULL) {
> +			printf("%s: failed to alloc dst memory\n", __func__);
> +			goto fail_test;
> +		}
> +		cur_dst = dst;
> +
>  		if (rte_ring_lookup("test_ring_basic_ex") != rp) {
>  			printf("%s: failed to find ring\n", __func__);
>  			goto fail_test;
> @@ -812,8 +823,9 @@ test_ring_basic_ex(void)
>  			rte_ring_free_count(rp));
> 
>  		for (j = 0; j < RING_SIZE; j++) {
> -			test_ring_enqueue(rp, obj, esize[i], 1,
> +			test_ring_enqueue(rp, cur_src, esize[i], 1,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_SINGLE);
> +			cur_src = test_ring_inc_ptr(cur_src, esize[i], 1);
>  		}
> 
>  		if (rte_ring_full(rp) != 1) {
> @@ -823,8 +835,9 @@ test_ring_basic_ex(void)
>  		}
> 
>  		for (j = 0; j < RING_SIZE; j++) {
> -			test_ring_dequeue(rp, obj, esize[i], 1,
> +			test_ring_dequeue(rp, cur_dst, esize[i], 1,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_SINGLE);
> +			cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 1);
>  		}
> 
>  		if (rte_ring_empty(rp) != 1) {
> @@ -833,52 +846,80 @@ test_ring_basic_ex(void)
>  			goto fail_test;
>  		}
> 
> +		/* check data */
> +		if (memcmp(src, dst, cur_src - src)) {
> +			rte_hexdump(stdout, "src", src, cur_src - src);
> +			rte_hexdump(stdout, "dst", dst, cur_dst - dst);
> +			printf("data after dequeue is not the same\n");
> +			goto fail_test;
> +		}
> +
>  		/* Following tests use the configured flags to decide
>  		 * SP/SC or MP/MC.
>  		 */
> +		/* reset memory of dst */
> +		memset(dst, 0, RTE_PTR_DIFF(cur_src, src));
> +
> +		/* reset cur_src and cur_dst */
> +		cur_src = src;
> +		cur_dst = dst;
> +
>  		/* Covering the ring burst operation */
> -		ret = test_ring_enqueue(rp, obj, esize[i], 2,
> +		ret = test_ring_enqueue(rp, cur_src, esize[i], 2,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_BURST);
>  		if (ret != 2) {
>  			printf("%s: rte_ring_enqueue_burst fails\n", __func__);
>  			goto fail_test;
>  		}
> +		cur_src = test_ring_inc_ptr(cur_src, esize[i], 2);
> 
> -		ret = test_ring_dequeue(rp, obj, esize[i], 2,
> +		ret = test_ring_dequeue(rp, cur_dst, esize[i], 2,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_BURST);
>  		if (ret != 2) {
>  			printf("%s: rte_ring_dequeue_burst fails\n", __func__);
>  			goto fail_test;
>  		}
> +		cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2);
> 
>  		/* Covering the ring bulk operation */
> -		ret = test_ring_enqueue(rp, obj, esize[i], 2,
> +		ret = test_ring_enqueue(rp, cur_src, esize[i], 2,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_BULK);
>  		if (ret != 2) {
>  			printf("%s: rte_ring_enqueue_bulk fails\n", __func__);
>  			goto fail_test;
>  		}
> +		cur_src = test_ring_inc_ptr(cur_src, esize[i], 2);
> 
> -		ret = test_ring_dequeue(rp, obj, esize[i], 2,
> +		ret = test_ring_dequeue(rp, cur_dst, esize[i], 2,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_BULK);
>  		if (ret != 2) {
>  			printf("%s: rte_ring_dequeue_bulk fails\n", __func__);
>  			goto fail_test;
>  		}
> +		cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2);
> +
> +		/* check data */
> +		if (memcmp(src, dst, cur_dst - dst)) {
> +			rte_hexdump(stdout, "src", src, cur_src - src);
> +			rte_hexdump(stdout, "dst", dst, cur_dst - dst);
> +			printf("data after dequeue is not the same\n");
> +			goto fail_test;
> +		}
> 
>  		rte_ring_free(rp);
> -		rte_free(obj);
> +		rte_free(src);
> +		rte_free(dst);
>  		rp = NULL;
> -		obj = NULL;
> +		src = NULL;
> +		dst = NULL;
>  	}
> 
>  	return 0;
> 
>  fail_test:
>  	rte_ring_free(rp);
> -	if (obj != NULL)
> -		rte_free(obj);
> -
> +	rte_free(src);
> +	rte_free(dst);
>  	return -1;
>  }
> 
> @@ -889,8 +930,8 @@ static int
>  test_ring_with_exact_size(void)
>  {
>  	struct rte_ring *std_r = NULL, *exact_sz_r = NULL;
> -	void *obj_orig;
> -	void *obj;
> +	void **src_orig = NULL, **dst_orig = NULL;
> +	void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
>  	const unsigned int ring_sz = 16;
>  	unsigned int i, j;
>  	int ret = -1;
> @@ -900,14 +941,6 @@ test_ring_with_exact_size(void)
>  				TEST_RING_IGNORE_API_TYPE,
>  				esize[i]);
> 
> -		/* alloc object pointers. Allocate one extra object
> -		 * and create an unaligned address.
> -		 */
> -		obj_orig = test_ring_calloc(17, esize[i]);
> -		if (obj_orig == NULL)
> -			goto test_fail;
> -		obj = ((char *)obj_orig) + 1;
> -
>  		std_r = test_ring_create("std", esize[i], ring_sz,
>  					rte_socket_id(),
>  					RING_F_SP_ENQ | RING_F_SC_DEQ);
> @@ -925,6 +958,22 @@ test_ring_with_exact_size(void)
>  			goto test_fail;
>  		}
> 
> +		/* alloc object pointers. Allocate one extra object
> +		 * and create an unaligned address.
> +		 */
> +		src_orig = test_ring_calloc(17, esize[i]);
> +		if (src_orig == NULL)
> +			goto test_fail;
> +		test_ring_mem_init(src_orig, 17, esize[i]);
> +		src = (void **)((uintptr_t)src_orig + 1);
> +		cur_src = src;
> +
> +		dst_orig = test_ring_calloc(17, esize[i]);
> +		if (dst_orig == NULL)
> +			goto test_fail;
> +		dst = (void **)((uintptr_t)dst_orig + 1);
> +		cur_dst = dst;
> +
>  		/*
>  		 * Check that the exact size ring is bigger than the
>  		 * standard ring
> @@ -941,33 +990,36 @@ test_ring_with_exact_size(void)
>  		 * than the standard ring. (16 vs 15 elements)
>  		 */
>  		for (j = 0; j < ring_sz - 1; j++) {
> -			test_ring_enqueue(std_r, obj, esize[i], 1,
> +			test_ring_enqueue(std_r, cur_src, esize[i], 1,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_SINGLE);
> -			test_ring_enqueue(exact_sz_r, obj, esize[i], 1,
> +			test_ring_enqueue(exact_sz_r, cur_src, esize[i], 1,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_SINGLE);
> +			cur_src = test_ring_inc_ptr(cur_src, esize[i], 1);
>  		}
> -		ret = test_ring_enqueue(std_r, obj, esize[i], 1,
> +		ret = test_ring_enqueue(std_r, cur_src, esize[i], 1,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_SINGLE);
>  		if (ret != -ENOBUFS) {
>  			printf("%s: error, unexpected successful enqueue\n",
>  				__func__);
>  			goto test_fail;
>  		}
> -		ret = test_ring_enqueue(exact_sz_r, obj, esize[i], 1,
> +		ret = test_ring_enqueue(exact_sz_r, cur_src, esize[i], 1,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_SINGLE);
>  		if (ret == -ENOBUFS) {
>  			printf("%s: error, enqueue failed\n", __func__);
>  			goto test_fail;
>  		}
> +		cur_src = test_ring_inc_ptr(cur_src, esize[i], 1);
> 
>  		/* check that dequeue returns the expected number of
> elements */
> -		ret = test_ring_dequeue(exact_sz_r, obj, esize[i], ring_sz,
> +		ret = test_ring_dequeue(exact_sz_r, cur_dst, esize[i], ring_sz,
>  				TEST_RING_THREAD_DEF |
> TEST_RING_ELEM_BURST);
>  		if (ret != (int)ring_sz) {
>  			printf("%s: error, failed to dequeue expected nb of
> elements\n",
>  				__func__);
>  			goto test_fail;
>  		}
> +		cur_dst = test_ring_inc_ptr(cur_dst, esize[i], ring_sz);
> 
>  		/* check that the capacity function returns expected value */
>  		if (rte_ring_get_capacity(exact_sz_r) != ring_sz) { @@ -976,10
> +1028,20 @@ test_ring_with_exact_size(void)
>  			goto test_fail;
>  		}
> 
> -		rte_free(obj_orig);
> +		/* check data */
> +		if (memcmp(src, dst, cur_dst - dst)) {
> +			rte_hexdump(stdout, "src", src, cur_src - src);
> +			rte_hexdump(stdout, "dst", dst, cur_dst - dst);
> +			printf("data after dequeue is not the same\n");
> +			goto test_fail;
> +		}
> +
> +		rte_free(src_orig);
> +		rte_free(dst_orig);
>  		rte_ring_free(std_r);
>  		rte_ring_free(exact_sz_r);
> -		obj_orig = NULL;
> +		src_orig = NULL;
> +		dst_orig = NULL;
>  		std_r = NULL;
>  		exact_sz_r = NULL;
>  	}
> @@ -987,7 +1049,8 @@ test_ring_with_exact_size(void)
>  	return 0;
> 
>  test_fail:
> -	rte_free(obj_orig);
> +	rte_free(src_orig);
> +	rte_free(dst_orig);
>  	rte_ring_free(std_r);
>  	rte_ring_free(exact_sz_r);
>  	return -1;
> --
> 2.17.1


  reply	other threads:[~2020-09-14  4:26 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-29  6:31 [dpdk-dev] [PATCH v1 0/2] wrong pointer passed of ring Feifei Wang
2020-07-29  6:31 ` [dpdk-dev] [PATCH v1 1/2] ring: fix the misdescription of the param Feifei Wang
2020-07-29 15:59   ` David Marchand
2020-07-29 16:24     ` Ananyev, Konstantin
2020-07-29 19:34       ` Honnappa Nagarahalli
2020-07-30 10:16     ` [dpdk-dev] 回复: " Feifei Wang
2020-07-31  5:26       ` [dpdk-dev] " Honnappa Nagarahalli
2020-07-29  6:31 ` [dpdk-dev] [PATCH v1 2/2] test/ring: fix wrong param passed to the enqueue APIs Feifei Wang
2020-07-29 13:48   ` David Marchand
2020-07-29 14:16     ` [dpdk-dev] 回复: " Feifei Wang
2020-07-29 14:21       ` [dpdk-dev] " David Marchand
2020-07-29 15:03         ` [dpdk-dev] 回复: " Feifei Wang
2020-07-29 21:24           ` [dpdk-dev] " Honnappa Nagarahalli
2020-07-30 10:28             ` [dpdk-dev] 回复: " Feifei Wang
2020-07-31  6:25               ` Feifei Wang
2020-08-05  6:14 ` [dpdk-dev] [PATCH v2 0/4] wrong pointer passed and add check Feifei Wang
2020-08-05  6:14   ` [dpdk-dev] [PATCH v2 1/4] test/ring: fix wrong parameter passed to the enqueue APIs Feifei Wang
2020-08-05  6:14   ` [dpdk-dev] [PATCH v2 2/4] test/ring: fix wrong size used in memcmp Feifei Wang
2020-08-26 20:51     ` Honnappa Nagarahalli
2020-08-27  9:05       ` [dpdk-dev] 回复: " Feifei Wang
2020-08-05  6:14   ` [dpdk-dev] [PATCH v2 3/4] test/ring: fix the wrong number of enq/deq elements Feifei Wang
2020-08-26 20:51     ` Honnappa Nagarahalli
2020-08-27  8:54       ` [dpdk-dev] 回复: " Feifei Wang
2020-08-05  6:14   ` [dpdk-dev] [PATCH v2 4/4] test/ring: add check to validate the dequeued objects Feifei Wang
2020-08-26 20:50     ` Honnappa Nagarahalli
2020-08-27  8:47       ` [dpdk-dev] 回复: " Feifei Wang
2020-09-11 16:09 ` [dpdk-dev] [PATCH v3 0/6] fix wrong passed pointer and add check Feifei Wang
2020-09-11 16:09   ` [dpdk-dev] [PATCH v3 1/6] test/ring: add check to validate dequeued objects Feifei Wang
2020-09-14  4:26     ` Honnappa Nagarahalli [this message]
2020-09-11 16:09   ` [dpdk-dev] [PATCH v3 2/6] test/ring: fix wrong parameter passed to the enqueue APIs Feifei Wang
2020-09-14  4:28     ` Honnappa Nagarahalli
2020-09-11 16:09   ` [dpdk-dev] [PATCH v3 3/6] test/ring: validate the return value of enq/deq elements Feifei Wang
2020-09-14  4:29     ` Honnappa Nagarahalli
2020-09-11 16:10   ` [dpdk-dev] [PATCH v3 4/6] test/ring: fix wrong number " Feifei Wang
2020-09-14  4:31     ` Honnappa Nagarahalli
2020-09-11 16:10   ` [dpdk-dev] [PATCH v3 5/6] test/ring: fix wrong size used in memcmp Feifei Wang
2020-09-14  4:37     ` Honnappa Nagarahalli
2020-09-14  9:20       ` David Marchand
2020-09-11 16:10   ` [dpdk-dev] [PATCH v3 6/6] test/ring: improve the application of macro Feifei Wang
2020-09-14 14:33 ` [dpdk-dev] [PATCH v4 0/7] fix wrong passed pointer and add check Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 1/7] test/ring: add check to validate dequeued objects Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 2/7] test/ring: fix wrong parameter passed to the enqueue APIs Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 3/7] test/ring: validate the return value of enq/deq elements Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 4/7] test/ring: fix wrong number " Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 5/7] test/ring: fix wrong size used in memcmp Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 6/7] test/ring: add new function to validate dequeue data Feifei Wang
2020-09-14 14:33   ` [dpdk-dev] [PATCH v4 7/7] test/ring: improve the application of macro Feifei Wang
2020-09-15  6:27 ` [dpdk-dev] [PATCH v5 0/7] fix wrong passed pointer and add check Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 1/7] test/ring: fix wrong parameter passed to the enqueue APIs Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 2/7] test/ring: fix wrong number of enq/deq elements Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 3/7] test/ring: fix wrong size used in memcmp Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 4/7] test/ring: add check to validate dequeued objects Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 5/7] test/ring: validate the return value of enq/deq elements Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 6/7] test/ring: add new function to validate dequeue data Feifei Wang
2020-09-15  6:27   ` [dpdk-dev] [PATCH v5 7/7] test/ring: improve the application of macro Feifei Wang
2020-09-17 16:26     ` Ananyev, Konstantin
2020-09-20 11:54       ` [dpdk-dev] 回复: " Feifei Wang
2020-09-20 11:48 ` [dpdk-dev] [PATCH v6 0/7] Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 1/7] test/ring: fix wrong parameter passed to the enqueue APIs Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 2/7] test/ring: fix wrong number of enq/deq elements Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 3/7] test/ring: fix wrong size used in memcmp Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 4/7] test/ring: add check to validate dequeued objects Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 5/7] test/ring: validate the return value of enq/deq elements Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 6/7] test/ring: add new function to validate dequeue data Feifei Wang
2020-09-20 11:48   ` [dpdk-dev] [PATCH v6 7/7] test/ring: improve the application of macro Feifei Wang
2020-09-20 15:18   ` [dpdk-dev] [PATCH v6 0/7] Ananyev, Konstantin
2020-09-23  9:24   ` David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DBAPR08MB58143C008A6B5471AE2E0F2098230@DBAPR08MB5814.eurprd08.prod.outlook.com \
    --to=honnappa.nagarahalli@arm.com \
    --cc=Feifei.Wang2@arm.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.com \
    --cc=nd@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.