get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 807525,
    "url": "http://patchwork.ozlabs.org/api/patches/807525/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1504081950-2528-22-git-send-email-peterx@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1504081950-2528-22-git-send-email-peterx@redhat.com>",
    "list_archive_url": null,
    "date": "2017-08-30T08:32:18",
    "name": "[RFC,v2,21/33] migration: new cmd MIG_CMD_POSTCOPY_RESUME",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "447829603ded138587eff005d4c15aec455c6c60",
    "submitter": {
        "id": 67717,
        "url": "http://patchwork.ozlabs.org/api/people/67717/?format=api",
        "name": "Peter Xu",
        "email": "peterx@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1504081950-2528-22-git-send-email-peterx@redhat.com/mbox/",
    "series": [
        {
            "id": 552,
            "url": "http://patchwork.ozlabs.org/api/series/552/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=552",
            "date": "2017-08-30T08:31:59",
            "name": "Migration: postcopy failure recovery",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/552/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/807525/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/807525/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=peterx@redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xhzzd03pxz9t2Q\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 30 Aug 2017 19:02:35 +1000 (AEST)",
            "from localhost ([::1]:49185 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dmytM-0008Ky-Mr\n\tfor incoming@patchwork.ozlabs.org; Wed, 30 Aug 2017 05:02:32 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:34847)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <peterx@redhat.com>) id 1dmySS-0008JJ-Vi\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 04:34:46 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <peterx@redhat.com>) id 1dmySN-0003se-Ui\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 04:34:45 -0400",
            "from mx1.redhat.com ([209.132.183.28]:51084)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <peterx@redhat.com>) id 1dmySN-0003r5-M5\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 04:34:39 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15])\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 AEC7681DE1;\n\tWed, 30 Aug 2017 08:34:38 +0000 (UTC)",
            "from pxdev.xzpeter.org.com (dhcp-14-103.nay.redhat.com\n\t[10.66.14.103])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 7FC56871E6;\n\tWed, 30 Aug 2017 08:34:27 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com AEC7681DE1",
        "From": "Peter Xu <peterx@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Wed, 30 Aug 2017 16:32:18 +0800",
        "Message-Id": "<1504081950-2528-22-git-send-email-peterx@redhat.com>",
        "In-Reply-To": "<1504081950-2528-1-git-send-email-peterx@redhat.com>",
        "References": "<1504081950-2528-1-git-send-email-peterx@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.15",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.25]);\n\tWed, 30 Aug 2017 08:34:38 +0000 (UTC)",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [RFC v2 21/33] migration: new cmd\n\tMIG_CMD_POSTCOPY_RESUME",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "Laurent Vivier <lvivier@redhat.com>,\n\tAndrea Arcangeli <aarcange@redhat.com>, \n\tJuan Quintela <quintela@redhat.com>,\n\tAlexey Perevalov <a.perevalov@samsung.com>, peterx@redhat.com,\n\t\"Dr . David Alan Gilbert\" <dgilbert@redhat.com>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "Introducing this new command to be sent when the source VM is ready to\nresume the paused migration.  What the destination does here is\nbasically release the fault thread to continue service page faults.\n\nSigned-off-by: Peter Xu <peterx@redhat.com>\n---\n migration/savevm.c     | 33 +++++++++++++++++++++++++++++++++\n migration/savevm.h     |  1 +\n migration/trace-events |  1 +\n 3 files changed, 35 insertions(+)",
    "diff": "diff --git a/migration/savevm.c b/migration/savevm.c\nindex 7f77a31..e914346 100644\n--- a/migration/savevm.c\n+++ b/migration/savevm.c\n@@ -77,6 +77,7 @@ enum qemu_vm_cmd {\n     MIG_CMD_POSTCOPY_RAM_DISCARD,  /* A list of pages to discard that\n                                       were previously sent during\n                                       precopy but are dirty. */\n+    MIG_CMD_POSTCOPY_RESUME,       /* resume postcopy on dest */\n     MIG_CMD_PACKAGED,          /* Send a wrapped stream within this stream */\n     MIG_CMD_RECV_BITMAP,       /* Request for recved bitmap on dst */\n     MIG_CMD_MAX\n@@ -95,6 +96,7 @@ static struct mig_cmd_args {\n     [MIG_CMD_POSTCOPY_RUN]     = { .len =  0, .name = \"POSTCOPY_RUN\" },\n     [MIG_CMD_POSTCOPY_RAM_DISCARD] = {\n                                    .len = -1, .name = \"POSTCOPY_RAM_DISCARD\" },\n+    [MIG_CMD_POSTCOPY_RESUME]  = { .len =  0, .name = \"POSTCOPY_RESUME\" },\n     [MIG_CMD_PACKAGED]         = { .len =  4, .name = \"PACKAGED\" },\n     [MIG_CMD_RECV_BITMAP]      = { .len = -1, .name = \"RECV_BITMAP\" },\n     [MIG_CMD_MAX]              = { .len = -1, .name = \"MAX\" },\n@@ -931,6 +933,12 @@ void qemu_savevm_send_postcopy_run(QEMUFile *f)\n     qemu_savevm_command_send(f, MIG_CMD_POSTCOPY_RUN, 0, NULL);\n }\n \n+void qemu_savevm_send_postcopy_resume(QEMUFile *f)\n+{\n+    trace_savevm_send_postcopy_resume();\n+    qemu_savevm_command_send(f, MIG_CMD_POSTCOPY_RESUME, 0, NULL);\n+}\n+\n void qemu_savevm_send_recv_bitmap(QEMUFile *f, char *block_name)\n {\n     size_t len;\n@@ -1682,6 +1690,28 @@ static int loadvm_postcopy_handle_run(MigrationIncomingState *mis)\n     return LOADVM_QUIT;\n }\n \n+static int loadvm_postcopy_handle_resume(MigrationIncomingState *mis)\n+{\n+    if (mis->state != MIGRATION_STATUS_POSTCOPY_RECOVER) {\n+        error_report(\"%s: illegal resume received\", __func__);\n+        /* Don't fail the load, only for this. */\n+        return 0;\n+    }\n+\n+    /*\n+     * This means source VM is ready to resume the postcopy migration.\n+     * It's time to switch state and release the fault thread to\n+     * continue service page faults.\n+     */\n+    migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_RECOVER,\n+                      MIGRATION_STATUS_POSTCOPY_ACTIVE);\n+    qemu_sem_post(&mis->postcopy_pause_sem_fault);\n+\n+    /* TODO: Tell source that \"we are ready\" */\n+\n+    return 0;\n+}\n+\n /**\n  * Immediately following this command is a blob of data containing an embedded\n  * chunk of migration stream; read it and load it.\n@@ -1847,6 +1877,9 @@ static int loadvm_process_command(QEMUFile *f)\n     case MIG_CMD_POSTCOPY_RAM_DISCARD:\n         return loadvm_postcopy_ram_handle_discard(mis, len);\n \n+    case MIG_CMD_POSTCOPY_RESUME:\n+        return loadvm_postcopy_handle_resume(mis);\n+\n     case MIG_CMD_RECV_BITMAP:\n         return loadvm_handle_recv_bitmap(mis, len);\n     }\ndiff --git a/migration/savevm.h b/migration/savevm.h\nindex 8126b1c..a5f3879 100644\n--- a/migration/savevm.h\n+++ b/migration/savevm.h\n@@ -46,6 +46,7 @@ int qemu_savevm_send_packaged(QEMUFile *f, const uint8_t *buf, size_t len);\n void qemu_savevm_send_postcopy_advise(QEMUFile *f);\n void qemu_savevm_send_postcopy_listen(QEMUFile *f);\n void qemu_savevm_send_postcopy_run(QEMUFile *f);\n+void qemu_savevm_send_postcopy_resume(QEMUFile *f);\n void qemu_savevm_send_recv_bitmap(QEMUFile *f, char *block_name);\n \n void qemu_savevm_send_postcopy_ram_discard(QEMUFile *f, const char *name,\ndiff --git a/migration/trace-events b/migration/trace-events\nindex 9960cd8..0a1c302 100644\n--- a/migration/trace-events\n+++ b/migration/trace-events\n@@ -35,6 +35,7 @@ savevm_send_open_return_path(void) \"\"\n savevm_send_ping(uint32_t val) \"0x%x\"\n savevm_send_postcopy_listen(void) \"\"\n savevm_send_postcopy_run(void) \"\"\n+savevm_send_postcopy_resume(void) \"\"\n savevm_send_recv_bitmap(char *name) \"%s\"\n savevm_state_setup(void) \"\"\n savevm_state_header(void) \"\"\n",
    "prefixes": [
        "RFC",
        "v2",
        "21/33"
    ]
}