get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 87530,
    "url": "https://patches.dpdk.org/api/patches/87530/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210129073547.80108-1-hepeng.0320@bytedance.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": "<20210129073547.80108-1-hepeng.0320@bytedance.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210129073547.80108-1-hepeng.0320@bytedance.com",
    "date": "2021-01-29T07:35:47",
    "name": "lib/librte_vhost: fix vid allocation race",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a8981e08ff91c8f70c4e3020e02b70fbc8a9d3f9",
    "submitter": {
        "id": 2088,
        "url": "https://patches.dpdk.org/api/people/2088/?format=api",
        "name": "贺鹏",
        "email": "xnhp0320@gmail.com"
    },
    "delegate": {
        "id": 2642,
        "url": "https://patches.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210129073547.80108-1-hepeng.0320@bytedance.com/mbox/",
    "series": [
        {
            "id": 15030,
            "url": "https://patches.dpdk.org/api/series/15030/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=15030",
            "date": "2021-01-29T07:35:47",
            "name": "lib/librte_vhost: fix vid allocation race",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/15030/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/87530/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/87530/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 50388A09E4;\n\tFri, 29 Jan 2021 10:45:44 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8907524015B;\n\tFri, 29 Jan 2021 10:45:32 +0100 (CET)",
            "from mail-pl1-f181.google.com (mail-pl1-f181.google.com\n [209.85.214.181])\n by mails.dpdk.org (Postfix) with ESMTP id 03F2140395\n for <dev@dpdk.org>; Fri, 29 Jan 2021 08:35:53 +0100 (CET)",
            "by mail-pl1-f181.google.com with SMTP id j11so2174743plt.11\n for <dev@dpdk.org>; Thu, 28 Jan 2021 23:35:52 -0800 (PST)",
            "from localhost ([61.120.150.71])\n by smtp.gmail.com with ESMTPSA id o14sm7138519pjf.12.2021.01.28.23.35.50\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 28 Jan 2021 23:35:51 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n h=from:to:cc:subject:date:message-id:mime-version\n :content-transfer-encoding;\n bh=x//LGnjS9tV5afScQZZJfapVPBaAF8m0eLdk5PA+tMQ=;\n b=ipSFNoRb3I0QOH0zCYNeJz4OWHze9sylpx2SfLG59vFB1NYEgPzSTPMQ+OcRD0AUow\n 0mOlAgkjKjAupqWptXLKvH7Bx2NzvFKCM2ehK240UCCzw8iPox4h0z+sxM89Kqx4OOVZ\n VAcGvK7WWd0uxzGJ2IGPxgexAxLTI+Fo8dj0rjfjhCXBJOw73YWjaSW+Tkkut7hEsfLT\n bgaY7nZd/fFfhzaLesNxRuviu2SH7V0zQZqk9ZCDV5GpUorWouqGDISndIe1oJUZpyTZ\n lBaqfoO6ll9jnlv5PVKXjmYfG8gsAjNmKYnGYHYn5unOL37uUM2AmRjf1M3i/zYlC7/8\n RFjw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version\n :content-transfer-encoding;\n bh=x//LGnjS9tV5afScQZZJfapVPBaAF8m0eLdk5PA+tMQ=;\n b=tSY1SLw0Twpjz26togcq9JZviVEYQtj77l2h3Io2LwZDdYwlROjZk3/ZYSF4AM7E3r\n ZZZsCiNO956W9IB+AL8P6g9xXV6T2Ua7NteaA20bkEwWt/og08xHC4J2zAyou/KnE95t\n eJd7AfCy4zsqHSMrdPLRbxYysJtqyrDqymK57RNKP1MokPRTm/aLGLhhtkLX+SpPjFk1\n pOb0vaGPYetSQ71YWbF/9XNqHyMt5oZdhm/dVy4ftE/t+KiuAj/IxE4M3zmcE0mmtYVe\n iGBFWfmVQFNRF7f+8Cbefl9XT9yLRfTS/H4z4UvYgsjAMIgFP/byjqXP4M9ADsOgfeRX\n dB2g==",
        "X-Gm-Message-State": "AOAM530W7Utq+hXFEwDmmfy5sLHE7yu0LUm28M0gwZ+BNZVJ3yuCa4iv\n N8Ff4NoE6QqY7vCMweCVM/GUiKw8YR2vfg==",
        "X-Google-Smtp-Source": "\n ABdhPJz+Yto8lyctmFD7aKbJgBNaUrQ45hmV+XNJ2R6bXBQXBEJ0yhSgBdPjbkiP2Lywb1wiJAOVpQ==",
        "X-Received": "by 2002:a17:90b:2286:: with SMTP id\n kx6mr3307163pjb.92.1611905751870;\n Thu, 28 Jan 2021 23:35:51 -0800 (PST)",
        "From": "Peng He <xnhp0320@gmail.com>",
        "X-Google-Original-From": "Peng He <hepeng.0320@bytedance.com>",
        "To": "dev@dpdk.org",
        "Cc": "maxime.coquelin@redhat.com",
        "Date": "Fri, 29 Jan 2021 15:35:47 +0800",
        "Message-Id": "<20210129073547.80108-1-hepeng.0320@bytedance.com>",
        "X-Mailer": "git-send-email 2.23.0",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Mailman-Approved-At": "Fri, 29 Jan 2021 10:45:28 +0100",
        "Subject": "[dpdk-dev] [PATCH] lib/librte_vhost: fix vid allocation race",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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": "From: \"chenwei.0515\" <chenwei.0515@bytedance.com>\n\nvhost_new_devcie might be called in different threads at the same time.\nthread 1(config thread)\n            rte_vhost_driver_start\n               ->vhost_user_start_client\n                   ->vhost_user_add_connection\n                     -> vhost_new_device\n\nthread 2(vhost-events)\n\tvhost_user_read_cb\n           ->vhost_user_msg_handler (return value < 0)\n             -> vhost_user_start_client\n                 -> vhost_new_device\n\nSo there could be a case that a same vid has been allocated twice, or\nsome vid might be lost in DPDK lib however still held by the upper\napplications.\n\nReported-by: Peng He <hepeng.0320@bytedance.com>\nSigned-off-by: Fei Chen <chenwei.0515@bytedance.com>\nReviewed-by: Zhihong Wang <wangzhihong.wzh@bytedance.com>\n---\n lib/librte_vhost/vhost.c | 6 ++++++\n 1 file changed, 6 insertions(+)",
    "diff": "diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c\nindex efb136edd1..db11d293d2 100644\n--- a/lib/librte_vhost/vhost.c\n+++ b/lib/librte_vhost/vhost.c\n@@ -26,6 +26,7 @@\n #include \"vhost_user.h\"\n \n struct virtio_net *vhost_devices[MAX_VHOST_DEVICE];\n+pthread_mutex_t  vhost_dev_lock = PTHREAD_MUTEX_INITIALIZER;\n \n /* Called with iotlb_lock read-locked */\n uint64_t\n@@ -645,6 +646,7 @@ vhost_new_device(void)\n \tstruct virtio_net *dev;\n \tint i;\n \n+\tpthread_mutex_lock(&vhost_dev_lock);\n \tfor (i = 0; i < MAX_VHOST_DEVICE; i++) {\n \t\tif (vhost_devices[i] == NULL)\n \t\t\tbreak;\n@@ -653,6 +655,7 @@ vhost_new_device(void)\n \tif (i == MAX_VHOST_DEVICE) {\n \t\tVHOST_LOG_CONFIG(ERR,\n \t\t\t\"Failed to find a free slot for new device.\\n\");\n+\t\tpthread_mutex_unlock(&vhost_dev_lock);\n \t\treturn -1;\n \t}\n \n@@ -660,10 +663,13 @@ vhost_new_device(void)\n \tif (dev == NULL) {\n \t\tVHOST_LOG_CONFIG(ERR,\n \t\t\t\"Failed to allocate memory for new dev.\\n\");\n+\t\tpthread_mutex_unlock(&vhost_dev_lock);\n \t\treturn -1;\n \t}\n \n \tvhost_devices[i] = dev;\n+\tpthread_mutex_unlock(&vhost_dev_lock);\n+\n \tdev->vid = i;\n \tdev->flags = VIRTIO_DEV_BUILTIN_VIRTIO_NET;\n \tdev->slave_req_fd = -1;\n",
    "prefixes": []
}