get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2225214,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2225214/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260420161958.584407-4-vsementsov@yandex-team.ru/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.1/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": ""
    },
    "msgid": "<20260420161958.584407-4-vsementsov@yandex-team.ru>",
    "date": "2026-04-20T16:19:53",
    "name": "[v14,3/8] qapi: add local migration parameter",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "f595affbdb6e38986009518684cd9bc979631bb7",
    "submitter": {
        "id": 84116,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/84116/?format=api",
        "name": "Vladimir Sementsov-Ogievskiy",
        "email": "vsementsov@yandex-team.ru"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260420161958.584407-4-vsementsov@yandex-team.ru/mbox/",
    "series": [
        {
            "id": 500626,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/500626/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=500626",
            "date": "2026-04-20T16:19:57",
            "name": "virtio-net: live-TAP local migration",
            "version": 14,
            "mbox": "http://patchwork.ozlabs.org/series/500626/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2225214/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2225214/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=yandex-team.ru header.i=@yandex-team.ru\n header.a=rsa-sha256 header.s=default header.b=tTUZlP6U;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)",
            "mail-nwsmtp-smtp-corp-main-68.klg.yp-c.yandex.net;\n dkim=pass header.i=@yandex-team.ru"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzrN15bfcz1yD4\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 02:21:37 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wErM7-0005Xb-KQ; Mon, 20 Apr 2026 12:20:15 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <vsementsov@yandex-team.ru>)\n id 1wErM5-0005Te-2D\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 12:20:13 -0400",
            "from forwardcorp1d.mail.yandex.net\n ([2a02:6b8:c41:1300:1:45:d181:df01])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <vsementsov@yandex-team.ru>)\n id 1wErM2-0003Fg-Vy\n for qemu-devel@nongnu.org; Mon, 20 Apr 2026 12:20:12 -0400",
            "from mail-nwsmtp-smtp-corp-main-68.klg.yp-c.yandex.net\n (mail-nwsmtp-smtp-corp-main-68.klg.yp-c.yandex.net\n [IPv6:2a02:6b8:c42:94a9:0:640:a3fa:0])\n by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 5996B80713;\n Mon, 20 Apr 2026 19:20:09 +0300 (MSK)",
            "from vsementsov-lin (unknown [2a02:6bf:8080:54b::1:34])\n by mail-nwsmtp-smtp-corp-main-68.klg.yp-c.yandex.net (smtpcorp) with ESMTPSA\n id 0KUTY10KuKo0-NWSAVitJ; Mon, 20 Apr 2026 19:20:08 +0300"
        ],
        "Precedence": "bulk",
        "X-Yandex-Fwd": "1",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru;\n s=default; t=1776702008;\n bh=gVj5LlCLQsogQH5q5Y+3QviJ643p3VLdJYRihaKa5g8=;\n h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From;\n b=tTUZlP6UDxfrwkVRQpTXYuERHWd/wX4AoYhCoWF7+v0OP/2WHjmeIoqD4lRkc791J\n QZZJ+e9Vi88cppoMfDOx1yJXAoaNeErqSkWdxqgT8t3AY0V9j4bfcEKPi6EUKthpzC\n zu9/NftQh9KjZhtJHRhjvGwxz4hvvBiq9SrOIXc4=",
        "From": "Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>",
        "To": "jasowang@redhat.com,\n\tmst@redhat.com",
        "Cc": "armbru@redhat.com, peterx@redhat.com, farosas@suse.de,\n raphael.s.norwitz@gmail.com, bchaney@akamai.com, vsementsov@yandex-team.ru,\n qemu-devel@nongnu.org, berrange@redhat.com, pbonzini@redhat.com,\n yc-core@yandex-team.ru, Eric Blake <eblake@redhat.com>",
        "Subject": "[PATCH v14 3/8] qapi: add local migration parameter",
        "Date": "Mon, 20 Apr 2026 19:19:53 +0300",
        "Message-ID": "<20260420161958.584407-4-vsementsov@yandex-team.ru>",
        "X-Mailer": "git-send-email 2.52.0",
        "In-Reply-To": "<20260420161958.584407-1-vsementsov@yandex-team.ru>",
        "References": "<20260420161958.584407-1-vsementsov@yandex-team.ru>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=2a02:6b8:c41:1300:1:45:d181:df01;\n envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net",
        "X-Spam_score_int": "-20",
        "X-Spam_score": "-2.1",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://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 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "We are going to implement local-migration feature: some devices will be\nable to transfer open file descriptors through migration stream (which\nmust UNIX domain socket for that purpose).  This allows to transfer the\nwhole backend state without reconnecting and restarting the backend\nservice. For example, virtio-net will migrate its attached TAP netdev,\ntogether with its connected file descriptors.\n\nIn this commit we introduce a migration parameter, which enables\nthe feature for devices that support it (none at the moment).\n\nSigned-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>\nAcked-by: Markus Armbruster <armbru@redhat.com>\n---\n include/migration/misc.h |  2 ++\n migration/options.c      | 18 +++++++++++++++++-\n qapi/migration.json      | 12 ++++++++++--\n 3 files changed, 29 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/include/migration/misc.h b/include/migration/misc.h\nindex 3159a5e53c3..b14dc70ea3d 100644\n--- a/include/migration/misc.h\n+++ b/include/migration/misc.h\n@@ -156,4 +156,6 @@ bool multifd_device_state_save_thread_should_exit(void);\n void multifd_abort_device_state_save_threads(void);\n bool multifd_join_device_state_save_threads(void);\n \n+bool migrate_local(void);\n+\n #endif\ndiff --git a/migration/options.c b/migration/options.c\nindex f33b2979290..d0d73169354 100644\n--- a/migration/options.c\n+++ b/migration/options.c\n@@ -13,6 +13,7 @@\n \n #include \"qemu/osdep.h\"\n #include \"qemu/error-report.h\"\n+#include \"qapi/util.h\"\n #include \"exec/target_page.h\"\n #include \"qapi/clone-visitor.h\"\n #include \"qapi/error.h\"\n@@ -24,6 +25,7 @@\n #include \"migration/colo.h\"\n #include \"migration/cpr.h\"\n #include \"migration/misc.h\"\n+#include \"migration/options.h\"\n #include \"migration.h\"\n #include \"migration-stats.h\"\n #include \"qemu-file.h\"\n@@ -336,6 +338,12 @@ bool migrate_mapped_ram(void)\n     return s->capabilities[MIGRATION_CAPABILITY_MAPPED_RAM];\n }\n \n+bool migrate_local(void)\n+{\n+    MigrationState *s = migrate_get_current();\n+    return s->parameters.local;\n+}\n+\n bool migrate_ignore_shared(void)\n {\n     MigrationState *s = migrate_get_current();\n@@ -1055,7 +1063,7 @@ static void migrate_mark_all_params_present(MigrationParameters *p)\n         &p->has_announce_step, &p->has_block_bitmap_mapping,\n         &p->has_x_vcpu_dirty_limit_period, &p->has_vcpu_dirty_limit,\n         &p->has_mode, &p->has_zero_page_detection, &p->has_direct_io,\n-        &p->has_cpr_exec_command,\n+        &p->has_cpr_exec_command, &p->has_local,\n     };\n \n     len = ARRAY_SIZE(has_fields);\n@@ -1394,6 +1402,10 @@ static void migrate_params_test_apply(MigrationParameters *params,\n     if (params->has_cpr_exec_command) {\n         dest->cpr_exec_command = params->cpr_exec_command;\n     }\n+\n+    if (params->has_local) {\n+        dest->local = params->local;\n+    }\n }\n \n static void migrate_params_apply(MigrationParameters *params)\n@@ -1522,6 +1534,10 @@ static void migrate_params_apply(MigrationParameters *params)\n         s->parameters.cpr_exec_command =\n             QAPI_CLONE(strList, params->cpr_exec_command);\n     }\n+\n+    if (params->has_local) {\n+        s->parameters.local = params->local;\n+    }\n }\n \n void qmp_migrate_set_parameters(MigrationParameters *params, Error **errp)\ndiff --git a/qapi/migration.json b/qapi/migration.json\nindex 7134d4ce47e..8c87cfb0b7a 100644\n--- a/qapi/migration.json\n+++ b/qapi/migration.json\n@@ -831,7 +831,8 @@\n            'mode',\n            'zero-page-detection',\n            'direct-io',\n-           'cpr-exec-command'] }\n+           'cpr-exec-command',\n+           'local'] }\n \n ##\n # @migrate-set-parameters:\n@@ -1007,6 +1008,12 @@\n #     is @cpr-exec.  The first list element is the program's filename,\n #     the remainder its arguments.  (Since 10.2)\n #\n+# @local: Enable local migration for devices that support it.  Backend\n+#     state and its file descriptors can then be passed to the\n+#     destination in the migration channel.  The migration channel\n+#     must be a Unix domain socket.  Usually needs to be enabled per\n+#     device.  (Since 11.1)\n+#\n # Features:\n #\n # @unstable: Members @x-checkpoint-delay and\n@@ -1046,7 +1053,8 @@\n             '*mode': 'MigMode',\n             '*zero-page-detection': 'ZeroPageDetection',\n             '*direct-io': 'bool',\n-            '*cpr-exec-command': [ 'str' ]} }\n+            '*cpr-exec-command': [ 'str' ],\n+            '*local': 'bool' } }\n \n ##\n # @query-migrate-parameters:\n",
    "prefixes": [
        "v14",
        "3/8"
    ]
}