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 8CFCEA04B5 for ; Wed, 23 Sep 2020 03:47:21 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 60AD21DA86; Wed, 23 Sep 2020 03:47:21 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 2CE001DA8C for ; Wed, 23 Sep 2020 03:47:19 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200923014719euoutp02fc379bb9483855bdfc13710c19c48e63~3RnAD35Ut1896818968euoutp02u for ; Wed, 23 Sep 2020 01:47:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200923014719euoutp02fc379bb9483855bdfc13710c19c48e63~3RnAD35Ut1896818968euoutp02u DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1600825639; bh=eymXJujej9PG1zGL1zp62MJRAkbOY/KHhs1VGhD++7o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M0QXjBgwMkHtigcIHAOI6WQrTTvmbct7+FdIedUhkNYZ6I7GfXD9Qwya4rutYg4RN bv/MLnIPz1Tp506yO7QsT/TZml6k2yq94/zJJGqdeJejToeWWptRZlKWZPclWmqXMb 9InMV8D9JvhXomRpGqacZo4qJ+KJYZgN3/jEIND0= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200923014718eucas1p1e5150d8d18ac2d748c46acbfcaeb120f~3Rm-Lsax11652816528eucas1p1A; Wed, 23 Sep 2020 01:47:18 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id D5.AC.06318.629AA6F5; Wed, 23 Sep 2020 02:47:18 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200923014718eucas1p11fdcd774fef7b9e077e14e01c9f951d5~3Rm_51dsr2800828008eucas1p1n; Wed, 23 Sep 2020 01:47:18 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200923014718eusmtrp2090fb2494634c083cd9bda2593b1dc20~3Rm_5RPkV2054820548eusmtrp2P; Wed, 23 Sep 2020 01:47:18 +0000 (GMT) X-AuditID: cbfec7f5-38bff700000018ae-c7-5f6aa9264c26 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id D3.9A.06314.629AA6F5; Wed, 23 Sep 2020 02:47:18 +0100 (BST) Received: from Padamandas.fritz.box (unknown [106.210.88.70]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200923014717eusmtip10b9582f79af0a3f0c0aea12aa07425fd~3Rm_Iw4h40729307293eusmtip1N; Wed, 23 Sep 2020 01:47:17 +0000 (GMT) From: Lukasz Wojciechowski To: David Hunt , Bruce Richardson Cc: dev@dpdk.org, l.wojciechow@partner.samsung.com, stable@dpdk.org Date: Wed, 23 Sep 2020 03:47:06 +0200 Message-Id: <20200923014713.16932-2-l.wojciechow@partner.samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200923014713.16932-1-l.wojciechow@partner.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrKIsWRmVeSWpSXmKPExsWy7djP87pqK7PiDSZ+k7W4screom/SRyaL d5+2M1k861nHaPGv4w+7A6vHrwVLWT0W73nJ5HHw3R6mAOYoLpuU1JzMstQifbsEroyWVQ+Y Cj5KVqzcu4uxgfGmSBcjJ4eEgInErRlfGbsYuTiEBFYwSmy4+YIdwvnCKHHh2SFWCOczo8Sq nceZuxg5wFr2PjUH6RYSWM4o8XZiOETNJ0aJk5f2MoIk2ARsJY7M/MoKYosIhEk0N+9lAell FnCWePKVDSQsLOAkcbn5IROIzSKgKrHt2mxmEJtXwFWiu281M8R18hKrNxwAW8sp4Cbx9J88 yCoJgetsEr2L9kPVuEj0r9/DCmELS7w6voUdwpaR+L9zPhNEwzZGiau/fzJCOPsZJa73roCq spY4/O83G8RxmhLrd+lDhB0leqbsgfqXT+LGW0GQMDOQOWnbdKgwr0RHmxBEtZ7E056pjDBr /6x9wgJhe0g8XP6LGRI8VxklljxaxDaBUX4WwrIFjIyrGMVTS4tz01OLjfNSy/WKE3OLS/PS 9ZLzczcxAiP/9L/jX3cw7vuTdIhRgINRiYf3xZPMeCHWxLLiytxDjBIczEoivE5nT8cJ8aYk VlalFuXHF5XmpBYfYpTmYFES5zVe9DJWSCA9sSQ1OzW1ILUIJsvEwSnVwHg7bZrjLtttU7mu b7WJrgx3eCk3+2yUlaucg7faqXeCsud+8S6aUDOT+9y17tvT97qrqi6L+1pUxF3O0vLW23BD cnia8fHSjdOPOrt23pdwnrX7YVv+sn2/14WG/TcTMvDOVfJ7yXBS8fbWTecftHB9vzmrd8Kd uTHzaza/teCYk6nNEOed8FSJpTgj0VCLuag4EQAfHKPm+AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrGLMWRmVeSWpSXmKPExsVy+t/xu7pqK7PiDVpes1ncWGVv0TfpI5PF u0/bmSye9axjtPjX8YfdgdXj14KlrB6L97xk8jj4bg9TAHOUnk1RfmlJqkJGfnGJrVK0oYWR nqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqRvl2CXkbLqgdMBR8lK1bu3cXYwHhTpIuRg0NC wERi71PzLkYuDiGBpYwSix+fZoSIy0h8uCTQxcgJZApL/LnWxQZR84FRYknfORaQBJuArcSR mV9ZQepFBMIkTqz0BwkzC7hLbFk8lRnEFhZwkrjc/JAJxGYRUJXYdm02WJxXwFWiu281M8R8 eYnVGw4wg4zhFHCTePpPHmJVI6PEjIWv2Scw8i1gZFjFKJJaWpybnltsqFecmFtcmpeul5yf u4kRGIbbjv3cvIPx0sbgQ4wCHIxKPLwvnmTGC7EmlhVX5h5ilOBgVhLhdTp7Ok6INyWxsiq1 KD++qDQntfgQoynQUROZpUST84ExklcSb2hqaG5haWhubG5sZqEkztshcDBGSCA9sSQ1OzW1 ILUIpo+Jg1OqgbE03DT3xdW4XJ6ydzIXy9K2LBTZsvjJCoP8I71u2c/OyVw4nGQ0IVEpu39h /IG/LZPWJ7n02L3Y+Wbe8891rH9cZeMrTlvMcYuw/diXcqksf/ef/XvEvgiYL3y2UGL1+xfr Z68O8deU2bqFxaIn+otVQp7/n797k+xje9KnvJl6p85I+6GJYYoSS3FGoqEWc1FxIgAOqySe WQIAAA== X-CMS-MailID: 20200923014718eucas1p11fdcd774fef7b9e077e14e01c9f951d5 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20200923014718eucas1p11fdcd774fef7b9e077e14e01c9f951d5 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200923014718eucas1p11fdcd774fef7b9e077e14e01c9f951d5 References: <20200915193449.13310-1-l.wojciechow@partner.samsung.com> <20200923014713.16932-1-l.wojciechow@partner.samsung.com> Subject: [dpdk-stable] [PATCH v2 1/8] 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