From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 72E35A04DD; Tue, 20 Oct 2020 22:59:58 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5395EA8FD; Tue, 20 Oct 2020 22:59:57 +0200 (CEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by dpdk.org (Postfix) with ESMTP id F1D95A8F0 for ; Tue, 20 Oct 2020 22:59:55 +0200 (CEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20201020205938euoutp01cc2904cc9d4f3b32cb1146082939d2c6~-zv0G4-w42184321843euoutp01W for ; Tue, 20 Oct 2020 20:59:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20201020205938euoutp01cc2904cc9d4f3b32cb1146082939d2c6~-zv0G4-w42184321843euoutp01W DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1603227578; bh=pwneR5/8G/IhhYTZspjFEHqSQv6ySS8lmOxCPDo2NiQ=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=Dftwsqr2zAHjtb4N0WKl/MxhznymO6KMvNW14d59BvUG6FO5N3N9xWAqNYX7r8TqV oC8QWdHNVAbUCCth86Y3WbBJ0XeVckmfMlRudJIUjg/UQrjE4hfNXjfgUW91gUsLkW GC1XvHsIuIyfQFd98zXSvOJ/7fhC8JL8xuDHi4y8= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20201020205929eucas1p2c11f100c44bf640e7d61b22d55224ce7~-zvsCoMiS3226732267eucas1p2B; Tue, 20 Oct 2020 20:59:29 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 14.E7.06318.1BF4F8F5; Tue, 20 Oct 2020 21:59:29 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20201020205928eucas1p19f840a7b95e7739019d84f6f8fbe73b9~-zvqxCRju1561815618eucas1p1b; Tue, 20 Oct 2020 20:59:28 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20201020205928eusmtrp1772669f997fd7dc9971cce888392cc87~-zvqwapDr2278422784eusmtrp1-; Tue, 20 Oct 2020 20:59:28 +0000 (GMT) X-AuditID: cbfec7f5-371ff700000018ae-11-5f8f4fb11e23 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 0F.D4.06017.0BF4F8F5; Tue, 20 Oct 2020 21:59:28 +0100 (BST) Received: from [106.210.88.70] (unknown [106.210.88.70]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20201020205927eusmtip1c296e7f21994a257fe4c3f0809e6a2bb~-zvp58Z091031610316eusmtip1a; Tue, 20 Oct 2020 20:59:27 +0000 (GMT) To: Honnappa Nagarahalli , "dev@dpdk.org" , "john.mcnamara@intel.com" Cc: Ruifeng Wang , "juraj.linkes@pantheon.tech" , "david.marchand@redhat.com" , nd , "stable@dpdk.org" , "\"'Lukasz Wojciechowski'\"," From: Lukasz Wojciechowski Message-ID: Date: Tue, 20 Oct 2020 22:59:25 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 MIME-Version: 1.0 In-Reply-To: Content-Transfer-Encoding: 7bit Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrDKsWRmVeSWpSXmKPExsWy7djPc7ob/fvjDY68V7XYvqKLzeLdp+1M FjOftrBbnJ+3ldVi6ZEjjBbPetYxWpxZ3sNscbXvBrPFv44/7A6cHmvmrWH0+LVgKavH4j0v mTwOTr3F6HHw3R4mj/f7rrIFsEVx2aSk5mSWpRbp2yVwZbTPm8dUMMOm4smHK4wNjJv0uxg5 OSQETCT2z7/O3sXIxSEksIJR4vnFz0wgCSGBL4wS74/HQCQ+M0qcv7eHHaZj8twdTBCJ5YwS j9fsY4Rw3jJKfP98kxmkSlggUuLopyfMIAkRgV5GiUd/NrOAOMwCs5kklm04xgZSxSZgK3Fk 5ldWEJtXwE3i5enFYHEWAVWJp0tPgE0SFYiTmLCxhQWiRlDi5MwnYDanQKzEvCl/wG5iFpCX 2P52DjOELS5x68l8JohbL7FL/DggBmG7SMxpOMQKYQtLvDq+BeofGYnTk3vAjpMQ2MYocfX3 T0YIZz+jxPXeFVBV1hKH//0Guo4DaIOmxPpd0OBzlOieegIsLCHAJ3HjrSDEDXwSk7ZNZ4YI 80p0tAlBVOtJPO2Zygiz9s/aJywTGJVmIflsFpJvZiH5ZhbC3gWMLKsYxVNLi3PTU4uN81LL 9YoTc4tL89L1kvNzNzEC09Tpf8e/7mDc9yfpEKMAB6MSD+8Flv54IdbEsuLK3EOMEhzMSiK8 TmdPxwnxpiRWVqUW5ccXleakFh9ilOZgURLnNV70MlZIID2xJDU7NbUgtQgmy8TBKdXAuNhx +bModsOpXA5e7h8jI4vZJVo/BHuJXFix7KZ6QsCVT3bZ3jwLv3P1/W/4vXqGQaHB9RPXzgom iQlOM0m9M+H2Yp+U14lWoV/D/54/e+vA2gibnkcyrnP0yw38j2QFZrxjqbhio3l5ovLeDfe+ LFGyVZyTetvrX23RK5dNfu3SLTf/NP28psRSnJFoqMVcVJwIAJYPZmhPAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrPIsWRmVeSWpSXmKPExsVy+t/xu7ob/PvjDTbeF7PYvqKLzeLdp+1M FjOftrBbnJ+3ldVi6ZEjjBbPetYxWpxZ3sNscbXvBrPFv44/7A6cHmvmrWH0+LVgKavH4j0v mTwOTr3F6HHw3R4mj/f7rrIFsEXp2RTll5akKmTkF5fYKkUbWhjpGVpa6BmZWOoZGpvHWhmZ Kunb2aSk5mSWpRbp2yXoZbTPm8dUMMOm4smHK4wNjJv0uxg5OSQETCQmz93B1MXIxSEksJRR 4ve6N6xdjBxACRmJD5cEIGqEJf5c62KDqHnNKHH510c2kISwQKTE0U9PmEESIgL9jBKv195j B3GYBWYzSXRPWcsINZZJ4uijQ+wgLWwCthJHZn5lBbF5BdwkXp5eDDaKRUBV4unSE8wgtqhA nMSPib1sEDWCEidnPmEBsTkFYiXmTfkDNodZwExi3uaHzBC2vMT2t3OgbHGJW0/mM01gFJqF pH0WkpZZSFpmIWlZwMiyilEktbQ4Nz232EivODG3uDQvXS85P3cTIzAytx37uWUHY9e74EOM AhyMSjy8F1j644VYE8uKK3MPMUpwMCuJ8DqdPR0nxJuSWFmVWpQfX1Sak1p8iNEU6LmJzFKi yfnApJFXEm9oamhuYWlobmxubGahJM7bIXAwRkggPbEkNTs1tSC1CKaPiYNTqoGxRVzx2Iab /2vWuH13k2rh/7afQU5kTs/zfHfnRzL616Rkpt4SM5VNuiEfyKBjfv1uf8DMXXa17HtXBMid cZh4SP+2jRnrnTUPGjafXfArbJJhw9XgpaGhWjtn3KtQid8bMLG1TpnVMWNlQeRr7keBkwoP H42X1PS7Nu217YfXDhy8HO9SFQ8qsRRnJBpqMRcVJwIA5R3f3+ICAAA= X-CMS-MailID: 20201020205928eucas1p19f840a7b95e7739019d84f6f8fbe73b9 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20201016060420eucas1p12f301a94eb4b4d19a9ced5c5cbd59c77 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20201016060420eucas1p12f301a94eb4b4d19a9ced5c5cbd59c77 References: <20201016060349.19940-1-honnappa.nagarahalli@arm.com> <791ffc96-8d87-5783-c596-92e21cdda913@partner.samsung.com> Subject: Re: [dpdk-dev] [PATCH 1/2] test/rcu: fix array subscript is above array bounds 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" Hi Honnappa, If setting value lower than 2 makes no sense as there is no place for worker thread, then the patch is perfectly fine >>> When RTE_MAX_LCORE value is small, following compiler errors are >>> observed. >>> >>> ../app/test/test_rcu_qsbr.c:296:54: error: iteration 2 invokes >>> undefined behavior [-Werror=aggressive-loop-optimizations] >>> >>> ../app/test/test_rcu_qsbr.c:315:55: error: array subscript is above >>> array bounds [-Werror=array-bounds] >>> >>> Fixes: b87089b0bb19 ("test/rcu: add API and functional tests") >>> Cc: stable@dpdk.org >>> >>> Signed-off-by: Honnappa Nagarahalli >>> Reviewed-by: Ruifeng Wang Tested-by: Lukasz Wojciechowski Reviewed-by: Lukasz Wojciechowski >>> --- >>> app/test/test_rcu_qsbr.c | 56 +++++++++++++++++++++++---------------- >> - >>> 1 file changed, 33 insertions(+), 23 deletions(-) >>> >>> diff --git a/app/test/test_rcu_qsbr.c b/app/test/test_rcu_qsbr.c index >>> 0a9e5ecd1..848a68092 100644 >>> --- a/app/test/test_rcu_qsbr.c >>> +++ b/app/test/test_rcu_qsbr.c >>> @@ -286,13 +286,13 @@ static int >>> test_rcu_qsbr_start(void) >>> { >>> uint64_t token; >>> - int i; >>> + unsigned int i; >>> >>> printf("\nTest rte_rcu_qsbr_start()\n"); >>> >>> rte_rcu_qsbr_init(t[0], RTE_MAX_LCORE); >>> >>> - for (i = 0; i < 3; i++) >>> + for (i = 0; i < num_cores; i++) >>> rte_rcu_qsbr_thread_register(t[0], enabled_core_ids[i]); >>> >>> token = rte_rcu_qsbr_start(t[0]); >>> @@ -306,14 +306,18 @@ test_rcu_qsbr_check_reader(void *arg) >>> { >>> struct rte_rcu_qsbr *temp; >>> uint8_t read_type = (uint8_t)((uintptr_t)arg); >>> + unsigned int i; >>> >>> temp = t[read_type]; >>> >>> /* Update quiescent state counter */ >>> - rte_rcu_qsbr_quiescent(temp, enabled_core_ids[0]); >>> - rte_rcu_qsbr_quiescent(temp, enabled_core_ids[1]); >>> - rte_rcu_qsbr_thread_unregister(temp, enabled_core_ids[2]); >>> - rte_rcu_qsbr_quiescent(temp, enabled_core_ids[3]); >>> + for (i = 0; i < num_cores; i++) { >>> + if (i % 2 == 0) >>> + rte_rcu_qsbr_quiescent(temp, enabled_core_ids[i]); >>> + else >>> + rte_rcu_qsbr_thread_unregister(temp, >>> + enabled_core_ids[i]); >>> + } >>> return 0; >>> } >>> >>> @@ -324,7 +328,8 @@ test_rcu_qsbr_check_reader(void *arg) >>> static int >>> test_rcu_qsbr_check(void) >>> { >>> - int i, ret; >>> + int ret; >>> + unsigned int i; >>> uint64_t token; >>> >>> printf("\nTest rte_rcu_qsbr_check()\n"); @@ -342,7 +347,7 @@ >>> test_rcu_qsbr_check(void) >>> ret = rte_rcu_qsbr_check(t[0], token, true); >>> TEST_RCU_QSBR_RETURN_IF_ERROR((ret == 0), "Blocking QSBR >> check"); >>> - for (i = 0; i < 3; i++) >>> + for (i = 0; i < num_cores; i++) >>> rte_rcu_qsbr_thread_register(t[0], enabled_core_ids[i]); >>> >>> ret = rte_rcu_qsbr_check(t[0], token, false); @@ -357,7 +362,7 @@ >>> test_rcu_qsbr_check(void) >>> /* Threads are offline, hence this should pass */ >>> TEST_RCU_QSBR_RETURN_IF_ERROR((ret == 0), "Non-blocking QSBR >>> check"); >>> >>> - for (i = 0; i < 3; i++) >>> + for (i = 0; i < num_cores; i++) >>> rte_rcu_qsbr_thread_unregister(t[0], enabled_core_ids[i]); >>> >>> ret = rte_rcu_qsbr_check(t[0], token, true); @@ -365,7 +370,7 @@ >>> test_rcu_qsbr_check(void) >>> >>> rte_rcu_qsbr_init(t[0], RTE_MAX_LCORE); >>> >>> - for (i = 0; i < 4; i++) >>> + for (i = 0; i < num_cores; i++) >>> rte_rcu_qsbr_thread_register(t[0], enabled_core_ids[i]); >>> >>> token = rte_rcu_qsbr_start(t[0]); >>> @@ -928,7 +933,7 @@ test_rcu_qsbr_dq_functional(int32_t size, int32_t >> esize, uint32_t flags) >>> static int >>> test_rcu_qsbr_dump(void) >>> { >>> - int i; >>> + unsigned int i; >>> >>> printf("\nTest rte_rcu_qsbr_dump()\n"); >>> >>> @@ -945,7 +950,7 @@ test_rcu_qsbr_dump(void) >>> >>> rte_rcu_qsbr_thread_register(t[0], enabled_core_ids[0]); >>> >>> - for (i = 1; i < 3; i++) >>> + for (i = 1; i < num_cores; i++) >>> rte_rcu_qsbr_thread_register(t[1], enabled_core_ids[i]); >>> >>> rte_rcu_qsbr_dump(stdout, t[0]); >>> @@ -1095,7 +1100,7 @@ test_rcu_qsbr_sw_sv_3qs(void) >>> { >>> uint64_t token[3]; >>> uint32_t c; >>> - int i; >>> + int i, num_readers; >>> int32_t pos[3]; >>> >>> writer_done = 0; >>> @@ -1118,7 +1123,11 @@ test_rcu_qsbr_sw_sv_3qs(void) >>> thread_info[0].ih = 0; >>> >>> /* Reader threads are launched */ >>> - for (i = 0; i < 4; i++) >>> + /* Keep the number of reader threads low to reduce >>> + * the execution time. >>> + */ >>> + num_readers = num_cores < 4 ? num_cores : 4; >>> + for (i = 0; i < num_readers; i++) >>> rte_eal_remote_launch(test_rcu_qsbr_reader, >> &thread_info[0], >>> enabled_core_ids[i]); >>> >>> @@ -1151,7 +1160,7 @@ test_rcu_qsbr_sw_sv_3qs(void) >>> >>> /* Check the quiescent state status */ >>> rte_rcu_qsbr_check(t[0], token[0], true); >>> - for (i = 0; i < 4; i++) { >>> + for (i = 0; i < num_readers; i++) { >>> c = hash_data[0][0][enabled_core_ids[i]]; >>> if (c != COUNTER_VALUE && c != 0) { >>> printf("Reader lcore %d did not complete #0 = %d\n", >> @@ -1169,7 >>> +1178,7 @@ test_rcu_qsbr_sw_sv_3qs(void) >>> >>> /* Check the quiescent state status */ >>> rte_rcu_qsbr_check(t[0], token[1], true); >>> - for (i = 0; i < 4; i++) { >>> + for (i = 0; i < num_readers; i++) { >>> c = hash_data[0][3][enabled_core_ids[i]]; >>> if (c != COUNTER_VALUE && c != 0) { >>> printf("Reader lcore %d did not complete #3 = %d\n", >> @@ -1187,7 >>> +1196,7 @@ test_rcu_qsbr_sw_sv_3qs(void) >>> >>> /* Check the quiescent state status */ >>> rte_rcu_qsbr_check(t[0], token[2], true); >>> - for (i = 0; i < 4; i++) { >>> + for (i = 0; i < num_readers; i++) { >>> c = hash_data[0][6][enabled_core_ids[i]]; >>> if (c != COUNTER_VALUE && c != 0) { >>> printf("Reader lcore %d did not complete #6 = %d\n", >> @@ -1206,7 >>> +1215,7 @@ test_rcu_qsbr_sw_sv_3qs(void) >>> writer_done = 1; >>> >>> /* Wait and check return value from reader threads */ >>> - for (i = 0; i < 4; i++) >>> + for (i = 0; i < num_readers; i++) >>> if (rte_eal_wait_lcore(enabled_core_ids[i]) < 0) >>> goto error; >>> rte_hash_free(h[0]); >>> @@ -1236,6 +1245,12 @@ test_rcu_qsbr_mw_mv_mqs(void) >>> unsigned int i, j; >>> unsigned int test_cores; >>> >>> + if (RTE_MAX_LCORE < 5 || num_cores < 4) { >>> + printf("Not enough cores for %s, expecting at least 5\n", >>> + __func__); >>> + return TEST_SKIPPED; >>> + } >>> + >>> writer_done = 0; >>> test_cores = num_cores / 4; >>> test_cores = test_cores * 4; >>> @@ -1321,11 +1336,6 @@ test_rcu_qsbr_main(void) >>> { >>> uint16_t core_id; >>> >>> - if (rte_lcore_count() < 5) { >>> - printf("Not enough cores for rcu_qsbr_autotest, expecting at >> least 5\n"); >>> - return TEST_SKIPPED; >>> - } >>> - >>> num_cores = 0; >>> RTE_LCORE_FOREACH_SLAVE(core_id) { >>> enabled_core_ids[num_cores] = core_id; >> -- >> Lukasz Wojciechowski >> Principal Software Engineer >> >> Samsung R&D Institute Poland >> Samsung Electronics >> Office +48 22 377 88 25 >> l.wojciechow@partner.samsung.com -- Lukasz Wojciechowski Principal Software Engineer Samsung R&D Institute Poland Samsung Electronics Office +48 22 377 88 25 l.wojciechow@partner.samsung.com