get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 46037,
    "url": "http://patches.dpdk.org/api/patches/46037/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20181004081403.8039-17-maxime.coquelin@redhat.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": "<20181004081403.8039-17-maxime.coquelin@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20181004081403.8039-17-maxime.coquelin@redhat.com",
    "date": "2018-10-04T08:14:00",
    "name": "[v3,16/19] vhost: add support to postcopy's end request",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "119028d122902c857678354e0761bb9295f3fdf6",
    "submitter": {
        "id": 512,
        "url": "http://patches.dpdk.org/api/people/512/?format=api",
        "name": "Maxime Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "delegate": {
        "id": 2642,
        "url": "http://patches.dpdk.org/api/users/2642/?format=api",
        "username": "mcoquelin",
        "first_name": "Maxime",
        "last_name": "Coquelin",
        "email": "maxime.coquelin@redhat.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20181004081403.8039-17-maxime.coquelin@redhat.com/mbox/",
    "series": [
        {
            "id": 1685,
            "url": "http://patches.dpdk.org/api/series/1685/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1685",
            "date": "2018-10-04T08:13:44",
            "name": "vhost: add postcopy live-migration support",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/1685/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/46037/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/46037/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id DB2811B12E;\n\tThu,  4 Oct 2018 10:16:08 +0200 (CEST)",
            "from mx1.redhat.com (mx1.redhat.com [209.132.183.28])\n\tby dpdk.org (Postfix) with ESMTP id BEB3D4F9B;\n\tThu,  4 Oct 2018 10:16:07 +0200 (CEST)",
            "from smtp.corp.redhat.com\n\t(int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 1621530E6852;\n\tThu,  4 Oct 2018 08:16:07 +0000 (UTC)",
            "from localhost.localdomain (unknown [10.36.112.13])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id E5A7C3091322;\n\tThu,  4 Oct 2018 08:16:01 +0000 (UTC)"
        ],
        "From": "Maxime Coquelin <maxime.coquelin@redhat.com>",
        "To": "dev@dpdk.org, tiwei.bie@intel.com, zhihong.wang@intel.com,\n\tjfreimann@redhat.com, nicknickolaev@gmail.com, i.maximets@samsung.com,\n\tbruce.richardson@intel.com, alejandro.lucero@netronome.com",
        "Cc": "dgilbert@redhat.com, stable@dpdk.org,\n\tMaxime Coquelin <maxime.coquelin@redhat.com>",
        "Date": "Thu,  4 Oct 2018 10:14:00 +0200",
        "Message-Id": "<20181004081403.8039-17-maxime.coquelin@redhat.com>",
        "In-Reply-To": "<20181004081403.8039-1-maxime.coquelin@redhat.com>",
        "References": "<20181004081403.8039-1-maxime.coquelin@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.84 on 10.5.11.26",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.46]); Thu, 04 Oct 2018 08:16:07 +0000 (UTC)",
        "Subject": "[dpdk-dev] [PATCH v3 16/19] vhost: add support to postcopy's end\n\trequest",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The master sends this message before stopping handling\nuserfaults, so that the backend closes the userfaultfd.\n\nThe master waits for the slave to acknowledge the request\nwith an empty 64bits payload for synchronization purpose.\n\nSigned-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>\nSigned-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>\n---\n lib/librte_vhost/vhost_user.c | 21 +++++++++++++++++++++\n lib/librte_vhost/vhost_user.h |  1 +\n 2 files changed, 22 insertions(+)",
    "diff": "diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c\nindex 40c9a3df1..32167bab4 100644\n--- a/lib/librte_vhost/vhost_user.c\n+++ b/lib/librte_vhost/vhost_user.c\n@@ -77,6 +77,7 @@ static const char *vhost_message_str[VHOST_USER_MAX] = {\n \t[VHOST_USER_CRYPTO_CLOSE_SESS] = \"VHOST_USER_CRYPTO_CLOSE_SESS\",\n \t[VHOST_USER_POSTCOPY_ADVISE]  = \"VHOST_USER_POSTCOPY_ADVISE\",\n \t[VHOST_USER_POSTCOPY_LISTEN]  = \"VHOST_USER_POSTCOPY_LISTEN\",\n+\t[VHOST_USER_POSTCOPY_END]  = \"VHOST_USER_POSTCOPY_END\",\n };\n \n /* The possible results of a message handling function */\n@@ -1644,6 +1645,25 @@ vhost_user_set_postcopy_listen(struct virtio_net **pdev,\n \treturn VH_RESULT_OK;\n }\n \n+static int\n+vhost_user_postcopy_end(struct virtio_net **pdev, struct VhostUserMsg *msg,\n+\t\t\tint main_fd __rte_unused)\n+{\n+\tstruct virtio_net *dev = *pdev;\n+\n+\tdev->postcopy_listening = 0;\n+\tif (dev->postcopy_ufd >= 0) {\n+\t\tclose(dev->postcopy_ufd);\n+\t\tdev->postcopy_ufd = -1;\n+\t}\n+\n+\tmsg->payload.u64 = 0;\n+\tmsg->size = sizeof(msg->payload.u64);\n+\tmsg->fd_num = 0;\n+\n+\treturn VH_RESULT_REPLY;\n+}\n+\n typedef int (*vhost_message_handler_t)(struct virtio_net **pdev,\n \t\t\t\t\tstruct VhostUserMsg *msg,\n \t\t\t\t\tint main_fd);\n@@ -1673,6 +1693,7 @@ static vhost_message_handler_t vhost_message_handlers[VHOST_USER_MAX] = {\n \t[VHOST_USER_IOTLB_MSG] = vhost_user_iotlb_msg,\n \t[VHOST_USER_POSTCOPY_ADVISE] = vhost_user_set_postcopy_advise,\n \t[VHOST_USER_POSTCOPY_LISTEN] = vhost_user_set_postcopy_listen,\n+\t[VHOST_USER_POSTCOPY_END] = vhost_user_postcopy_end,\n };\n \n \ndiff --git a/lib/librte_vhost/vhost_user.h b/lib/librte_vhost/vhost_user.h\nindex 298279b91..73b1fe2b9 100644\n--- a/lib/librte_vhost/vhost_user.h\n+++ b/lib/librte_vhost/vhost_user.h\n@@ -52,6 +52,7 @@ typedef enum VhostUserRequest {\n \tVHOST_USER_CRYPTO_CLOSE_SESS = 27,\n \tVHOST_USER_POSTCOPY_ADVISE = 28,\n \tVHOST_USER_POSTCOPY_LISTEN = 29,\n+\tVHOST_USER_POSTCOPY_END = 30,\n \tVHOST_USER_MAX = 31\n } VhostUserRequest;\n \n",
    "prefixes": [
        "v3",
        "16/19"
    ]
}