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 2F05AA04BC for ; Sat, 10 Oct 2020 00:03:16 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0A19E1D64E; Sat, 10 Oct 2020 00:03:04 +0200 (CEST) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 769C01D5F3 for ; Sat, 10 Oct 2020 00:02:58 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20201009220243euoutp022a8cf27046182a395f77b18f203c8df3~8cgwD3fTT2454124541euoutp02G for ; Fri, 9 Oct 2020 22:02:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20201009220243euoutp022a8cf27046182a395f77b18f203c8df3~8cgwD3fTT2454124541euoutp02G DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1602280963; bh=LemR1YjnE+c23RXwEQzxMBn4x6DVQHDmQWboTCBU/MI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AT824QkuVUIg0cN39bePqggsUi1Mx8F//b7ViKY9CYBiNvnqadUI0wHb4EJkBXPAX qqm2DAODbp+v54xLWIx4nSRPwn6FNjYVyEXSgUNXHnxIsRWm0MXCiRGDcfhNAOk3fG ts5pWYqjDoGUtIq833842SlPM51dFkk7t4gosp70= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20201009220235eucas1p2afe71e16cfd3ef4f3d7e8e6594750dc4~8cgpKgXEO1920419204eucas1p2T; Fri, 9 Oct 2020 22:02:35 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 3E.E2.06318.BFDD08F5; Fri, 9 Oct 2020 23:02:35 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20201009220235eucas1p17ded8b5bb42f2fef159a5715ef6fbca7~8cgozEMe71072710727eucas1p1i; Fri, 9 Oct 2020 22:02:35 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20201009220235eusmtrp2ade60c4a998e0dedbb4e95c7727db4aa~8cgoykv6p1642116421eusmtrp2c; Fri, 9 Oct 2020 22:02:35 +0000 (GMT) X-AuditID: cbfec7f5-38bff700000018ae-9d-5f80ddfb647a Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 33.5F.06017.BFDD08F5; Fri, 9 Oct 2020 23:02:35 +0100 (BST) Received: from Padamandas.fritz.box (unknown [106.210.88.70]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20201009220233eusmtip152f68bcceaf3e7c2c4d5bba1c67d8df0~8cgm2nqZO1990219902eusmtip1G; Fri, 9 Oct 2020 22:02:33 +0000 (GMT) From: Lukasz Wojciechowski To: David Hunt , Bruce Richardson Cc: dev@dpdk.org, l.wojciechow@partner.samsung.com, stable@dpdk.org Date: Sat, 10 Oct 2020 00:01:52 +0200 Message-Id: <20201009220202.20834-6-l.wojciechow@partner.samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201009220202.20834-1-l.wojciechow@partner.samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBIsWRmVeSWpSXmKPExsWy7djPc7q/7zbEG9z6rGdxY5W9Rd+kj0wW 7z5tZ7J41rOO0eJfxx92B1aPXwuWsnos3vOSyePguz1MAcxRXDYpqTmZZalF+nYJXBlPnx1l KTgrVXFo/SbGBsbtol2MnBwSAiYS53ecYuli5OIQEljBKNH58AEThPOFUeLg3OuMEM5nRolb 85+wwbT0b90JVbWcUWLR20/MEM4nRomb7c8YQarYBGwljsz8ygpiiwiESTQ37wVawsHBLOAs 8eQr2CBhAXeJeXdugpWzCKhKTOmaxgxi8wq4SmxtPMUOsUxeYvWGA2BxTgE3idZdy8BulRC4 zCbxavd2VogiF4l7P39DXScs8er4FqhmGYn/O+czQTRsY5S4+vsnI4Szn1Hieu8KqCpricP/ QLpBrtOUWL9LHyLsKLHh7jMmkLCEAJ/EjbeCIGFmIHPStunMEGFeiY42IYhqPYmnPVMZYdb+ WfuEBcL2kFi/ZDM7JHyuMkpM6bvBOIFRfhbCsgWMjKsYxVNLi3PTU4uN81LL9YoTc4tL89L1 kvNzNzEC4//0v+NfdzDu+5N0iFGAg1GJh7chuSFeiDWxrLgy9xCjBAezkgiv09nTcUK8KYmV ValF+fFFpTmpxYcYpTlYlMR5jRe9jBUSSE8sSc1OTS1ILYLJMnFwSjUwMteGBS9kYPwqr2S7 XpDp3Ne09qRbL0tSn2zelese6xAclHXsB0v8isfRejcr18hOvm4kmMQz071wR/u0mJWrK2uv HJq9hfXC6y23t3W6KTrkXHmw+OUUKQXhpZLss9021h/Xu6y26N/+yn+i7WzXS3R+p0wMj5aR fuWre35ZZXG/mKtWrP8WJZbijERDLeai4kQA91g9gvsCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrBLMWRmVeSWpSXmKPExsVy+t/xu7q/7zbEG8y5IG9xY5W9Rd+kj0wW 7z5tZ7J41rOO0eJfxx92B1aPXwuWsnos3vOSyePguz1MAcxRejZF+aUlqQoZ+cUltkrRhhZG eoaWFnpGJpZ6hsbmsVZGpkr6djYpqTmZZalF+nYJehlPnx1lKTgrVXFo/SbGBsbtol2MnBwS AiYS/Vt3MnUxcnEICSxllLjat4K5i5EDKCEj8eGSAESNsMSfa11sEDUfGCWWvf3BDJJgE7CV ODLzKytIvYhAmMSJlf4gYWYBd4kti6eClQgD2fPu3GQEsVkEVCWmdE0Di/MKuEpsbTzFDjFf XmL1hgNgcU4BN4nWXctYIHY1MkpsOfCSeQIj3wJGhlWMIqmlxbnpucVGesWJucWleel6yfm5 mxiBobjt2M8tOxi73gUfYhTgYFTi4dVIbIgXYk0sK67MPcQowcGsJMLrdPZ0nBBvSmJlVWpR fnxRaU5q8SFGU6CrJjJLiSbnA+MkryTe0NTQ3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampB ahFMHxMHp1QDo5cUv/+HnxWHnocEOfcmCazffZjLrZY/wi5ukmRXjV5D3bw9JptUTx1Zkdcm wLmOfcKLe2yxzr6+th0592S+/3Nf8vL8iSf+W28HZcySaTNt7apm2nHzTYHbVr/0uhVFshIM GrM7fdxvPj+s7cLsy+p2olfzx5zJfoVT/M2WSyxfUrxq6+cXSizFGYmGWsxFxYkAFSUdbFsC AAA= X-CMS-MailID: 20201009220235eucas1p17ded8b5bb42f2fef159a5715ef6fbca7 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20201009220235eucas1p17ded8b5bb42f2fef159a5715ef6fbca7 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20201009220235eucas1p17ded8b5bb42f2fef159a5715ef6fbca7 References: <20201008052323.11547-1-l.wojciechow@partner.samsung.com> <20201009220202.20834-1-l.wojciechow@partner.samsung.com> Subject: [dpdk-stable] [PATCH v6 05/15] 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