get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 79779,
    "url": "http://patches.dpdk.org/api/patches/79779/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1601984948-313027-25-git-send-email-suanmingm@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<1601984948-313027-25-git-send-email-suanmingm@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1601984948-313027-25-git-send-email-suanmingm@nvidia.com",
    "date": "2020-10-06T11:49:07",
    "name": "[24/25] net/mlx5: make VLAN network interface thread safe",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6a9b92399582c170d2e8419e158f88137ba43168",
    "submitter": {
        "id": 1887,
        "url": "http://patches.dpdk.org/api/people/1887/?format=api",
        "name": "Suanming Mou",
        "email": "suanmingm@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1601984948-313027-25-git-send-email-suanmingm@nvidia.com/mbox/",
    "series": [
        {
            "id": 12718,
            "url": "http://patches.dpdk.org/api/series/12718/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12718",
            "date": "2020-10-06T11:48:45",
            "name": "net/mlx5: support multiple-thread flow operations",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12718/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/79779/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/79779/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 E075FA04BB;\n\tTue,  6 Oct 2020 13:58:45 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 04B3E1BC86;\n\tTue,  6 Oct 2020 13:50:05 +0200 (CEST)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id 665E71BC6F\n for <dev@dpdk.org>; Tue,  6 Oct 2020 13:50:00 +0200 (CEST)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n suanmingm@nvidia.com) with SMTP; 6 Oct 2020 14:49:55 +0300",
            "from nvidia.com (mtbc-r640-04.mtbc.labs.mlnx [10.75.70.9])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 096BnC0i028553;\n Tue, 6 Oct 2020 14:49:54 +0300"
        ],
        "From": "Suanming Mou <suanmingm@nvidia.com>",
        "To": "viacheslavo@nvidia.com, matan@nvidia.com",
        "Cc": "rasland@nvidia.com, dev@dpdk.org",
        "Date": "Tue,  6 Oct 2020 19:49:07 +0800",
        "Message-Id": "<1601984948-313027-25-git-send-email-suanmingm@nvidia.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1601984948-313027-1-git-send-email-suanmingm@nvidia.com>",
        "References": "<1601984948-313027-1-git-send-email-suanmingm@nvidia.com>",
        "Subject": "[dpdk-dev] [PATCH 24/25] net/mlx5: make VLAN network interface\n\tthread safe",
        "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": "This commit takes advantage of the atomic operation with the VLAN VM\nworkaround object reference count to make sure the object to be thread\nsafe and not to be created or destroyed in parallel.\n\nSigned-off-by: Suanming Mou <suanmingm@nvidia.com>\n---\n drivers/net/mlx5/linux/mlx5_vlan_os.c | 24 +++++++++++++++---------\n 1 file changed, 15 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/linux/mlx5_vlan_os.c b/drivers/net/mlx5/linux/mlx5_vlan_os.c\nindex 92fc17d..00e160f 100644\n--- a/drivers/net/mlx5/linux/mlx5_vlan_os.c\n+++ b/drivers/net/mlx5/linux/mlx5_vlan_os.c\n@@ -45,10 +45,11 @@\n \t\treturn;\n \tvlan->created = 0;\n \tMLX5_ASSERT(vlan_dev[vlan->tag].refcnt);\n-\tif (--vlan_dev[vlan->tag].refcnt == 0 &&\n-\t    vlan_dev[vlan->tag].ifindex) {\n+\tif (!__atomic_sub_fetch(&vlan_dev[vlan->tag].refcnt,\n+\t    1, __ATOMIC_RELAXED)) {\n \t\tmlx5_nl_vlan_vmwa_delete(vmwa, vlan_dev[vlan->tag].ifindex);\n-\t\tvlan_dev[vlan->tag].ifindex = 0;\n+\t\t__atomic_store_n(&vlan_dev[vlan->tag].ifindex,\n+\t\t\t\t 0, __ATOMIC_RELAXED);\n \t}\n }\n \n@@ -72,16 +73,21 @@\n \tMLX5_ASSERT(priv->vmwa_context);\n \tif (vlan->created || !vmwa)\n \t\treturn;\n-\tif (vlan_dev[vlan->tag].refcnt == 0) {\n-\t\tMLX5_ASSERT(!vlan_dev[vlan->tag].ifindex);\n+\tif (__atomic_add_fetch\n+\t    (&vlan_dev[vlan->tag].refcnt, 1, __ATOMIC_RELAXED) == 1) {\n+\t\t/* Make sure ifindex is destroyed. */\n+\t\trte_wait_until_equal_32(&vlan_dev[vlan->tag].ifindex,\n+\t\t\t\t\t0, __ATOMIC_RELAXED);\n \t\tvlan_dev[vlan->tag].ifindex =\n \t\t\tmlx5_nl_vlan_vmwa_create(vmwa, vmwa->vf_ifindex,\n \t\t\t\t\t\t vlan->tag);\n+\t\tif (!vlan_dev[vlan->tag].ifindex) {\n+\t\t\t__atomic_store_n(&vlan_dev[vlan->tag].refcnt,\n+\t\t\t\t\t 0, __ATOMIC_RELAXED);\n+\t\t\treturn;\n+\t\t}\n \t}\n-\tif (vlan_dev[vlan->tag].ifindex) {\n-\t\tvlan_dev[vlan->tag].refcnt++;\n-\t\tvlan->created = 1;\n-\t}\n+\tvlan->created = 1;\n }\n \n /*\n",
    "prefixes": [
        "24/25"
    ]
}