get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 45832,
    "url": "http://patches.dpdk.org/api/patches/45832/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20181002093651.24795-15-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": "<20181002093651.24795-15-maxime.coquelin@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20181002093651.24795-15-maxime.coquelin@redhat.com",
    "date": "2018-10-02T09:36:48",
    "name": "[v2,14/17] vhost: add support to postcopy's end request",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "bdc5e3bb2cb63566c0924949345e1c56509bb500",
    "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/20181002093651.24795-15-maxime.coquelin@redhat.com/mbox/",
    "series": [
        {
            "id": 1630,
            "url": "http://patches.dpdk.org/api/series/1630/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1630",
            "date": "2018-10-02T09:36:34",
            "name": "vhost: add postcopy live-migration support",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/1630/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/45832/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/45832/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 AB1EA4C8D;\n\tTue,  2 Oct 2018 11:38:39 +0200 (CEST)",
            "from mx1.redhat.com (mx1.redhat.com [209.132.183.28])\n\tby dpdk.org (Postfix) with ESMTP id 43C672C2B;\n\tTue,  2 Oct 2018 11:38:38 +0200 (CEST)",
            "from smtp.corp.redhat.com\n\t(int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16])\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 966DC8764D;\n\tTue,  2 Oct 2018 09:38:37 +0000 (UTC)",
            "from localhost.localdomain (ovpn-112-50.ams2.redhat.com\n\t[10.36.112.50])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 30AE97A2E2;\n\tTue,  2 Oct 2018 09:38:21 +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": "Tue,  2 Oct 2018 11:36:48 +0200",
        "Message-Id": "<20181002093651.24795-15-maxime.coquelin@redhat.com>",
        "In-Reply-To": "<20181002093651.24795-1-maxime.coquelin@redhat.com>",
        "References": "<20181002093651.24795-1-maxime.coquelin@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.16",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.26]); Tue, 02 Oct 2018 09:38:37 +0000 (UTC)",
        "Subject": "[dpdk-dev] [PATCH v2 14/17] 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 1 file changed, 21 insertions(+)",
    "diff": "diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c\nindex b207de6e0..ee7337ac8 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@@ -1640,6 +1641,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 0;\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@@ -1669,6 +1689,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 \n",
    "prefixes": [
        "v2",
        "14/17"
    ]
}