get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/80238/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 80238,
    "url": "https://patches.dpdk.org/api/patches/80238/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20201009220202.20834-9-l.wojciechow@partner.samsung.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20201009220202.20834-9-l.wojciechow@partner.samsung.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201009220202.20834-9-l.wojciechow@partner.samsung.com",
    "date": "2020-10-09T22:01:55",
    "name": "[v6,08/15] test/distributor: fix freeing mbufs",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "c833d50616b7593806203c2c56145d4e9880cd10",
    "submitter": {
        "id": 1628,
        "url": "https://patches.dpdk.org/api/people/1628/?format=api",
        "name": "Lukasz Wojciechowski",
        "email": "l.wojciechow@partner.samsung.com"
    },
    "delegate": {
        "id": 24651,
        "url": "https://patches.dpdk.org/api/users/24651/?format=api",
        "username": "dmarchand",
        "first_name": "David",
        "last_name": "Marchand",
        "email": "david.marchand@redhat.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20201009220202.20834-9-l.wojciechow@partner.samsung.com/mbox/",
    "series": [
        {
            "id": 12840,
            "url": "https://patches.dpdk.org/api/series/12840/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=12840",
            "date": "2020-10-09T22:01:47",
            "name": "fix distributor synchronization issues",
            "version": 6,
            "mbox": "https://patches.dpdk.org/series/12840/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/80238/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/80238/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 648E1A04BC;\n\tSat, 10 Oct 2020 00:05:45 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 781CC1D666;\n\tSat, 10 Oct 2020 00:03:13 +0200 (CEST)",
            "from mailout1.w1.samsung.com (mailout1.w1.samsung.com\n [210.118.77.11]) by dpdk.org (Postfix) with ESMTP id 74C821D618\n for <dev@dpdk.org>; Sat, 10 Oct 2020 00:03:04 +0200 (CEST)",
            "from eucas1p1.samsung.com (unknown [182.198.249.206])\n by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id\n 20201009220253euoutp014a3fd5899781ee793530f82450e5c5eb~8cg5Tym_w2276922769euoutp01D\n for <dev@dpdk.org>; Fri,  9 Oct 2020 22:02:53 +0000 (GMT)",
            "from eusmges2new.samsung.com (unknown [203.254.199.244]) by\n eucas1p2.samsung.com (KnoxPortal) with ESMTP id\n 20201009220247eucas1p20d0a52f47db83ff7e9678188fe3df7b3~8cg0FHg2y1921319213eucas1p2V;\n Fri,  9 Oct 2020 22:02:47 +0000 (GMT)",
            "from eucas1p2.samsung.com ( [182.198.249.207]) by\n eusmges2new.samsung.com (EUCPMTA) with SMTP id 14.88.05997.70ED08F5; Fri,  9\n Oct 2020 23:02:47 +0100 (BST)",
            "from eusmtrp2.samsung.com (unknown [182.198.249.139]) by\n eucas1p1.samsung.com (KnoxPortal) with ESMTPA id\n 20201009220246eucas1p1283b16f1f54c572b5952ca9334d667da~8cgzJIvdh1723217232eucas1p1b;\n Fri,  9 Oct 2020 22:02:46 +0000 (GMT)",
            "from eusmgms1.samsung.com (unknown [182.198.249.179]) by\n eusmtrp2.samsung.com (KnoxPortal) with ESMTP id\n 20201009220246eusmtrp2be9e2334d175b3148dd2c2f0288e8c25~8cgzIoCdb1642116421eusmtrp2g;\n Fri,  9 Oct 2020 22:02:46 +0000 (GMT)",
            "from eusmtip1.samsung.com ( [203.254.199.221]) by\n eusmgms1.samsung.com (EUCPMTA) with SMTP id E3.E2.06314.60ED08F5; Fri,  9\n Oct 2020 23:02:46 +0100 (BST)",
            "from Padamandas.fritz.box (unknown [106.210.88.70]) by\n eusmtip1.samsung.com (KnoxPortal) with ESMTPA id\n 20201009220245eusmtip1cc58a4dbb2adbb93a8c5ea97fdeeeacf~8cgyTP6p51990219902eusmtip1I;\n Fri,  9 Oct 2020 22:02:45 +0000 (GMT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com\n 20201009220253euoutp014a3fd5899781ee793530f82450e5c5eb~8cg5Tym_w2276922769euoutp01D",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;\n s=mail20170921; t=1602280973;\n bh=XHBRFJdpy0VQOXDZHZktkwJ397h3dgSUtlAUFqe+eH4=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=A/FnxLYctm/owAeQX2scjU7lZFFhzRrbYRr9VSuWEMG4mHbevVV6e71Lh6cdtBOlD\n NvoMvgeYOqx63GOX+tWIMSxSpV/T7w3Ax8wYHsD96BNJO7aTcSL4fUYv75t1jWGdMc\n sDvH4rVdnwwp+SCVCRbpR54mcaT9+FZkG/tBHlPI=",
        "X-AuditID": "cbfec7f4-677ff7000000176d-03-5f80de07606f",
        "From": "Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>",
        "To": "David Hunt <david.hunt@intel.com>, Bruce Richardson\n <bruce.richardson@intel.com>",
        "Cc": "dev@dpdk.org, l.wojciechow@partner.samsung.com, stable@dpdk.org",
        "Date": "Sat, 10 Oct 2020 00:01:55 +0200",
        "Message-Id": "<20201009220202.20834-9-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": [
            "\n H4sIAAAAAAAAA+NgFnrGIsWRmVeSWpSXmKPExsWy7djP87rs9xriDWZ8VbC4screom/SRyaL\n d5+2M1k861nHaPGv4w+7A6vHrwVLWT0W73nJ5HHw3R6mAOYoLpuU1JzMstQifbsEroxTOx+y\n FswNqtj8dCt7A+NLxy5GDg4JAROJk5Ntuhi5OIQEVjBK9Kz/yQThfGGUuNj7lRXC+cwo8f3T\n JrYuRk6wjgezN4DZQgLLGSUu/4yHKPrEKHF/8R0WkASbgK3EkZkg3ZwcIgJhEs3Ne1lA1jEL\n OEs8+QrWKwxUcvDkZTCbRUBV4sqTTrByXgFXifsr70HtkpdYveEAM4jNKeAm0bprGQvILgmB\n y2wSK88uYoIocpHYt24VK4QtLPHq+BZ2CFtG4v/O+UwQDdsYJa7+/skI4exnlLjeuwKqylri\n 8L/fbBDXaUqs36UPEXaUePvoETMkjPgkbrwVBAkzA5mTtk2HCvNKdLQJQVTrSTztmcoIs/bP\n 2icsELaHxOEpm9kg4XOVUeLs8l8sExjlZyEsW8DIuIpRPLW0ODc9tdgoL7Vcrzgxt7g0L10v\n OT93EyMw9k//O/5lB+OuP0mHGAU4GJV4eBuSG+KFWBPLiitzDzFKcDArifA6nT0dJ8SbklhZ\n lVqUH19UmpNafIhRmoNFSZzXeNHLWCGB9MSS1OzU1ILUIpgsEwenVANj2S5LwbOzrKYvE6pf\n d9CgLdbqxhpD7QUrqvbOep9utOJ7xOF1d//K+ie9ULTd4VSz2kpnz70erg0Lp1vlOT/JZHXP\n WJZtJRF+3bZAsMYopfVR2SN+paX3FimzLfi29scr3uby2bZ+01sOSt9aZ/fokvrhtv8r72/K\n +PfOj+PsPC7VJTv9M4s2KbEUZyQaajEXFScCAPpOqT75AgAA",
            "\n H4sIAAAAAAAAA+NgFjrBLMWRmVeSWpSXmKPExsVy+t/xu7ps9xriDRb1q1ncWGVv0TfpI5PF\n u0/bmSye9axjtPjX8YfdgdXj14KlrB6L97xk8jj4bg9TAHOUnk1RfmlJqkJGfnGJrVK0oYWR\n nqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqRvl2CXsapnQ9ZC+YGVWx+upW9gfGlYxcjJ4eE\n gInEg9kb2LoYuTiEBJYySvR9PMTcxcgBlJCR+HBJAKJGWOLPtS6omg+MEq8PzGMFSbAJ2Eoc\n mfmVFaReRCBM4sRKf5Aws4C7xJbFU5lBbGGgkoMnL7OB2CwCqhJXnnSCtfIKuErcX3mPDWK+\n vMTqDQfA6jkF3CRady1jgdjVyCix5cBL5gmMfAsYGVYxiqSWFuem5xYb6hUn5haX5qXrJefn\n bmIEhuK2Yz8372C8tDH4EKMAB6MSD69GYkO8EGtiWXFl7iFGCQ5mJRFep7On44R4UxIrq1KL\n 8uOLSnNSiw8xmgJdNZFZSjQ5HxgneSXxhqaG5haWhubG5sZmFkrivB0CB2OEBNITS1KzU1ML\n Uotg+pg4OKUaGN07Mle5HSrWeFs577zKB4HdsX7CRqFekS4+ZvxVqxNWZPgZrHgnt/7ytYs6\n gfZz+K8x/u/zftyp8m/qe+crIkGdeXfk1VofaCr8LWfhX+r44LT17n9FLrZuR46JHJGYW3yh\n /12Giqxx16WYn57zftq5/zuwntl9kQjvsTMvvmY9mHxT+3r0cyWW4oxEQy3mouJEAMcgFe5b\n AgAA"
        ],
        "X-CMS-MailID": "20201009220246eucas1p1283b16f1f54c572b5952ca9334d667da",
        "X-Msg-Generator": "CA",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "X-RootMTR": "20201009220246eucas1p1283b16f1f54c572b5952ca9334d667da",
        "X-EPHeader": "CA",
        "CMS-TYPE": "201P",
        "X-CMS-RootMailID": "20201009220246eucas1p1283b16f1f54c572b5952ca9334d667da",
        "References": "<20201008052323.11547-1-l.wojciechow@partner.samsung.com>\n <20201009220202.20834-1-l.wojciechow@partner.samsung.com>\n <CGME20201009220246eucas1p1283b16f1f54c572b5952ca9334d667da@eucas1p1.samsung.com>",
        "Subject": "[dpdk-dev] [PATCH v6 08/15] test/distributor: fix freeing mbufs",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Sanity tests with mbuf alloc and shutdown tests assume that\nmbufs passed to worker cores are freed in handlers.\nSuch packets should not be returned to the distributor's main\ncore. The only packets that should be returned are the packets\nsend after completion of the tests in quit_workers function.\n\nThis patch stops returning mbufs to distributor's core.\nIn case of shutdown tests it is impossible to determine\nhow worker and distributor threads would synchronize.\nPackets used by tests should be freed and packets used during\nquit_workers() shouldn't. That's why returning mbufs to mempool\nis moved to test procedure run on distributor thread\nfrom worker threads.\n\nAdditionally this patch cleans up unused variables.\n\nFixes: c0de0eb82e40 (\"distributor: switch over to new API\")\nCc: david.hunt@intel.com\nCc: stable@dpdk.org\n\nSigned-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>\nAcked-by: David Hunt <david.hunt@intel.com>\n---\n app/test/test_distributor.c | 96 ++++++++++++++++++-------------------\n 1 file changed, 47 insertions(+), 49 deletions(-)",
    "diff": "diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c\nindex 838459392..06e01ff9d 100644\n--- a/app/test/test_distributor.c\n+++ b/app/test/test_distributor.c\n@@ -44,7 +44,7 @@ total_packet_count(void)\n \tunsigned i, count = 0;\n \tfor (i = 0; i < worker_idx; i++)\n \t\tcount += __atomic_load_n(&worker_stats[i].handled_packets,\n-\t\t\t\t__ATOMIC_ACQUIRE);\n+\t\t\t\t__ATOMIC_RELAXED);\n \treturn count;\n }\n \n@@ -55,7 +55,7 @@ clear_packet_count(void)\n \tunsigned int i;\n \tfor (i = 0; i < RTE_MAX_LCORE; i++)\n \t\t__atomic_store_n(&worker_stats[i].handled_packets, 0,\n-\t\t\t__ATOMIC_RELEASE);\n+\t\t\t__ATOMIC_RELAXED);\n }\n \n /* this is the basic worker function for sanity test\n@@ -67,20 +67,18 @@ handle_work(void *arg)\n \tstruct rte_mbuf *buf[8] __rte_cache_aligned;\n \tstruct worker_params *wp = arg;\n \tstruct rte_distributor *db = wp->dist;\n-\tunsigned int count = 0, num;\n+\tunsigned int num;\n \tunsigned int id = __atomic_fetch_add(&worker_idx, 1, __ATOMIC_RELAXED);\n \n \tnum = rte_distributor_get_pkt(db, id, buf, NULL, 0);\n \twhile (!quit) {\n \t\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n-\t\t\t\t__ATOMIC_ACQ_REL);\n-\t\tcount += num;\n+\t\t\t\t__ATOMIC_RELAXED);\n \t\tnum = rte_distributor_get_pkt(db, id,\n \t\t\t\tbuf, buf, num);\n \t}\n \t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n-\t\t\t__ATOMIC_ACQ_REL);\n-\tcount += num;\n+\t\t\t__ATOMIC_RELAXED);\n \trte_distributor_return_pkt(db, id, buf, num);\n \treturn 0;\n }\n@@ -136,7 +134,7 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)\n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n \t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\n-\t\t\t\t\t__ATOMIC_ACQUIRE));\n+\t\t\t\t\t__ATOMIC_RELAXED));\n \tprintf(\"Sanity test with all zero hashes done.\\n\");\n \n \t/* pick two flows and check they go correctly */\n@@ -163,7 +161,7 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)\n \t\t\tprintf(\"Worker %u handled %u packets\\n\", i,\n \t\t\t\t__atomic_load_n(\n \t\t\t\t\t&worker_stats[i].handled_packets,\n-\t\t\t\t\t__ATOMIC_ACQUIRE));\n+\t\t\t\t\t__ATOMIC_RELAXED));\n \t\tprintf(\"Sanity test with two hash values done\\n\");\n \t}\n \n@@ -190,7 +188,7 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)\n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n \t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\n-\t\t\t\t\t__ATOMIC_ACQUIRE));\n+\t\t\t\t\t__ATOMIC_RELAXED));\n \tprintf(\"Sanity test with non-zero hashes done\\n\");\n \n \trte_mempool_put_bulk(p, (void *)bufs, BURST);\n@@ -276,23 +274,20 @@ handle_work_with_free_mbufs(void *arg)\n \tstruct rte_mbuf *buf[8] __rte_cache_aligned;\n \tstruct worker_params *wp = arg;\n \tstruct rte_distributor *d = wp->dist;\n-\tunsigned int count = 0;\n \tunsigned int i;\n \tunsigned int num;\n \tunsigned int id = __atomic_fetch_add(&worker_idx, 1, __ATOMIC_RELAXED);\n \n \tnum = rte_distributor_get_pkt(d, id, buf, NULL, 0);\n \twhile (!quit) {\n-\t\tcount += num;\n \t\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n-\t\t\t\t__ATOMIC_ACQ_REL);\n+\t\t\t\t__ATOMIC_RELAXED);\n \t\tfor (i = 0; i < num; i++)\n \t\t\trte_pktmbuf_free(buf[i]);\n \t\tnum = rte_distributor_get_pkt(d, id, buf, NULL, 0);\n \t}\n-\tcount += num;\n \t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n-\t\t\t__ATOMIC_ACQ_REL);\n+\t\t\t__ATOMIC_RELAXED);\n \trte_distributor_return_pkt(d, id, buf, num);\n \treturn 0;\n }\n@@ -318,7 +313,6 @@ sanity_test_with_mbuf_alloc(struct worker_params *wp, struct rte_mempool *p)\n \t\t\trte_distributor_process(d, NULL, 0);\n \t\tfor (j = 0; j < BURST; j++) {\n \t\t\tbufs[j]->hash.usr = (i+j) << 1;\n-\t\t\trte_mbuf_refcnt_set(bufs[j], 1);\n \t\t}\n \n \t\trte_distributor_process(d, bufs, BURST);\n@@ -342,15 +336,10 @@ sanity_test_with_mbuf_alloc(struct worker_params *wp, struct rte_mempool *p)\n static int\n handle_work_for_shutdown_test(void *arg)\n {\n-\tstruct rte_mbuf *pkt = NULL;\n \tstruct rte_mbuf *buf[8] __rte_cache_aligned;\n \tstruct worker_params *wp = arg;\n \tstruct rte_distributor *d = wp->dist;\n-\tunsigned int count = 0;\n \tunsigned int num;\n-\tunsigned int total = 0;\n-\tunsigned int i;\n-\tunsigned int returned = 0;\n \tunsigned int zero_id = 0;\n \tunsigned int zero_unset;\n \tconst unsigned int id = __atomic_fetch_add(&worker_idx, 1,\n@@ -368,11 +357,8 @@ handle_work_for_shutdown_test(void *arg)\n \t/* wait for quit single globally, or for worker zero, wait\n \t * for zero_quit */\n \twhile (!quit && !(id == zero_id && zero_quit)) {\n-\t\tcount += num;\n \t\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n-\t\t\t\t__ATOMIC_ACQ_REL);\n-\t\tfor (i = 0; i < num; i++)\n-\t\t\trte_pktmbuf_free(buf[i]);\n+\t\t\t\t__ATOMIC_RELAXED);\n \t\tnum = rte_distributor_get_pkt(d, id, buf, NULL, 0);\n \n \t\tif (num > 0) {\n@@ -381,15 +367,12 @@ handle_work_for_shutdown_test(void *arg)\n \t\t\t\tfalse, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE);\n \t\t}\n \t\tzero_id = __atomic_load_n(&zero_idx, __ATOMIC_ACQUIRE);\n-\n-\t\ttotal += num;\n \t}\n-\tcount += num;\n-\treturned = rte_distributor_return_pkt(d, id, buf, num);\n-\n \t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n-\t\t\t__ATOMIC_ACQ_REL);\n+\t\t\t__ATOMIC_RELAXED);\n \tif (id == zero_id) {\n+\t\trte_distributor_return_pkt(d, id, NULL, 0);\n+\n \t\t/* for worker zero, allow it to restart to pick up last packet\n \t\t * when all workers are shutting down.\n \t\t */\n@@ -400,15 +383,11 @@ handle_work_for_shutdown_test(void *arg)\n \n \t\twhile (!quit) {\n \t\t\t__atomic_fetch_add(&worker_stats[id].handled_packets,\n-\t\t\t\t\tnum, __ATOMIC_ACQ_REL);\n-\t\t\tcount += num;\n-\t\t\trte_pktmbuf_free(pkt);\n+\t\t\t\t\tnum, __ATOMIC_RELAXED);\n \t\t\tnum = rte_distributor_get_pkt(d, id, buf, NULL, 0);\n \t\t}\n-\t\treturned = rte_distributor_return_pkt(d,\n-\t\t\t\tid, buf, num);\n-\t\tprintf(\"Num returned = %d\\n\", returned);\n \t}\n+\trte_distributor_return_pkt(d, id, buf, num);\n \treturn 0;\n }\n \n@@ -424,7 +403,9 @@ sanity_test_with_worker_shutdown(struct worker_params *wp,\n {\n \tstruct rte_distributor *d = wp->dist;\n \tstruct rte_mbuf *bufs[BURST];\n-\tunsigned i;\n+\tstruct rte_mbuf *bufs2[BURST];\n+\tunsigned int i;\n+\tunsigned int failed = 0;\n \n \tprintf(\"=== Sanity test of worker shutdown ===\\n\");\n \n@@ -450,16 +431,17 @@ sanity_test_with_worker_shutdown(struct worker_params *wp,\n \t */\n \n \t/* get more buffers to queue up, again setting them to the same flow */\n-\tif (rte_mempool_get_bulk(p, (void *)bufs, BURST) != 0) {\n+\tif (rte_mempool_get_bulk(p, (void *)bufs2, BURST) != 0) {\n \t\tprintf(\"line %d: Error getting mbufs from pool\\n\", __LINE__);\n+\t\trte_mempool_put_bulk(p, (void *)bufs, BURST);\n \t\treturn -1;\n \t}\n \tfor (i = 0; i < BURST; i++)\n-\t\tbufs[i]->hash.usr = 1;\n+\t\tbufs2[i]->hash.usr = 1;\n \n \t/* get worker zero to quit */\n \tzero_quit = 1;\n-\trte_distributor_process(d, bufs, BURST);\n+\trte_distributor_process(d, bufs2, BURST);\n \n \t/* flush the distributor */\n \trte_distributor_flush(d);\n@@ -468,15 +450,21 @@ sanity_test_with_worker_shutdown(struct worker_params *wp,\n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n \t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\n-\t\t\t\t\t__ATOMIC_ACQUIRE));\n+\t\t\t\t\t__ATOMIC_RELAXED));\n \n \tif (total_packet_count() != BURST * 2) {\n \t\tprintf(\"Line %d: Error, not all packets flushed. \"\n \t\t\t\t\"Expected %u, got %u\\n\",\n \t\t\t\t__LINE__, BURST * 2, total_packet_count());\n-\t\treturn -1;\n+\t\tfailed = 1;\n \t}\n \n+\trte_mempool_put_bulk(p, (void *)bufs, BURST);\n+\trte_mempool_put_bulk(p, (void *)bufs2, BURST);\n+\n+\tif (failed)\n+\t\treturn -1;\n+\n \tprintf(\"Sanity test with worker shutdown passed\\n\\n\");\n \treturn 0;\n }\n@@ -490,7 +478,8 @@ test_flush_with_worker_shutdown(struct worker_params *wp,\n {\n \tstruct rte_distributor *d = wp->dist;\n \tstruct rte_mbuf *bufs[BURST];\n-\tunsigned i;\n+\tunsigned int i;\n+\tunsigned int failed = 0;\n \n \tprintf(\"=== Test flush fn with worker shutdown (%s) ===\\n\", wp->name);\n \n@@ -522,15 +511,20 @@ test_flush_with_worker_shutdown(struct worker_params *wp,\n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n \t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\n-\t\t\t\t\t__ATOMIC_ACQUIRE));\n+\t\t\t\t\t__ATOMIC_RELAXED));\n \n \tif (total_packet_count() != BURST) {\n \t\tprintf(\"Line %d: Error, not all packets flushed. \"\n \t\t\t\t\"Expected %u, got %u\\n\",\n \t\t\t\t__LINE__, BURST, total_packet_count());\n-\t\treturn -1;\n+\t\tfailed = 1;\n \t}\n \n+\trte_mempool_put_bulk(p, (void *)bufs, BURST);\n+\n+\tif (failed)\n+\t\treturn -1;\n+\n \tprintf(\"Flush test with worker shutdown passed\\n\\n\");\n \treturn 0;\n }\n@@ -596,7 +590,10 @@ quit_workers(struct worker_params *wp, struct rte_mempool *p)\n \tconst unsigned num_workers = rte_lcore_count() - 1;\n \tunsigned i;\n \tstruct rte_mbuf *bufs[RTE_MAX_LCORE];\n-\trte_mempool_get_bulk(p, (void *)bufs, num_workers);\n+\tif (rte_mempool_get_bulk(p, (void *)bufs, num_workers) != 0) {\n+\t\tprintf(\"line %d: Error getting mbufs from pool\\n\", __LINE__);\n+\t\treturn;\n+\t}\n \n \tzero_quit = 0;\n \tquit = 1;\n@@ -604,11 +601,12 @@ quit_workers(struct worker_params *wp, struct rte_mempool *p)\n \t\tbufs[i]->hash.usr = i << 1;\n \trte_distributor_process(d, bufs, num_workers);\n \n-\trte_mempool_put_bulk(p, (void *)bufs, num_workers);\n-\n \trte_distributor_process(d, NULL, 0);\n \trte_distributor_flush(d);\n \trte_eal_mp_wait_lcore();\n+\n+\trte_mempool_put_bulk(p, (void *)bufs, num_workers);\n+\n \tquit = 0;\n \tworker_idx = 0;\n \tzero_idx = RTE_MAX_LCORE;\n",
    "prefixes": [
        "v6",
        "08/15"
    ]
}