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 EC7A2A04C7 for ; Tue, 15 Sep 2020 21:35:01 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AB7AC1C119; Tue, 15 Sep 2020 21:35:01 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 566731C0D2 for ; Tue, 15 Sep 2020 21:34:59 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200915193458euoutp020f7e2e9ef19a66cf62da37a05508b043~1DA5pXw4m2999829998euoutp02Z for ; Tue, 15 Sep 2020 19:34:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200915193458euoutp020f7e2e9ef19a66cf62da37a05508b043~1DA5pXw4m2999829998euoutp02Z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1600198498; bh=eymXJujej9PG1zGL1zp62MJRAkbOY/KHhs1VGhD++7o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Bi9W1JgsuO3coND+uz+Wcg+noBHmkQcHC2rdtZM4s1hbC9rsZWxh7bwrEGiU9sI7R gUwH2qnO7uCck8t5Ft5D8CHrceBvIe2Vj0kwx/yic5Xb2o9uG1MlIt0u/zZYHwqu4Q MjKuXaWJll/cJj1LhCExuIqbaQQ3wKOMFpxgdJio= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200915193458eucas1p284fce0e944445a8b5178e11fee8345c4~1DA5bYxUg0572705727eucas1p2i; Tue, 15 Sep 2020 19:34:58 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id AE.C6.06318.167116F5; Tue, 15 Sep 2020 20:34:58 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200915193457eucas1p2adbe25c41a0e4ef16c029e7bff104503~1DA4OMK9D0573405734eucas1p2o; Tue, 15 Sep 2020 19:34:57 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200915193457eusmtrp157bc5606dc50e94efea6eed9a7f3ab6e~1DA4NAo-j1473114731eusmtrp18; Tue, 15 Sep 2020 19:34:57 +0000 (GMT) X-AuditID: cbfec7f5-371ff700000018ae-24-5f611761b579 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 59.6C.06017.167116F5; Tue, 15 Sep 2020 20:34:57 +0100 (BST) Received: from Padamandas.fritz.box (unknown [106.210.88.70]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20200915193456eusmtip2258564de43d3832eafc8bce3d3ea91d6~1DA3rid021759817598eusmtip2f; Tue, 15 Sep 2020 19:34:56 +0000 (GMT) From: Lukasz Wojciechowski To: David Hunt , Bruce Richardson Cc: dev@dpdk.org, l.wojciechow@partner.samsung.com, stable@dpdk.org Date: Tue, 15 Sep 2020 21:34:44 +0200 Message-Id: <20200915193449.13310-2-l.wojciechow@partner.samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200915193449.13310-1-l.wojciechow@partner.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrKIsWRmVeSWpSXmKPExsWy7djP87pJ4onxBnP2MFncWGVv0TfpI5PF u0/bmSye9axjtPjX8YfdgdXj14KlrB6L97xk8jj4bg9TAHMUl01Kak5mWWqRvl0CV0bLqgdM BR8lK1bu3cXYwHhTpIuRk0NCwETi7NW97F2MXBxCAisYJc7PesIK4XxhlFj27QxU5jOjxJR5 XYwwLX/P3IGqWs4o0TfhCQtIQkjgE6PEmReqIDabgK3EkZlfWUFsEYEwiebmvUA1HBzMAs4S T76ygZjCAk4ShxrSQCpYBFQlji3oZQKxeQVcJTau+csCsUpeYvWGA8wgNqeAm8TVj7OZQdZK CFxnk5h+YTcTyBwJAReJM0cKIeqFJV4d38IOYctInJ7cwwJRv41R4urvn4wQzn5Gieu9K6Cq rCUO//vNBnGbpsT6XfoQYUeJiX9OM0LM55O48VYQJMwMZE7aNp0ZIswr0dEmBFGtJ/G0Zyoj zNo/a59Ane8hsebVXWZISM1klPi4aAXrBEb5WQjLFjAyrmIUTy0tzk1PLTbOSy3XK07MLS7N S9dLzs/dxAiM/NP/jn/dwbjvT9IhRgEORiUe3gW3E+KFWBPLiitzDzFKcDArifA6nT0dJ8Sb klhZlVqUH19UmpNafIhRmoNFSZzXeNHLWCGB9MSS1OzU1ILUIpgsEwenVAPjbqPFim5Jxk9y q2vKLCTfZtdk6K5v2hC62kBj28HTCUdKi2ff/f13r5i+fkXFV4VYo4N6e38E/rZWj30j4mmp uyecw9x/1xfJm7OOTnwR6a5uu3DipOcVb96sXNYRyBaRe2KbpsB7iZdLfE/X2X20uDLRPG/O HP2tHxddmjsv2oTveMXHWq37SizFGYmGWsxFxYkAKvaY5/gCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrGLMWRmVeSWpSXmKPExsVy+t/xe7qJ4onxBidnsljcWGVv0TfpI5PF u0/bmSye9axjtPjX8YfdgdXj14KlrB6L97xk8jj4bg9TAHOUnk1RfmlJqkJGfnGJrVK0oYWR nqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqRvl2CXkbLqgdMBR8lK1bu3cXYwHhTpIuRk0NC wETi75k7rF2MXBxCAksZJV7euc7YxcgBlJCR+HBJAKJGWOLPtS42iJoPjBJvNxxhB0mwCdhK HJn5lRWkXkQgTOLESn+QMLOAu8SWxVOZQcLCAk4ShxrSQMIsAqoSxxb0MoHYvAKuEhvX/GWB GC8vsXrDAWYQm1PATeLqx9lgthBQzeKT59knMPItYGRYxSiSWlqcm55bbKRXnJhbXJqXrpec n7uJERiG24793LKDsetd8CFGAQ5GJR7eBbcT4oVYE8uKK3MPMUpwMCuJ8DqdPR0nxJuSWFmV WpQfX1Sak1p8iNEU6KiJzFKiyfnAGMkriTc0NTS3sDQ0NzY3NrNQEuftEDgYIySQnliSmp2a WpBaBNPHxMEp1cAorW817dAz3uViO1Z3JBi8rOrZuuCorLu9cxhzqGfGrM5cf+d5yusjDRgV XxT+mnn5qMONmt7+16v3fpp/X7eyjlUmcrHyrd7/L3sy7DlmL3y3KnrhZPdFfof8jZZWqHlN 1hbfeMUmvyiUk9GtZ0OpEXssb/CKMJeLHUt5F5VP9/TUDpx4jU+JpTgj0VCLuag4EQCu+8jB WQIAAA== X-CMS-MailID: 20200915193457eucas1p2adbe25c41a0e4ef16c029e7bff104503 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20200915193457eucas1p2adbe25c41a0e4ef16c029e7bff104503 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200915193457eucas1p2adbe25c41a0e4ef16c029e7bff104503 References: <20200915193449.13310-1-l.wojciechow@partner.samsung.com> Subject: [dpdk-stable] [PATCH v1 1/6] app/test: fix deadlock in distributor test 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" The sanity test with worker shutdown delegates all bufs to be processed by a single lcore worker, then it freezes one of the lcore workers and continues to send more bufs. Problem occurred if freezed lcore is the same as the one that is processing the mbufs. The lcore processing mbufs might be different every time test is launched. This is caused by keeping the value of wkr static variable in rte_distributor_process function between running test cases. Test freezed always lcore with 0 id. The patch changes avoids possible collision by freezing lcore with zero_idx. The lcore that receives the data updates the zero_idx, so it is not freezed itself. To reproduce the issue fixed by this patch, please run distributor_autotest command in test app several times in a row. Fixes: c3eabff124e6 ("distributor: add unit tests") Cc: bruce.richardson@intel.com Cc: stable@dpdk.org Signed-off-by: Lukasz Wojciechowski --- app/test/test_distributor.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c index ba1f81cf8..35b25463a 100644 --- a/app/test/test_distributor.c +++ b/app/test/test_distributor.c @@ -28,6 +28,7 @@ struct worker_params worker_params; static volatile int quit; /**< general quit variable for all threads */ static volatile int zero_quit; /**< var for when we just want thr0 to quit*/ static volatile unsigned worker_idx; +static volatile unsigned zero_idx; struct worker_stats { volatile unsigned handled_packets; @@ -346,27 +347,43 @@ handle_work_for_shutdown_test(void *arg) unsigned int total = 0; unsigned int i; unsigned int returned = 0; + unsigned int zero_id = 0; const unsigned int id = __atomic_fetch_add(&worker_idx, 1, __ATOMIC_RELAXED); num = rte_distributor_get_pkt(d, id, buf, buf, num); + zero_id = __atomic_load_n(&zero_idx, __ATOMIC_ACQUIRE); + if (id == zero_id && num > 0) { + zero_id = (zero_id + 1) % __atomic_load_n(&worker_idx, + __ATOMIC_ACQUIRE); + __atomic_store_n(&zero_idx, zero_id, __ATOMIC_RELEASE); + } + /* wait for quit single globally, or for worker zero, wait * for zero_quit */ - while (!quit && !(id == 0 && zero_quit)) { + while (!quit && !(id == zero_id && zero_quit)) { worker_stats[id].handled_packets += num; count += num; for (i = 0; i < num; i++) rte_pktmbuf_free(buf[i]); num = rte_distributor_get_pkt(d, id, buf, buf, num); + + zero_id = __atomic_load_n(&zero_idx, __ATOMIC_ACQUIRE); + if (id == zero_id && num > 0) { + zero_id = (zero_id + 1) % __atomic_load_n(&worker_idx, + __ATOMIC_ACQUIRE); + __atomic_store_n(&zero_idx, zero_id, __ATOMIC_RELEASE); + } + total += num; } worker_stats[id].handled_packets += num; count += num; returned = rte_distributor_return_pkt(d, id, buf, num); - if (id == 0) { + if (id == zero_id) { /* for worker zero, allow it to restart to pick up last packet * when all workers are shutting down. */ @@ -586,6 +603,7 @@ quit_workers(struct worker_params *wp, struct rte_mempool *p) rte_eal_mp_wait_lcore(); quit = 0; worker_idx = 0; + zero_idx = 0; } static int -- 2.17.1