From patchwork Fri Sep 11 16:09:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feifei Wang X-Patchwork-Id: 77454 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BB8DCA04BB; Fri, 11 Sep 2020 18:10:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CED631C0CD; Fri, 11 Sep 2020 18:10:32 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 45C021C0CC for ; Fri, 11 Sep 2020 18:10:31 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B51B0106F; Fri, 11 Sep 2020 09:10:30 -0700 (PDT) Received: from net-arm-n1sdp.shanghai.arm.com (net-arm-n1sdp.shanghai.arm.com [10.169.208.213]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id C79D33F73C; Fri, 11 Sep 2020 09:10:28 -0700 (PDT) From: Feifei Wang To: Honnappa Nagarahalli , Konstantin Ananyev Cc: dev@dpdk.org, nd@arm.com, Feifei Wang Date: Fri, 11 Sep 2020 11:09:57 -0500 Message-Id: <20200911161002.19816-2-feifei.wang2@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911161002.19816-1-feifei.wang2@arm.com> References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200911161002.19816-1-feifei.wang2@arm.com> Subject: [dpdk-dev] [PATCH v3 1/6] test/ring: add check to validate dequeued objects X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Reviewed-by: Ruifeng Wang Reviewed-by: Phil Yang Reviewed-by: Dharmik Thakkar Reviewed-by: Honnappa Nagarahalli --- 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; From patchwork Fri Sep 11 16:09:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feifei Wang X-Patchwork-Id: 77455 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 20F57A04BB; Fri, 11 Sep 2020 18:10:49 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 58D641C0D5; Fri, 11 Sep 2020 18:10:37 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id D96081C0DC; Fri, 11 Sep 2020 18:10:35 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 48818106F; Fri, 11 Sep 2020 09:10:35 -0700 (PDT) Received: from net-arm-n1sdp.shanghai.arm.com (net-arm-n1sdp.shanghai.arm.com [10.169.208.213]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 85E5C3F73C; Fri, 11 Sep 2020 09:10:32 -0700 (PDT) From: Feifei Wang To: Honnappa Nagarahalli , Konstantin Ananyev , Olivier Matz , Gavin Hu Cc: dev@dpdk.org, nd@arm.com, Feifei Wang , stable@dpdk.org Date: Fri, 11 Sep 2020 11:09:58 -0500 Message-Id: <20200911161002.19816-3-feifei.wang2@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911161002.19816-1-feifei.wang2@arm.com> References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200911161002.19816-1-feifei.wang2@arm.com> Subject: [dpdk-dev] [PATCH v3 2/6] test/ring: fix wrong parameter passed to the enqueue APIs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When enqueue one element to ring in the performance test, a pointer should be passed to rte_ring_[sp|mp]enqueue APIs, not the pointer to a table of void *pointers. Fixes: a9fe152363e2 ("test/ring: add custom element size functional tests") Cc: honnappa.nagarahalli@arm.com Cc: stable@dpdk.org Signed-off-by: Feifei Wang Reviewed-by: Ruifeng Wang Reviewed-by: Phil Yang Reviewed-by: Honnappa Nagarahalli --- app/test/test_ring.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/test/test_ring.h b/app/test/test_ring.h index aa6ae67ca..d4b15af7c 100644 --- a/app/test/test_ring.h +++ b/app/test/test_ring.h @@ -50,11 +50,11 @@ test_ring_enqueue(struct rte_ring *r, void **obj, int esize, unsigned int n, if ((esize) == -1) switch (api_type) { case (TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE): - return rte_ring_enqueue(r, obj); + return rte_ring_enqueue(r, *obj); case (TEST_RING_THREAD_SPSC | TEST_RING_ELEM_SINGLE): - return rte_ring_sp_enqueue(r, obj); + return rte_ring_sp_enqueue(r, *obj); case (TEST_RING_THREAD_MPMC | TEST_RING_ELEM_SINGLE): - return rte_ring_mp_enqueue(r, obj); + return rte_ring_mp_enqueue(r, *obj); case (TEST_RING_THREAD_DEF | TEST_RING_ELEM_BULK): return rte_ring_enqueue_bulk(r, obj, n, NULL); case (TEST_RING_THREAD_SPSC | TEST_RING_ELEM_BULK): From patchwork Fri Sep 11 16:09:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feifei Wang X-Patchwork-Id: 77456 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 40CB6A04BB; Fri, 11 Sep 2020 18:11:02 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BFF2A1C0D2; Fri, 11 Sep 2020 18:10:40 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 151B21C112 for ; Fri, 11 Sep 2020 18:10:39 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9C6F2106F; Fri, 11 Sep 2020 09:10:38 -0700 (PDT) Received: from net-arm-n1sdp.shanghai.arm.com (net-arm-n1sdp.shanghai.arm.com [10.169.208.213]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id AF1AD3F73C; Fri, 11 Sep 2020 09:10:36 -0700 (PDT) From: Feifei Wang To: Honnappa Nagarahalli , Konstantin Ananyev Cc: dev@dpdk.org, nd@arm.com, Feifei Wang Date: Fri, 11 Sep 2020 11:09:59 -0500 Message-Id: <20200911161002.19816-4-feifei.wang2@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911161002.19816-1-feifei.wang2@arm.com> References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200911161002.19816-1-feifei.wang2@arm.com> Subject: [dpdk-dev] [PATCH v3 3/6] test/ring: validate the return value of enq/deq elements X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Validate the return value of single element enqueue/dequeue operation in the test. Suggested-by: Honnappa Nagarahalli Signed-off-by: Feifei Wang Reviewed-by: Phil Yang Reviewed-by: Honnappa Nagarahalli --- app/test/test_ring.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/app/test/test_ring.c b/app/test/test_ring.c index 6e48cc0b1..63d44d85e 100644 --- a/app/test/test_ring.c +++ b/app/test/test_ring.c @@ -823,8 +823,13 @@ test_ring_basic_ex(void) rte_ring_free_count(rp)); for (j = 0; j < RING_SIZE; j++) { - test_ring_enqueue(rp, cur_src, esize[i], 1, + ret = test_ring_enqueue(rp, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); + if (ret != 0) { + printf("%s: rte_ring_enqueue fails\n", + __func__); + goto fail_test; + } cur_src = test_ring_inc_ptr(cur_src, esize[i], 1); } @@ -835,8 +840,13 @@ test_ring_basic_ex(void) } for (j = 0; j < RING_SIZE; j++) { - test_ring_dequeue(rp, cur_dst, esize[i], 1, + ret = test_ring_dequeue(rp, cur_dst, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); + if (ret != 0) { + printf("%s: rte_ring_dequeue fails\n", + __func__); + goto fail_test; + } cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 1); } @@ -990,10 +1000,18 @@ 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, cur_src, esize[i], 1, + ret = test_ring_enqueue(std_r, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); - test_ring_enqueue(exact_sz_r, cur_src, esize[i], 1, + if (ret != 0) { + printf("%s: error, enqueue failed\n", __func__); + goto test_fail; + } + ret = test_ring_enqueue(exact_sz_r, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); + if (ret != 0) { + printf("%s: error, enqueue failed\n", __func__); + goto test_fail; + } cur_src = test_ring_inc_ptr(cur_src, esize[i], 1); } ret = test_ring_enqueue(std_r, cur_src, esize[i], 1, From patchwork Fri Sep 11 16:10:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feifei Wang X-Patchwork-Id: 77457 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 57B4AA04BB; Fri, 11 Sep 2020 18:11:13 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DB7D91C115; Fri, 11 Sep 2020 18:10:44 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id EE87A1C10C; Fri, 11 Sep 2020 18:10:42 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 80E30106F; Fri, 11 Sep 2020 09:10:42 -0700 (PDT) Received: from net-arm-n1sdp.shanghai.arm.com (net-arm-n1sdp.shanghai.arm.com [10.169.208.213]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 47AC13F73C; Fri, 11 Sep 2020 09:10:40 -0700 (PDT) From: Feifei Wang To: Honnappa Nagarahalli , Konstantin Ananyev Cc: dev@dpdk.org, nd@arm.com, Feifei Wang , stable@dpdk.org Date: Fri, 11 Sep 2020 11:10:00 -0500 Message-Id: <20200911161002.19816-5-feifei.wang2@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911161002.19816-1-feifei.wang2@arm.com> References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200911161002.19816-1-feifei.wang2@arm.com> Subject: [dpdk-dev] [PATCH v3 4/6] test/ring: fix wrong number of enq/deq elements X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The ring capacity is (RING_SIZE - 1), thus only (RING_SIZE - 1) number of elements can be enqueued into the ring. Fixes: af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Feifei Wang Reviewed-by: Ruifeng Wang Reviewed-by: Phil Yang Reviewed-by: Honnappa Nagarahalli --- app/test/test_ring.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/test/test_ring.c b/app/test/test_ring.c index 63d44d85e..811adc523 100644 --- a/app/test/test_ring.c +++ b/app/test/test_ring.c @@ -822,7 +822,7 @@ test_ring_basic_ex(void) printf("%u ring entries are now free\n", rte_ring_free_count(rp)); - for (j = 0; j < RING_SIZE; j++) { + for (j = 0; j < RING_SIZE - 1; j++) { ret = test_ring_enqueue(rp, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); if (ret != 0) { @@ -839,7 +839,7 @@ test_ring_basic_ex(void) goto fail_test; } - for (j = 0; j < RING_SIZE; j++) { + for (j = 0; j < RING_SIZE - 1; j++) { ret = test_ring_dequeue(rp, cur_dst, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); if (ret != 0) { From patchwork Fri Sep 11 16:10:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feifei Wang X-Patchwork-Id: 77458 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3F2E3A04BB; Fri, 11 Sep 2020 18:11:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 39F111C120; Fri, 11 Sep 2020 18:10:48 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 860D3E07; Fri, 11 Sep 2020 18:10:47 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1D969106F; Fri, 11 Sep 2020 09:10:47 -0700 (PDT) Received: from net-arm-n1sdp.shanghai.arm.com (net-arm-n1sdp.shanghai.arm.com [10.169.208.213]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5CB233F73C; Fri, 11 Sep 2020 09:10:44 -0700 (PDT) From: Feifei Wang To: Honnappa Nagarahalli , Konstantin Ananyev , Olivier Matz , Gavin Hu Cc: dev@dpdk.org, nd@arm.com, Feifei Wang , stable@dpdk.org Date: Fri, 11 Sep 2020 11:10:01 -0500 Message-Id: <20200911161002.19816-6-feifei.wang2@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911161002.19816-1-feifei.wang2@arm.com> References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200911161002.19816-1-feifei.wang2@arm.com> Subject: [dpdk-dev] [PATCH v3 5/6] test/ring: fix wrong size used in memcmp X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When using memcmp function to check data, the third param should be the size of all elements, rather than the number of the elements. Furthermore, do code clean up by moving repeated code inside 'test_ring_mem_cmp' function to validate data and print information of enqueue/dequeue elements if validation fails. Fixes: a9fe152363e2 ("test/ring: add custom element size functional tests") Cc: honnappa.nagarahalli@arm.com Cc: stable@dpdk.org Signed-off-by: Feifei Wang Reviewed-by: Ruifeng Wang Reviewed-by: Phil Yang Reviewed-by: Dharmik Thakkar --- app/test/test_ring.c | 59 ++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/app/test/test_ring.c b/app/test/test_ring.c index 811adc523..4a2bd39fc 100644 --- a/app/test/test_ring.c +++ b/app/test/test_ring.c @@ -258,6 +258,21 @@ test_ring_mem_init(void *obj, unsigned int count, int esize) ((uint32_t *)obj)[i] = i; } +static int +test_ring_mem_cmp(void *src, void *dst, unsigned int size) +{ + int ret; + + ret = memcmp(src, dst, size); + if (ret) { + rte_hexdump(stdout, "src", src, size); + rte_hexdump(stdout, "dst", dst, size); + printf("data after dequeue is not the same\n"); + } + + return ret; +} + static void test_ring_print_test_string(const char *istr, unsigned int api_type, int esize) { @@ -383,7 +398,7 @@ test_ring_burst_bulk_tests1(unsigned int test_idx) struct rte_ring *r; void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL; int ret; - unsigned int i, j; + unsigned int i, j, temp_sz; int rand; const unsigned int rsz = RING_SIZE - 1; @@ -444,7 +459,11 @@ test_ring_burst_bulk_tests1(unsigned int test_idx) TEST_RING_VERIFY(rte_ring_empty(r)); /* check data */ - TEST_RING_VERIFY(memcmp(src, dst, rsz) == 0); + temp_sz = rsz * sizeof(void *); + if (esize[i] != -1) + temp_sz = rsz * esize[i]; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + temp_sz) == 0); } /* Free memory before test completed */ @@ -538,12 +557,8 @@ test_ring_burst_bulk_tests2(unsigned int test_idx) cur_dst = test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); /* 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"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail; - } /* Free memory before test completed */ rte_ring_free(r); @@ -614,12 +629,8 @@ test_ring_burst_bulk_tests3(unsigned int test_idx) } /* 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"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail; - } /* Free memory before test completed */ rte_ring_free(r); @@ -747,12 +758,8 @@ test_ring_burst_bulk_tests4(unsigned int test_idx) goto fail; /* 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"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail; - } /* Free memory before test completed */ rte_ring_free(r); @@ -857,12 +864,8 @@ test_ring_basic_ex(void) } /* 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"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_src, src))) goto fail_test; - } /* Following tests use the configured flags to decide * SP/SC or MP/MC. @@ -909,12 +912,8 @@ test_ring_basic_ex(void) 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"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail_test; - } rte_ring_free(rp); rte_free(src); @@ -1047,12 +1046,8 @@ test_ring_with_exact_size(void) } /* 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"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto test_fail; - } rte_free(src_orig); rte_free(dst_orig); From patchwork Fri Sep 11 16:10:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feifei Wang X-Patchwork-Id: 77459 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 50F28A04BB; Fri, 11 Sep 2020 18:11:38 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A526C1C11A; Fri, 11 Sep 2020 18:10:53 +0200 (CEST) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by dpdk.org (Postfix) with ESMTP id 52E901C11A for ; Fri, 11 Sep 2020 18:10:52 +0200 (CEST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BF0D7113E; Fri, 11 Sep 2020 09:10:51 -0700 (PDT) Received: from net-arm-n1sdp.shanghai.arm.com (net-arm-n1sdp.shanghai.arm.com [10.169.208.213]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 8F0B83F73C; Fri, 11 Sep 2020 09:10:49 -0700 (PDT) From: Feifei Wang To: Honnappa Nagarahalli , Konstantin Ananyev Cc: dev@dpdk.org, nd@arm.com, Feifei Wang Date: Fri, 11 Sep 2020 11:10:02 -0500 Message-Id: <20200911161002.19816-7-feifei.wang2@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200911161002.19816-1-feifei.wang2@arm.com> References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200911161002.19816-1-feifei.wang2@arm.com> Subject: [dpdk-dev] [PATCH v3 6/6] test/ring: improve the application of macro X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add more parameters into the macro TEST_RING_VERIFY and expand the scope of application for it. Furthermore, replace all ring APIs check with TEST_RING_VERIFY to facilitate debugging. Suggested-by: Honnappa Nagarahalli Signed-off-by: Feifei Wang Reviewed-by: Phil Yang Reviewed-by: Dharmik Thakkar --- app/test/test_ring.c | 264 ++++++++++++++++--------------------------- 1 file changed, 98 insertions(+), 166 deletions(-) diff --git a/app/test/test_ring.c b/app/test/test_ring.c index 4a2bd39fc..bbfdff4bd 100644 --- a/app/test/test_ring.c +++ b/app/test/test_ring.c @@ -46,15 +46,25 @@ #define RING_SIZE 4096 #define MAX_BULK 32 -#define TEST_RING_VERIFY(exp) \ +/* + * Validate the return value of test cases and print details of the + * ring if validation fails + * + * @param exp + * Expression to validate return value. + * @param r + * A pointer to the ring structure. + */ +#define TEST_RING_VERIFY(exp, r) do { \ if (!(exp)) { \ printf("error at %s:%d\tcondition " #exp " failed\n", \ __func__, __LINE__); \ - rte_ring_dump(stdout, r); \ - return -1; \ - } + rte_ring_dump(stdout, (r)); \ + goto fail; \ + } \ +} while (0) -#define TEST_RING_FULL_EMTPY_ITER 8 +#define TEST_RING_FULL_EMTPY_ITER 8 static const int esize[] = {-1, 4, 8, 16, 20}; @@ -316,7 +326,7 @@ test_ring_negative_tests(void) RING_SIZE + 1, SOCKET_ID_ANY, 0); if (rp != NULL) { printf("Test failed to detect invalid element size\n"); - goto test_fail; + goto fail; } @@ -326,7 +336,7 @@ test_ring_negative_tests(void) RING_SIZE + 1, SOCKET_ID_ANY, 0); if (rp != NULL) { printf("Test failed to detect odd count\n"); - goto test_fail; + goto fail; } /* Test if ring size is exceeding the limit */ @@ -334,14 +344,14 @@ test_ring_negative_tests(void) RTE_RING_SZ_MASK + 1, SOCKET_ID_ANY, 0); if (rp != NULL) { printf("Test failed to detect limits\n"); - goto test_fail; + goto fail; } /* Tests if lookup returns NULL on non-existing ring */ rp = rte_ring_lookup("ring_not_found"); if (rp != NULL && rte_errno != ENOENT) { printf("Test failed to detect NULL ring lookup\n"); - goto test_fail; + goto fail; } /* Test to if a non-power of 2 count causes the create @@ -350,23 +360,19 @@ test_ring_negative_tests(void) rp = test_ring_create("test_ring_count", esize[i], 4097, SOCKET_ID_ANY, 0); if (rp != NULL) - goto test_fail; + goto fail; rp = test_ring_create("test_ring_negative", esize[i], RING_SIZE, SOCKET_ID_ANY, RING_F_SP_ENQ | RING_F_SC_DEQ); if (rp == NULL) { printf("test_ring_negative fail to create ring\n"); - goto test_fail; + goto fail; } - if (rte_ring_lookup("test_ring_negative") != rp) - goto test_fail; + TEST_RING_VERIFY(rte_ring_lookup("test_ring_negative") == rp, rp); - if (rte_ring_empty(rp) != 1) { - printf("test_ring_nagative ring is not empty but it should be\n"); - goto test_fail; - } + TEST_RING_VERIFY(rte_ring_empty(rp) == 1, rp); /* Tests if it would always fail to create ring with an used * ring name. @@ -374,7 +380,7 @@ test_ring_negative_tests(void) rt = test_ring_create("test_ring_negative", esize[i], RING_SIZE, SOCKET_ID_ANY, 0); if (rt != NULL) - goto test_fail; + goto fail; rte_ring_free(rp); rp = NULL; @@ -382,7 +388,7 @@ test_ring_negative_tests(void) return 0; -test_fail: +fail: rte_ring_free(rp); return -1; @@ -433,37 +439,38 @@ test_ring_burst_bulk_tests1(unsigned int test_idx) __func__, i, rand); ret = test_ring_enq_impl(r, cur_src, esize[i], rand, test_idx); - TEST_RING_VERIFY(ret != 0); + TEST_RING_VERIFY(ret != 0, r); ret = test_ring_deq_impl(r, cur_dst, esize[i], rand, test_idx); - TEST_RING_VERIFY(ret == rand); + TEST_RING_VERIFY(ret == rand, r); /* fill the ring */ ret = test_ring_enq_impl(r, cur_src, esize[i], rsz, test_idx); - TEST_RING_VERIFY(ret != 0); + TEST_RING_VERIFY(ret != 0, r); - TEST_RING_VERIFY(rte_ring_free_count(r) == 0); - TEST_RING_VERIFY(rsz == rte_ring_count(r)); - TEST_RING_VERIFY(rte_ring_full(r)); - TEST_RING_VERIFY(rte_ring_empty(r) == 0); + TEST_RING_VERIFY(rte_ring_free_count(r) == 0, r); + TEST_RING_VERIFY(rsz == rte_ring_count(r), r); + TEST_RING_VERIFY(rte_ring_full(r), r); + TEST_RING_VERIFY(rte_ring_empty(r) == 0, r); /* empty the ring */ ret = test_ring_deq_impl(r, cur_dst, esize[i], rsz, test_idx); - TEST_RING_VERIFY(ret == (int)rsz); - TEST_RING_VERIFY(rsz == rte_ring_free_count(r)); - TEST_RING_VERIFY(rte_ring_count(r) == 0); - TEST_RING_VERIFY(rte_ring_full(r) == 0); - TEST_RING_VERIFY(rte_ring_empty(r)); + TEST_RING_VERIFY(ret == (int)rsz, r); + + TEST_RING_VERIFY(rsz == rte_ring_free_count(r), r); + TEST_RING_VERIFY(rte_ring_count(r) == 0, r); + TEST_RING_VERIFY(rte_ring_full(r) == 0, r); + TEST_RING_VERIFY(rte_ring_empty(r), r); /* check data */ temp_sz = rsz * sizeof(void *); if (esize[i] != -1) temp_sz = rsz * esize[i]; TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, - temp_sz) == 0); + temp_sz) == 0, r); } /* Free memory before test completed */ @@ -520,45 +527,39 @@ test_ring_burst_bulk_tests2(unsigned int test_idx) printf("enqueue 1 obj\n"); ret = test_ring_enq_impl(r, cur_src, esize[i], 1, test_idx); - if (ret != 1) - goto fail; + TEST_RING_VERIFY(ret == 1, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], 1); printf("enqueue 2 objs\n"); ret = test_ring_enq_impl(r, cur_src, esize[i], 2, test_idx); - if (ret != 2) - goto fail; + TEST_RING_VERIFY(ret == 2, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], 2); printf("enqueue MAX_BULK objs\n"); ret = test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, test_idx); - if (ret != MAX_BULK) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], MAX_BULK); printf("dequeue 1 obj\n"); ret = test_ring_deq_impl(r, cur_dst, esize[i], 1, test_idx); - if (ret != 1) - goto fail; + TEST_RING_VERIFY(ret == 1, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 1); printf("dequeue 2 objs\n"); ret = test_ring_deq_impl(r, cur_dst, esize[i], 2, test_idx); - if (ret != 2) - goto fail; + TEST_RING_VERIFY(ret == 2, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2); printf("dequeue MAX_BULK objs\n"); ret = test_ring_deq_impl(r, cur_dst, esize[i], MAX_BULK, test_idx); - if (ret != MAX_BULK) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); /* check data */ - if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) - goto fail; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + RTE_PTR_DIFF(cur_dst, dst)) == 0, r); /* Free memory before test completed */ rte_ring_free(r); @@ -615,22 +616,20 @@ test_ring_burst_bulk_tests3(unsigned int test_idx) for (j = 0; j < RING_SIZE / MAX_BULK; j++) { ret = test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, test_idx); - if (ret != MAX_BULK) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], MAX_BULK); ret = test_ring_deq_impl(r, cur_dst, esize[i], MAX_BULK, test_idx); - if (ret != MAX_BULK) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); } /* check data */ - if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) - goto fail; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + RTE_PTR_DIFF(cur_dst, dst)) == 0, r); /* Free memory before test completed */ rte_ring_free(r); @@ -690,16 +689,14 @@ test_ring_burst_bulk_tests4(unsigned int test_idx) for (j = 0; j < (RING_SIZE/MAX_BULK - 1); j++) { ret = test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, test_idx); - if (ret != MAX_BULK) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], MAX_BULK); } printf("Enqueue 2 objects, free entries = MAX_BULK - 2\n"); ret = test_ring_enq_impl(r, cur_src, esize[i], 2, test_idx); - if (ret != 2) - goto fail; + TEST_RING_VERIFY(ret == 2, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], 2); printf("Enqueue the remaining entries = MAX_BULK - 3\n"); @@ -711,34 +708,29 @@ test_ring_burst_bulk_tests4(unsigned int test_idx) /* Always one free entry left */ ret = test_ring_enq_impl(r, cur_src, esize[i], num_elems, test_idx); - if (ret != MAX_BULK - 3) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK - 3, r); cur_src = test_ring_inc_ptr(cur_src, esize[i], MAX_BULK - 3); printf("Test if ring is full\n"); - if (rte_ring_full(r) != 1) - goto fail; + TEST_RING_VERIFY(rte_ring_full(r) == 1, r); printf("Test enqueue for a full entry\n"); ret = test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, test_idx); - if (ret != 0) - goto fail; + TEST_RING_VERIFY(ret == 0, r); printf("Test dequeue without enough objects\n"); for (j = 0; j < RING_SIZE / MAX_BULK - 1; j++) { ret = test_ring_deq_impl(r, cur_dst, esize[i], MAX_BULK, test_idx); - if (ret != MAX_BULK) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); } /* Available memory space for the exact MAX_BULK entries */ ret = test_ring_deq_impl(r, cur_dst, esize[i], 2, test_idx); - if (ret != 2) - goto fail; + TEST_RING_VERIFY(ret == 2, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2); /* Bulk APIs enqueue exact number of elements */ @@ -748,18 +740,16 @@ test_ring_burst_bulk_tests4(unsigned int test_idx) num_elems = MAX_BULK; ret = test_ring_deq_impl(r, cur_dst, esize[i], num_elems, test_idx); - if (ret != MAX_BULK - 3) - goto fail; + TEST_RING_VERIFY(ret == MAX_BULK - 3, r); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK - 3); printf("Test if ring is empty\n"); /* Check if ring is empty */ - if (rte_ring_empty(r) != 1) - goto fail; + TEST_RING_VERIFY(rte_ring_empty(r) == 1, r); /* check data */ - if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) - goto fail; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + RTE_PTR_DIFF(cur_dst, dst)) == 0, r); /* Free memory before test completed */ rte_ring_free(r); @@ -795,14 +785,14 @@ test_ring_basic_ex(void) RING_F_SP_ENQ | RING_F_SC_DEQ); if (rp == NULL) { printf("%s: failed to create ring\n", __func__); - goto fail_test; + goto fail; } /* 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; + goto fail; } test_ring_mem_init(src, RING_SIZE, esize[i]); cur_src = src; @@ -811,20 +801,13 @@ test_ring_basic_ex(void) dst = test_ring_calloc(RING_SIZE, esize[i]); if (dst == NULL) { printf("%s: failed to alloc dst memory\n", __func__); - goto fail_test; + goto fail; } cur_dst = dst; - if (rte_ring_lookup("test_ring_basic_ex") != rp) { - printf("%s: failed to find ring\n", __func__); - goto fail_test; - } + TEST_RING_VERIFY(rte_ring_lookup("test_ring_basic_ex") == rp, rp); - if (rte_ring_empty(rp) != 1) { - printf("%s: ring is not empty but it should be\n", - __func__); - goto fail_test; - } + TEST_RING_VERIFY(rte_ring_empty(rp) == 1, rp); printf("%u ring entries are now free\n", rte_ring_free_count(rp)); @@ -832,40 +815,24 @@ test_ring_basic_ex(void) for (j = 0; j < RING_SIZE - 1; j++) { ret = test_ring_enqueue(rp, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); - if (ret != 0) { - printf("%s: rte_ring_enqueue fails\n", - __func__); - goto fail_test; - } + TEST_RING_VERIFY(ret == 0, rp); cur_src = test_ring_inc_ptr(cur_src, esize[i], 1); } - if (rte_ring_full(rp) != 1) { - printf("%s: ring is not full but it should be\n", - __func__); - goto fail_test; - } + TEST_RING_VERIFY(rte_ring_full(rp) == 1, rp); for (j = 0; j < RING_SIZE - 1; j++) { ret = test_ring_dequeue(rp, cur_dst, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); - if (ret != 0) { - printf("%s: rte_ring_dequeue fails\n", - __func__); - goto fail_test; - } + TEST_RING_VERIFY(ret == 0, rp); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 1); } - if (rte_ring_empty(rp) != 1) { - printf("%s: ring is not empty but it should be\n", - __func__); - goto fail_test; - } + TEST_RING_VERIFY(rte_ring_empty(rp) == 1, rp); /* check data */ - if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_src, src))) - goto fail_test; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + RTE_PTR_DIFF(cur_dst, dst)) == 0, rp); /* Following tests use the configured flags to decide * SP/SC or MP/MC. @@ -880,40 +847,28 @@ test_ring_basic_ex(void) /* Covering the ring burst operation */ 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; - } + TEST_RING_VERIFY(ret == 2, rp); cur_src = test_ring_inc_ptr(cur_src, 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; - } + TEST_RING_VERIFY(ret == 2, rp); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2); /* Covering the ring bulk operation */ 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; - } + TEST_RING_VERIFY(ret == 2, rp); cur_src = test_ring_inc_ptr(cur_src, 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; - } + TEST_RING_VERIFY(ret == 2, rp); cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2); /* check data */ - if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) - goto fail_test; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + RTE_PTR_DIFF(cur_dst, dst)) == 0, rp); rte_ring_free(rp); rte_free(src); @@ -925,7 +880,7 @@ test_ring_basic_ex(void) return 0; -fail_test: +fail: rte_ring_free(rp); rte_free(src); rte_free(dst); @@ -955,7 +910,7 @@ test_ring_with_exact_size(void) RING_F_SP_ENQ | RING_F_SC_DEQ); if (std_r == NULL) { printf("%s: error, can't create std ring\n", __func__); - goto test_fail; + goto fail; } exact_sz_r = test_ring_create("exact sz", esize[i], ring_sz, rte_socket_id(), @@ -964,7 +919,7 @@ test_ring_with_exact_size(void) if (exact_sz_r == NULL) { printf("%s: error, can't create exact size ring\n", __func__); - goto test_fail; + goto fail; } /* alloc object pointers. Allocate one extra object @@ -972,14 +927,14 @@ test_ring_with_exact_size(void) */ src_orig = test_ring_calloc(17, esize[i]); if (src_orig == NULL) - goto test_fail; + goto 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; + goto fail; dst = (void **)((uintptr_t)dst_orig + 1); cur_dst = dst; @@ -987,13 +942,9 @@ test_ring_with_exact_size(void) * Check that the exact size ring is bigger than the * standard ring */ - if (rte_ring_get_size(std_r) >= rte_ring_get_size(exact_sz_r)) { - printf("%s: error, std ring (size: %u) is not smaller than exact size one (size %u)\n", - __func__, - rte_ring_get_size(std_r), - rte_ring_get_size(exact_sz_r)); - goto test_fail; - } + TEST_RING_VERIFY(rte_ring_get_size(std_r) <= + rte_ring_get_size(exact_sz_r), std_r); + /* * check that the exact_sz_ring can hold one more element * than the standard ring. (16 vs 15 elements) @@ -1001,53 +952,34 @@ test_ring_with_exact_size(void) for (j = 0; j < ring_sz - 1; j++) { ret = test_ring_enqueue(std_r, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); - if (ret != 0) { - printf("%s: error, enqueue failed\n", __func__); - goto test_fail; - } + TEST_RING_VERIFY(ret == 0, std_r); ret = test_ring_enqueue(exact_sz_r, cur_src, esize[i], 1, TEST_RING_THREAD_DEF | TEST_RING_ELEM_SINGLE); - if (ret != 0) { - printf("%s: error, enqueue failed\n", __func__); - goto test_fail; - } + TEST_RING_VERIFY(ret == 0, exact_sz_r); cur_src = test_ring_inc_ptr(cur_src, 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; - } + TEST_RING_VERIFY(ret == -ENOBUFS, std_r); 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; - } + TEST_RING_VERIFY(ret != -ENOBUFS, exact_sz_r); 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, 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; - } + TEST_RING_VERIFY(ret == (int)ring_sz, exact_sz_r); 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) { - printf("%s: error, incorrect ring capacity reported\n", - __func__); - goto test_fail; - } + TEST_RING_VERIFY(rte_ring_get_capacity(exact_sz_r) == ring_sz, + exact_sz_r); /* check data */ - if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) - goto test_fail; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + RTE_PTR_DIFF(cur_dst, dst)) == 0, + exact_sz_r); rte_free(src_orig); rte_free(dst_orig); @@ -1061,7 +993,7 @@ test_ring_with_exact_size(void) return 0; -test_fail: +fail: rte_free(src_orig); rte_free(dst_orig); rte_ring_free(std_r);