get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81175,
    "url": "https://patches.dpdk.org/api/patches/81175/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20201017030701.16134-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": "<20201017030701.16134-9-l.wojciechow@partner.samsung.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201017030701.16134-9-l.wojciechow@partner.samsung.com",
    "date": "2020-10-17T03:06:52",
    "name": "[v8,08/17] test/distributor: synchronize lcores statistics",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "825308d9caf963076def3f34ae5292f3511a0fb9",
    "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/20201017030701.16134-9-l.wojciechow@partner.samsung.com/mbox/",
    "series": [
        {
            "id": 13072,
            "url": "https://patches.dpdk.org/api/series/13072/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=13072",
            "date": "2020-10-17T03:06:44",
            "name": "fix distributor synchronization issues",
            "version": 8,
            "mbox": "https://patches.dpdk.org/series/13072/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/81175/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/81175/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 712B3A04DB;\n\tSat, 17 Oct 2020 05:11:46 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 9DB14E2FD;\n\tSat, 17 Oct 2020 05:08:12 +0200 (CEST)",
            "from mailout2.w1.samsung.com (mailout2.w1.samsung.com\n [210.118.77.12]) by dpdk.org (Postfix) with ESMTP id 97336E29B\n for <dev@dpdk.org>; Sat, 17 Oct 2020 05:07:41 +0200 (CEST)",
            "from eucas1p1.samsung.com (unknown [182.198.249.206])\n by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id\n 20201017030722euoutp0239064754bc5091358a41b0957cb8d704~_qLv5U5QP2305923059euoutp02W\n for <dev@dpdk.org>; Sat, 17 Oct 2020 03:07:22 +0000 (GMT)",
            "from eusmges2new.samsung.com (unknown [203.254.199.244]) by\n eucas1p2.samsung.com (KnoxPortal) with ESMTP id\n 20201017030717eucas1p2aa02624ef1d361529b5a3e76a4efe4bd~_qLq001It1097310973eucas1p25;\n Sat, 17 Oct 2020 03:07:17 +0000 (GMT)",
            "from eucas1p2.samsung.com ( [182.198.249.207]) by\n eusmges2new.samsung.com (EUCPMTA) with SMTP id 33.42.05997.5EF5A8F5; Sat, 17\n Oct 2020 04:07:17 +0100 (BST)",
            "from eusmtrp1.samsung.com (unknown [182.198.249.138]) by\n eucas1p2.samsung.com (KnoxPortal) with ESMTPA id\n 20201017030716eucas1p2911112ee3c9e0a3f3dd9a811cbafe77b~_qLqEILay2441224412eucas1p2_;\n Sat, 17 Oct 2020 03:07:16 +0000 (GMT)",
            "from eusmgms2.samsung.com (unknown [182.198.249.180]) by\n eusmtrp1.samsung.com (KnoxPortal) with ESMTP id\n 20201017030716eusmtrp1c7a13402ea20fe783d1f8e7f0c1b9e0b~_qLqDjldS3018830188eusmtrp1W;\n Sat, 17 Oct 2020 03:07:16 +0000 (GMT)",
            "from eusmtip1.samsung.com ( [203.254.199.221]) by\n eusmgms2.samsung.com (EUCPMTA) with SMTP id CD.DE.06017.4EF5A8F5; Sat, 17\n Oct 2020 04:07:16 +0100 (BST)",
            "from localhost.localdomain (unknown [106.210.88.70]) by\n eusmtip1.samsung.com (KnoxPortal) with ESMTPA id\n 20201017030715eusmtip1b8491a2fd8e4e0b99f5ae0317809edd4~_qLpKYN250424404244eusmtip1O;\n Sat, 17 Oct 2020 03:07:15 +0000 (GMT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com\n 20201017030722euoutp0239064754bc5091358a41b0957cb8d704~_qLv5U5QP2305923059euoutp02W",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;\n s=mail20170921; t=1602904042;\n bh=QAISyyr3ZOV4JCVDYbcde2TX6o3fexIKja9MtfGYUK4=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=SDI4rGlArCjmhkT4kTUGNh+INhEf/5Cq8uCJzSalKSY74YQrahTJ68iPCYRj5qwxq\n 5Rf7mMssoQjRcmfjJK4pLWCdGC5UEPTwKBeoCZjUbW6YMbg1SQj0iIVg2Ig9giNPlo\n vmTsfBznqpGrnWOX1HHMsT42/pBtFKqif18ZAJTU=",
        "X-AuditID": "cbfec7f4-65dff7000000176d-c0-5f8a5fe54eec",
        "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, 17 Oct 2020 05:06:52 +0200",
        "Message-Id": "<20201017030701.16134-9-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": [
            "\n H4sIAAAAAAAAA+NgFnrCIsWRmVeSWpSXmKPExsWy7djP87pP47viDWY0cVncWGVv0TfpI5PF\n u0/bmSye9axjtPjX8YfdgdXj14KlrB6L97xk8jj4bg9TAHMUl01Kak5mWWqRvl0CV8bc63uZ\n C2ZoVHQdT2lgfK7QxcjJISFgInHk6TS2LkYuDiGBFYwSXy6uYIJwvjBKTHy9FMr5zCjx5+1l\n VpiWzQcmMEIkljNKPJz6jh2uatOm80wgVWwCthJHZn4F6xARCJNobt7L0sXIwcEs4Czx5Csb\n iCks4ClxpE0UpIJFQFWi98EHdpAwr4CrxLadxRCr5CVWbzjADBLmFHCTaDzuCrJIQuAym8Td\n maehznGR2HeokRnCFpZ4dXwLO4QtI3F6cg8LRMM2Romrv38yQjj7GSWu966AqrKWOPzvNxvE\n aZoS63fpQ4QdJVrXLWYECUsI8EnceCsIEmYGMidtm84MEeaV6GgTgqjWk3jaM5URZu2ftU9Y\n IGwPiY7zE5ghgXOVUeL2xvMsExjlZyEsW8DIuIpRPLW0ODc9tdgoL7Vcrzgxt7g0L10vOT93\n EyMw7k//O/5lB+OuP0mHGAU4GJV4eDmWdsYLsSaWFVfmHmKU4GBWEuF1Ons6Tog3JbGyKrUo\n P76oNCe1+BCjNAeLkjiv8aKXsUIC6YklqdmpqQWpRTBZJg5OqQZGw+TlO72D1p/dczpKLs5r\n i+fp44Wy/e4lb/4HlVn+Zqznn6R9um3t9jaTGumSbSfMmVzEdnyx9yupX7051tahvOfR7C3O\n cpFX7j/Y0y9dL/pV55Dn1tKZ2VcSFNVfBd9N2Gp34rBSgs7GVYusEu4f8LROvqxyfHbPLj7t\n G8krXy48w79wPZe0EktxRqKhFnNRcSIAeAzqmvcCAAA=",
            "\n H4sIAAAAAAAAA+NgFjrCLMWRmVeSWpSXmKPExsVy+t/xu7pP4rviDbbME7O4screom/SRyaL\n d5+2M1k861nHaPGv4w+7A6vHrwVLWT0W73nJ5HHw3R6mAOYoPZui/NKSVIWM/OISW6VoQwsj\n PUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQifbsEvYy51/cyF8zQqOg6ntLA+Fyhi5GTQ0LA\n RGLzgQmMXYxcHEICSxklLh44ytLFyAGUkJH4cEkAokZY4s+1LjaImo+MEpfu7mMHSbAJ2Eoc\n mfmVFaReRCBM4sRKf5Aws4C7xJbFU5lBwsICnhJH2kRBwiwCqhK9Dz6wg4R5BVwltu0shpgu\n L7F6wwGwak4BN4nG464QixoZJc7OWscygZFvASPDKkaR1NLi3PTcYiO94sTc4tK8dL3k/NxN\n jMAQ3Hbs55YdjF3vgg8xCnAwKvHwbljUGS/EmlhWXJl7iFGCg1lJhNfp7Ok4Id6UxMqq1KL8\n +KLSnNTiQ4ymQDdNZJYSTc4HxkdeSbyhqaG5haWhubG5sZmFkjhvh8DBGCGB9MSS1OzU1ILU\n Ipg+Jg5OqQbGLNfs9fOfrj3qWGlY9/+uVWHpPiEJ/iXv+kQ836wrKNpwxOeByqtnGT2MMsXz\n lvf7fopN3vj2d47Y29ZHUZdFnA9tnRmnsjvhoMaGqRuXp7ituuP9mr1QhPX5M6NHJV8uOrYt\n XMBx4761FNvaDwHPVbQfl75NrRH+eKmLMe7firTSjPOPnm9JUWIpzkg01GIuKk4EAPdETI5X\n AgAA"
        ],
        "X-CMS-MailID": "20201017030716eucas1p2911112ee3c9e0a3f3dd9a811cbafe77b",
        "X-Msg-Generator": "CA",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "X-RootMTR": "20201017030716eucas1p2911112ee3c9e0a3f3dd9a811cbafe77b",
        "X-EPHeader": "CA",
        "CMS-TYPE": "201P",
        "X-CMS-RootMailID": "20201017030716eucas1p2911112ee3c9e0a3f3dd9a811cbafe77b",
        "References": "<20201010160508.19709-1-l.wojciechow@partner.samsung.com>\n <20201017030701.16134-1-l.wojciechow@partner.samsung.com>\n <CGME20201017030716eucas1p2911112ee3c9e0a3f3dd9a811cbafe77b@eucas1p2.samsung.com>",
        "Subject": "[dpdk-dev] [PATCH v8 08/17] test/distributor: synchronize lcores\n\tstatistics",
        "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": "Statistics of handled packets are cleared and read on main lcore,\nwhile they are increased in workers handlers on different lcores.\n\nWithout synchronization occasionally showed invalid values.\nThis patch uses atomic mechanisms to synchronize.\nRelaxed memory model is used.\n\nFixes: c3eabff124e6 (\"distributor: add unit tests\")\nCc: bruce.richardson@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 | 39 +++++++++++++++++++++++++------------\n 1 file changed, 27 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c\nindex ec1fe348b..4343efed1 100644\n--- a/app/test/test_distributor.c\n+++ b/app/test/test_distributor.c\n@@ -43,7 +43,8 @@ total_packet_count(void)\n {\n \tunsigned i, count = 0;\n \tfor (i = 0; i < worker_idx; i++)\n-\t\tcount += worker_stats[i].handled_packets;\n+\t\tcount += __atomic_load_n(&worker_stats[i].handled_packets,\n+\t\t\t\t__ATOMIC_RELAXED);\n \treturn count;\n }\n \n@@ -51,7 +52,10 @@ total_packet_count(void)\n static inline void\n clear_packet_count(void)\n {\n-\tmemset(&worker_stats, 0, sizeof(worker_stats));\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_RELAXED);\n }\n \n /* this is the basic worker function for sanity test\n@@ -129,7 +133,8 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)\n \n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n-\t\t\t\tworker_stats[i].handled_packets);\n+\t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\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@@ -154,7 +159,9 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)\n \n \t\tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\t\tprintf(\"Worker %u handled %u packets\\n\", i,\n-\t\t\t\t\tworker_stats[i].handled_packets);\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_RELAXED));\n \t\tprintf(\"Sanity test with two hash values done\\n\");\n \t}\n \n@@ -180,7 +187,8 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)\n \n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n-\t\t\t\tworker_stats[i].handled_packets);\n+\t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\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@@ -272,12 +280,14 @@ handle_work_with_free_mbufs(void *arg)\n \n \tnum = rte_distributor_get_pkt(d, id, buf, NULL, 0);\n \twhile (!quit) {\n-\t\tworker_stats[id].handled_packets += num;\n+\t\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\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-\tworker_stats[id].handled_packets += num;\n+\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n+\t\t\t__ATOMIC_RELAXED);\n \trte_distributor_return_pkt(d, id, buf, num);\n \treturn 0;\n }\n@@ -347,7 +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\tworker_stats[id].handled_packets += num;\n+\t\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\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@@ -357,8 +368,9 @@ handle_work_for_shutdown_test(void *arg)\n \t\t}\n \t\tzero_id = __atomic_load_n(&zero_idx, __ATOMIC_ACQUIRE);\n \t}\n-\tworker_stats[id].handled_packets += num;\n \n+\t__atomic_fetch_add(&worker_stats[id].handled_packets, num,\n+\t\t\t__ATOMIC_RELAXED);\n \tif (id == zero_id) {\n \t\trte_distributor_return_pkt(d, id, NULL, 0);\n \n@@ -371,7 +383,8 @@ handle_work_for_shutdown_test(void *arg)\n \t\tnum = rte_distributor_get_pkt(d, id, buf, NULL, 0);\n \n \t\twhile (!quit) {\n-\t\t\tworker_stats[id].handled_packets += num;\n+\t\t\t__atomic_fetch_add(&worker_stats[id].handled_packets,\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}\n@@ -437,7 +450,8 @@ sanity_test_with_worker_shutdown(struct worker_params *wp,\n \n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n-\t\t\t\tworker_stats[i].handled_packets);\n+\t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\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@@ -497,7 +511,8 @@ test_flush_with_worker_shutdown(struct worker_params *wp,\n \tzero_quit = 0;\n \tfor (i = 0; i < rte_lcore_count() - 1; i++)\n \t\tprintf(\"Worker %u handled %u packets\\n\", i,\n-\t\t\t\tworker_stats[i].handled_packets);\n+\t\t\t__atomic_load_n(&worker_stats[i].handled_packets,\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",
    "prefixes": [
        "v8",
        "08/17"
    ]
}