get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2198124,
    "url": "http://patchwork.ozlabs.org/api/1.0/patches/2198124/?format=api",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.0/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": "<20260219115530.2019498-4-vsementsov@yandex-team.ru>",
    "date": "2026-02-19T11:55:24",
    "name": "[v11,3/8] qapi: add local migration parameter",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "8fa32914c6284c714b203999cf69ec6655bc58fc",
    "submitter": {
        "id": 84116,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/84116/?format=api",
        "name": "Vladimir Sementsov-Ogievskiy",
        "email": "vsementsov@yandex-team.ru"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260219115530.2019498-4-vsementsov@yandex-team.ru/mbox/",
    "series": [
        {
            "id": 492667,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/492667/?format=api",
            "date": "2026-02-19T11:55:27",
            "name": "virtio-net: live-TAP local migration",
            "version": 11,
            "mbox": "http://patchwork.ozlabs.org/series/492667/mbox/"
        }
    ],
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2198124/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=Mb+TMfuu;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)",
            "mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net;\n dkim=pass header.i=@yandex-team.ru"
        ],
        "Received": [
            "from lists.gnu.org (lists.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 4fGsLp3rQbz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 22:57:22 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vt2dL-0004PV-CD; Thu, 19 Feb 2026 06:55:51 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.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 1vt2dD-0004Nf-5V\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 06:55:44 -0500",
            "from forwardcorp1b.mail.yandex.net ([178.154.239.136])\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 1vt2dB-0006Dk-AX\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 06:55:42 -0500",
            "from mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net\n (mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net\n [IPv6:2a02:6b8:c24:fa2:0:640:41ee:0])\n by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 0BF24808A3;\n Thu, 19 Feb 2026 14:55:38 +0300 (MSK)",
            "from vsementsov-lin (unknown [2a02:6bf:8080:192::1:26])\n by mail-nwsmtp-smtp-corp-main-34.sas.yp-c.yandex.net (smtpcorp/Yandex) with\n ESMTPSA id VtZwpM4A6uQ0-BnIYLWH4; Thu, 19 Feb 2026 14:55:37 +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=1771502137;\n bh=p0JDAuogGvmzQ9/2bs39KGb1+fbNGOw3A3RteNjSxKA=;\n h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From;\n b=Mb+TMfuugJ1PvyQ8Pu41dLFxtVhq6I3kQ7oR4h3A00p96kCW+JqnVW7fZyfJwgDuu\n 6eo94T/r2JCAH8YJ14SdqTrYg3CS6EjXomq28XbOmVat0Z/nO+JyJd4UJcRoJvKt4b\n QTkzEXiIE9sA0pov+p17sT8778Go7W4TlbXns990=",
        "From": "Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>",
        "To": "jasowang@redhat.com,\n\tmst@redhat.com",
        "Cc": "thuth@redhat.com, armbru@redhat.com, eblake@redhat.com, farosas@suse.de,\n peterx@redhat.com, zhao1.liu@intel.com, wangyanan55@huawei.com,\n philmd@linaro.org, marcel.apfelbaum@gmail.com, eduardo@habkost.net,\n davydov-max@yandex-team.ru, qemu-devel@nongnu.org,\n vsementsov@yandex-team.ru, yc-core@yandex-team.ru, leiyang@redhat.com,\n raphael.s.norwitz@gmail.com, bchaney@akamai.com",
        "Subject": "[PATCH v11 3/8] qapi: add local migration parameter",
        "Date": "Thu, 19 Feb 2026 14:55:24 +0300",
        "Message-ID": "<20260219115530.2019498-4-vsementsov@yandex-team.ru>",
        "X-Mailer": "git-send-email 2.52.0",
        "In-Reply-To": "<20260219115530.2019498-1-vsementsov@yandex-team.ru>",
        "References": "<20260219115530.2019498-1-vsementsov@yandex-team.ru>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=178.154.239.136;\n envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,\n SPF_HELO_NONE=0.001, 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 supporting devices (no one at the moment).\n\nSigned-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>\n---\n include/migration/misc.h |  2 ++\n migration/options.c      | 18 +++++++++++++++++-\n qapi/migration.json      | 14 ++++++++++++--\n 3 files changed, 31 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/include/migration/misc.h b/include/migration/misc.h\nindex e26d418a6e..f9b6a67129 100644\n--- a/include/migration/misc.h\n+++ b/include/migration/misc.h\n@@ -152,4 +152,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 1ffe85a2d8..92144da3ac 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@@ -1047,7 +1055,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@@ -1386,6 +1394,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@@ -1514,6 +1526,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 f925e5541b..f110bd8399 100644\n--- a/qapi/migration.json\n+++ b/qapi/migration.json\n@@ -828,7 +828,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@@ -1004,6 +1005,14 @@\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 feature for devices that support\n+#     it.  The feature is for local migation only and rely on the\n+#     channel support for passing file desciptors (it must be a UNIX\n+#     socket).  In general that means that backend state and its file\n+#     descriptors are passed to the destination in the migration\n+#     channel.  Individual devices declare the support for local\n+#     migration by per-device local-migration option.  (Since 11.0)\n+#\n # Features:\n #\n # @unstable: Members @x-checkpoint-delay and\n@@ -1043,7 +1052,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": [
        "v11",
        "3/8"
    ]
}