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 BA0A8A04DB for ; Sat, 17 Oct 2020 05:08:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 89E4AE305; Sat, 17 Oct 2020 05:08:14 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 8A7D6E2B7 for ; Sat, 17 Oct 2020 05:07:42 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20201017030722euoutp02e87f5eddce62f37f4ef49c2f09f9e5d4~_qLvtU8vu2306523065euoutp02Y for ; Sat, 17 Oct 2020 03:07:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20201017030722euoutp02e87f5eddce62f37f4ef49c2f09f9e5d4~_qLvtU8vu2306523065euoutp02Y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1602904042; bh=LemR1YjnE+c23RXwEQzxMBn4x6DVQHDmQWboTCBU/MI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LKUFQ8ZGVdzFM4MpIj2knneOtKmS3hMaiyT8R3ThXYoA5AAxFKAQ17t+RwYiqLm6/ WVHcy1V2nu0GlA4b5btnxT9h7jzgM//zde+n3qvdMW0dv4ngVOUgMw0Qam/b/huPC1 hz3VxdsCYA69AXPkJjhSytLbz7XeGqwPs3RhAVPw= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20201017030713eucas1p2a2bfb6ab66a424ef7afa2882a619c88e~_qLnqGuKu1521315213eucas1p2X; Sat, 17 Oct 2020 03:07:13 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 72.42.05997.1EF5A8F5; Sat, 17 Oct 2020 04:07:13 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20201017030713eucas1p1173c2178e647be341db2da29078c8d5d~_qLnXDueq0898308983eucas1p15; Sat, 17 Oct 2020 03:07:13 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20201017030713eusmtrp23d5c410cb0a98dd956099e4fc4602e00~_qLnWj3FC2572125721eusmtrp2i; Sat, 17 Oct 2020 03:07:13 +0000 (GMT) X-AuditID: cbfec7f4-677ff7000000176d-bb-5f8a5fe1a42c Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id CA.99.06314.1EF5A8F5; Sat, 17 Oct 2020 04:07:13 +0100 (BST) Received: from localhost.localdomain (unknown [106.210.88.70]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20201017030712eusmtip18de3ab114528a40c48b1b9cb261e179f~_qLmlZ-KT3124931249eusmtip16; Sat, 17 Oct 2020 03:07:12 +0000 (GMT) From: Lukasz Wojciechowski To: David Hunt , Bruce Richardson Cc: dev@dpdk.org, l.wojciechow@partner.samsung.com, stable@dpdk.org Date: Sat, 17 Oct 2020 05:06:49 +0200 Message-Id: <20201017030701.16134-6-l.wojciechow@partner.samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201017030701.16134-1-l.wojciechow@partner.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPIsWRmVeSWpSXmKPExsWy7djP87oP47viDWa2GVjcWGVv0TfpI5PF u0/bmSye9axjtPjX8YfdgdXj14KlrB6L97xk8jj4bg9TAHMUl01Kak5mWWqRvl0CV8bTZ0dZ Cs5KVRxav4mxgXG7aBcjO4eEgInEdJsuRi4OIYEVjBK/th9j6WLkBHK+MEo87HGHsD8zSkyZ Vwdig5RPOX8BqmY5o8TJc7VwNfvmq4DYbAK2EkdmfmUFsUUEwiSam/cC1XNwMAs4Szz5ygYS FhZwl/h5ZSNYCYuAqsSR4wuZQWxeAVeJtStbWSFWyUus3nCAGaSVU8BNovG4K0T4OpvE1rPW IGEJAReJ7kO6EGFhiVfHt7BD2DIS/3fOZwL5SkJgG6PE1d8/GSGc/YwS13tXQFVZSxz+95sN 4jRNifW79CHCjhL3P85lgZjPJ3HjrSBImBnInLRtOjNEmFeio00IolpP4mnPVEaYtX/WPmGB sD0kZv5fwwQJ2KtAW183ME9glJ+FsGwBI+MqRvHU0uLc9NRio7zUcr3ixNzi0rx0veT83E2M wGg//e/4lx2Mu/4kHWIU4GBU4uHlWNoZL8SaWFZcmXuIUYKDWUmE1+ns6Tgh3pTEyqrUovz4 otKc1OJDjNIcLErivMaLXsYKCaQnlqRmp6YWpBbBZJk4OKUaGIPmZV0VLXgSocJ26MN6lX3W 7if8Xt8NafiW+mPaAZuGGFUD65u655favDQ+O53xSeWlVzoyG5xt13y5Xj1vxo2CrQ7ZxZHM 588vFmVqYv3M1CV3M0sllXuW5Z5doV+Y46/anzcofJfUxGDGkWmdeX/q7l15ZyrTvLev+i15 /Wx+b5nmJ6cbrEosxRmJhlrMRcWJAObys33yAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOLMWRmVeSWpSXmKPExsVy+t/xu7oP47viDV6fl7G4screom/SRyaL d5+2M1k861nHaPGv4w+7A6vHrwVLWT0W73nJ5HHw3R6mAOYoPZui/NKSVIWM/OISW6VoQwsj PUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQifbsEvYynz46yFJyVqji0fhNjA+N20S5GTg4J AROJKecvsHQxcnEICSxllJjx6hZ7FyMHUEJG4sMlAYgaYYk/17rYIGo+MkocmHmPESTBJmAr cWTmV1aQehGBMIkTK/1BwswC7hJbFk9lBrGFgeyfVzaygtgsAqoSR44vBIvzCrhKrF3Zygox X15i9YYDzCBjOAXcJBqPu0KsamSUODtrHcsERr4FjAyrGEVSS4tz03OLDfWKE3OLS/PS9ZLz czcxAgNx27Gfm3cwXtoYfIhRgINRiYd3w6LOeCHWxLLiytxDjBIczEoivE5nT8cJ8aYkVlal FuXHF5XmpBYfYjQFOmois5Rocj4wSvJK4g1NDc0tLA3Njc2NzSyUxHk7BA7GCAmkJ5akZqem FqQWwfQxcXBKNTDOXWe8ymniv6dbi52YlK2mb9m7MGVHeobLsuONja3LGBdcfrg6vH+vjF3i Y6FvJnqrd1R8/7Bv8425v53KUwpatfp0jQ8y7tkkv/T+909dhheX9tq/Kjw/84rEw/6N+w9/ 0a3gehEobGO/ZYa8IQPnu7VPXJa/Tg/Y0rbE7+SbgDi9zi3nj8u9VWIpzkg01GIuKk4EANeG M/1aAgAA X-CMS-MailID: 20201017030713eucas1p1173c2178e647be341db2da29078c8d5d X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20201017030713eucas1p1173c2178e647be341db2da29078c8d5d X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20201017030713eucas1p1173c2178e647be341db2da29078c8d5d References: <20201010160508.19709-1-l.wojciechow@partner.samsung.com> <20201017030701.16134-1-l.wojciechow@partner.samsung.com> Subject: [dpdk-stable] [PATCH v8 05/17] test/distributor: fix shutdown of busy worker 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. The freezed core shuts down first by calling rte_distributor_return_pkt(). The test intention is to verify if packets assigned to the shut down lcore will be reassigned to another worker. However the shutdown core was not always the one, that was processing packets. 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 stores the id of worker that is processing the data in zero_idx global atomic variable. This way the freezed lcore is always the proper one. Fixes: c3eabff124e6 ("distributor: add unit tests") Cc: bruce.richardson@intel.com Cc: stable@dpdk.org Signed-off-by: Lukasz Wojciechowski Tested-by: David Hunt --- app/test/test_distributor.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c index 52230d250..6cd7a2edd 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; @@ -340,26 +341,43 @@ handle_work_for_shutdown_test(void *arg) unsigned int total = 0; unsigned int i; unsigned int returned = 0; + unsigned int zero_id = 0; + unsigned int zero_unset; const unsigned int id = __atomic_fetch_add(&worker_idx, 1, __ATOMIC_RELAXED); num = rte_distributor_get_pkt(d, id, buf, NULL, 0); + if (num > 0) { + zero_unset = RTE_MAX_LCORE; + __atomic_compare_exchange_n(&zero_idx, &zero_unset, id, + false, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE); + } + zero_id = __atomic_load_n(&zero_idx, __ATOMIC_ACQUIRE); + /* 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, NULL, 0); + + if (num > 0) { + zero_unset = RTE_MAX_LCORE; + __atomic_compare_exchange_n(&zero_idx, &zero_unset, id, + false, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE); + } + zero_id = __atomic_load_n(&zero_idx, __ATOMIC_ACQUIRE); + 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. */ @@ -578,6 +596,7 @@ quit_workers(struct worker_params *wp, struct rte_mempool *p) rte_eal_mp_wait_lcore(); quit = 0; worker_idx = 0; + zero_idx = RTE_MAX_LCORE; } static int -- 2.17.1