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 DAE87A04DC for ; Tue, 20 Oct 2020 02:07:38 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A0567BBE0; Tue, 20 Oct 2020 02:07:37 +0200 (CEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by dpdk.org (Postfix) with ESMTP id 2F3BBBBE0 for ; Tue, 20 Oct 2020 02:07:37 +0200 (CEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20201020000719euoutp014cac469ac81155a6effa35ea0e624f41~-iqZWRLtQ1042910429euoutp019 for ; Tue, 20 Oct 2020 00:07:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20201020000719euoutp014cac469ac81155a6effa35ea0e624f41~-iqZWRLtQ1042910429euoutp019 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1603152439; bh=ap3gk25BZE1crFzvhH+Ggm2c7NGzhA9vUshx9p68Qss=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=U4xbRv7jJgfrWOCdG72UOssBKJY6JAjY1z8Je93MrgHxXXGQKIG0aoH/eaFXXJnII xrvfnyqN9vaZOkdFS9qgpPy6dYwsUN/dR+6MxEHN6QzSW4scWPyWpsadLhvvsajPA5 O2aWiS1nmBMJsi4dtSdJCua9imJMG0R/JeapfAAM= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20201020000703eucas1p2c9e703e7edd43c8f3f8e734728228824~-iqKo2lOV2475624756eucas1p2s; Tue, 20 Oct 2020 00:07:03 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id AF.66.06318.72A2E8F5; Tue, 20 Oct 2020 01:07:03 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20201020000702eucas1p2e21f178c6457996597cf3cd0cb8ccf85~-iqJj6ml-3028030280eucas1p28; Tue, 20 Oct 2020 00:07:02 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20201020000702eusmtrp2eb11d07f66a502b768e33579908c2512~-iqJjRzAa0478304783eusmtrp2z; Tue, 20 Oct 2020 00:07:02 +0000 (GMT) X-AuditID: cbfec7f5-371ff700000018ae-fb-5f8e2a279761 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 3F.F6.06314.62A2E8F5; Tue, 20 Oct 2020 01:07:02 +0100 (BST) Received: from [106.210.88.70] (unknown [106.210.88.70]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20201020000701eusmtip2eb0545c70a7aeae9a512b7606cd872c4~-iqIsMwmv1410614106eusmtip2R; Tue, 20 Oct 2020 00:07:01 +0000 (GMT) To: Honnappa Nagarahalli , dev@dpdk.org, john.mcnamara@intel.com Cc: ruifeng.wang@arm.com, juraj.linkes@pantheon.tech, david.marchand@redhat.com, nd@arm.com, stable@dpdk.org, "\"'Lukasz Wojciechowski'\"," From: Lukasz Wojciechowski Message-ID: <791ffc96-8d87-5783-c596-92e21cdda913@partner.samsung.com> Date: Tue, 20 Oct 2020 02:06:59 +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: <20201016060349.19940-1-honnappa.nagarahalli@arm.com> Content-Transfer-Encoding: 8bit Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA02SbUhTYRTHObt3d3fDyW0qO2kSDCp60VYKXSrDpGx9iKJAeqH0mjeL3Kpd tbKIwBW2VCJa4RQ1RVxhbytnxrQ2Z6tMimhp+qHEl0rTQBNZidb1Jvntd87zO5zn//DQhKZR HkkfMWXzZhOXpaNUpOt58E3MkmXFqfreMh3b4LBS7Mhog4wt6bco2Dfl9XK2xucDdqDwLrCv awsJNlDcSbBTBZOKRKWhrrwODL8qa+SGavc3mcFj6wKDZ8QtM/xoDlA7qL2q9Rl81pFc3rxy Q5rqcHe+TX58aOOpsp528jyUxltBSSMTjwXvGsEKKlrDOADf2r/IpeIn4E3PMCFaGmYMsGma twI9M9HRFSc5tYAV498pyRkGdE4YRQ5j9mDraB8h+uFMGtZeXyf6BOMEvNpdMeNTTAL6Ssbl IquZZOzovaUQmWQWocP9TCZyBHMArzywkJIzD1+W9M2wkknCz0/9M0wwCzG/vpSQWItdfRUy cRkyrxT4PugBKeYmtFwIyCQOw0H/I4XEC3C6cXbABRj4HQSpeArYUeT4Z63DlqnflBiHYJbi vScrpfZGvGx7QUmvEoqdw/OkS4TiVdcNQmqrseCiRrJjsb/QBrNrJ+/0kVdAZ58TzT4njn1O HPv/vZVA3gYtnyMYM3khzsSfjBU4o5Bjyow9eMzohL8fqm3KP/4YmifTvcDQoAtRJ9YUpWrk XK5w2ugFpAlduDqpve2ARp3Bnc7jzcdSzTlZvOCFKJrUadVxVd/2a5hMLps/yvPHefPsqYxW Rp6HkEMtBBnl8xxU5ewryzt56candigLja7Wmz+w3tyE9Bh3nbV7pxbCJozlGSnB0oYtJ8Z2 rTnXFJXcNrX7Zavjrl6/uNL/Yu2P9MD2RmWE0/GVS31WUPnQP1ScMmYTLlbNP6N1nV29+uNg 9IpghGvJ820Gy0DPta3Lj47e31zuAx0pHOZWLSPMAvcHyqbda0wDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrLIsWRmVeSWpSXmKPExsVy+t/xe7pqWn3xBqvmCltsX9HFZvHu03Ym i5lPW9gtzs/bymqx9MgRRotnPesYLc4s72G2uNp3g9niX8cfdgdOjzXz1jB6/FqwlNVj8Z6X TB4Hp95i9Dj4bg+Tx/t9V9kC2KL0bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxM lfTtbFJSczLLUov07RL0Mm43T2UteO1YMefhWZYGxtkmXYwcHBICJhLXbxl3MXJxCAksZZSY 3X2ZCSIuI/HhkkAXIyeQKSzx51oXG0TNa0aJye92M4MkhAUiJY5+egJmiwgkSHyb3wZWxCyw iVFizrufjBAdUxklVp9cyg5SxSZgK3Fk5ldWEJtXwE3i+uOVYHEWAVWJFXsOMIHYogJxEj8m 9rJB1AhKnJz5hAXE5hRwkniw/ziYzSxgJjFv80NmCFteonnrbChbXOLWk/lMExiFZiFpn4Wk ZRaSlllIWhYwsqxiFEktLc5Nzy021CtOzC0uzUvXS87P3cQIjMptx35u3sF4aWPwIUYBDkYl Ht4Xi3rjhVgTy4orcw8xSnAwK4nwOp09HSfEm5JYWZValB9fVJqTWnyI0RTouYnMUqLJ+cCE kVcSb2hqaG5haWhubG5sZqEkztshcDBGSCA9sSQ1OzW1ILUIpo+Jg1OqgVH0zi658D3RttYK q9ZfZ43LXcfSyFJxeS7TiWonxo9cuyadiFM4zJDss6IyKNRkIf+BBUybEidfDtjWkN4aU7KB NetdVpPKAdbuDN8DyfkXi5rPS0g8+vIxq6AuYf6djgc1a8Ur34aadq+5Z+uVW6C5wHtN9XaZ hLPPTl9Sn3h54pl/98ozupRYijMSDbWYi4oTAeuARNrgAgAA X-CMS-MailID: 20201020000702eucas1p2e21f178c6457996597cf3cd0cb8ccf85 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> Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH 1/2] test/rcu: fix array subscript is above array bounds X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi Honnappa, I verified building and testing and all the warnings/errors disappear for RTE_MAX_LCORE >= 2 and tests pass. I wonder, if it is possible to set RTE_MAX_LCORE = 1 ? In such case there are still few places with array bounds exceedings: Compiling C object 'app/test/3062f5d@@dpdk-test@exe/test_rcu_qsbr.c.o'. ../app/test/test_rcu_qsbr.c: In function ‘test_rcu_qsbr_check_reader’: ../app/test/test_rcu_qsbr.c:319:24: warning: array subscript is above array bounds [-Warray-bounds]         enabled_core_ids[i]);         ~~~~~~~~~~~~~~~~^~~ ../app/test/test_rcu_qsbr.c: In function ‘test_rcu_qsbr_main’: ../app/test/test_rcu_qsbr.c:946:2: warning: array subscript is above array bounds [-Warray-bounds]   rte_rcu_qsbr_init(t[1], RTE_MAX_LCORE);   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../app/test/test_rcu_qsbr.c:954:3: warning: array subscript is above array bounds [-Warray-bounds]    rte_rcu_qsbr_thread_register(t[1], enabled_core_ids[i]); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../app/test/test_rcu_qsbr.c:957:2: warning: array subscript is above array bounds [-Warray-bounds]   rte_rcu_qsbr_dump(stdout, t[1]);   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../app/test/test_rcu_qsbr.c:486:53: warning: array subscript is above array bounds [-Warray-bounds]   rte_rcu_qsbr_thread_register(t[0], enabled_core_ids[1]);                                      ~~~~~~~~~~~~~~~~^~~ ...and few more in other files. Best regards Lukasz W dniu 16.10.2020 o 08:03, Honnappa Nagarahalli pisze: > 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 > --- > 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