Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2177609/?format=api
{ "id": 2177609, "url": "http://patchwork.ozlabs.org/api/patches/2177609/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20251226211930.27565-23-farosas@suse.de/", "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": "<20251226211930.27565-23-farosas@suse.de>", "list_archive_url": null, "date": "2025-12-26T21:19:24", "name": "[RFC,22/25] migration/channel: Merge both sides of the connection initiation code", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "7cc3ca4a232de08e9bec6ea3ef0f59713385aa2b", "submitter": { "id": 85343, "url": "http://patchwork.ozlabs.org/api/people/85343/?format=api", "name": "Fabiano Rosas", "email": "farosas@suse.de" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20251226211930.27565-23-farosas@suse.de/mbox/", "series": [ { "id": 486505, "url": "http://patchwork.ozlabs.org/api/series/486505/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=486505", "date": "2025-12-26T21:19:04", "name": "migration: Cleanup early connection code", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/486505/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2177609/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2177609/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@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256\n header.s=susede2_rsa header.b=eO0l++js;\n\tdkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=NGtN5PgO;\n\tdkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de\n header.a=rsa-sha256 header.s=susede2_rsa header.b=eO0l++js;\n\tdkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256\n header.s=susede2_ed25519 header.b=NGtN5PgO;\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)", "smtp-out1.suse.de;\n dkim=pass header.d=suse.de header.s=susede2_rsa header.b=eO0l++js;\n dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=NGtN5PgO" ], "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 4ddJSz6hgcz1y3s\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 27 Dec 2025 08:21:23 +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 1vZFEY-0001XF-M5; Fri, 26 Dec 2025 16:20:26 -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 <farosas@suse.de>) id 1vZFEU-0001SN-4T\n for qemu-devel@nongnu.org; Fri, 26 Dec 2025 16:20:22 -0500", "from smtp-out1.suse.de ([195.135.223.130])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <farosas@suse.de>) id 1vZFES-00047x-Fp\n for qemu-devel@nongnu.org; Fri, 26 Dec 2025 16:20:21 -0500", "from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org\n [IPv6:2a07:de40:b281:104:10:150:64:97])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-out1.suse.de (Postfix) with ESMTPS id 91762336A8;\n Fri, 26 Dec 2025 21:20:11 +0000 (UTC)", "from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n (No client certificate requested)\n by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 7C9F33EA65;\n Fri, 26 Dec 2025 21:20:10 +0000 (UTC)", "from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n by imap1.dmz-prg2.suse.org with ESMTPSA id AApLDwr8TmnwJwAAD6G6ig\n (envelope-from <farosas@suse.de>); Fri, 26 Dec 2025 21:20:10 +0000" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1766784011;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=BUyCvyJIWhl+/SpTLRotM1zYCsp+lUHnfmiZRYJQwZA=;\n b=eO0l++jsbXsChOFfr/dYJtCogMcWNecVDVG0G6hwgU4E1h4MBNt1rjnZf7y/uLWrPBOZ/Q\n FDVu2qELn7PZIt4lpwqBMdbs1YJJ0ffd8fKZEy/FudBmoyl7th5WlnttvEKO4g4Qi0WOS2\n as1kiontTUs//qY1+DgdS2NgN93qSvQ=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1766784011;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=BUyCvyJIWhl+/SpTLRotM1zYCsp+lUHnfmiZRYJQwZA=;\n b=NGtN5PgORLyCqkxZNWrwzAMCWZsuGF6CtDwRdCI4LcT4uGk5mvqsl17fZtJKs4y9t/Ni+f\n FPidLX/86qsk+sBg==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_rsa;\n t=1766784011;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=BUyCvyJIWhl+/SpTLRotM1zYCsp+lUHnfmiZRYJQwZA=;\n b=eO0l++jsbXsChOFfr/dYJtCogMcWNecVDVG0G6hwgU4E1h4MBNt1rjnZf7y/uLWrPBOZ/Q\n FDVu2qELn7PZIt4lpwqBMdbs1YJJ0ffd8fKZEy/FudBmoyl7th5WlnttvEKO4g4Qi0WOS2\n as1kiontTUs//qY1+DgdS2NgN93qSvQ=", "v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de;\n s=susede2_ed25519; t=1766784011;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=BUyCvyJIWhl+/SpTLRotM1zYCsp+lUHnfmiZRYJQwZA=;\n b=NGtN5PgORLyCqkxZNWrwzAMCWZsuGF6CtDwRdCI4LcT4uGk5mvqsl17fZtJKs4y9t/Ni+f\n FPidLX/86qsk+sBg==" ], "From": "Fabiano Rosas <farosas@suse.de>", "To": "qemu-devel@nongnu.org", "Cc": "peterx@redhat.com", "Subject": "[RFC PATCH 22/25] migration/channel: Merge both sides of the\n connection initiation code", "Date": "Fri, 26 Dec 2025 18:19:24 -0300", "Message-ID": "<20251226211930.27565-23-farosas@suse.de>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20251226211930.27565-1-farosas@suse.de>", "References": "<20251226211930.27565-1-farosas@suse.de>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Spam-Score": "-3.01", "X-Rspamd-Queue-Id": "91762336A8", "X-Spamd-Result": "default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%];\n NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[];\n R_MISSING_CHARSET(0.50)[];\n R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain];\n MX_GOOD(-0.01)[]; RCVD_VIA_SMTP_AUTH(0.00)[];\n FUZZY_RATELIMITED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[];\n ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[];\n TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[];\n RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2];\n URIBL_BLOCKED(0.00)[imap1.dmz-prg2.suse.org:rdns,imap1.dmz-prg2.suse.org:helo,suse.de:mid,suse.de:dkim,suse.de:email];\n DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,suse.de:dkim,suse.de:email,imap1.dmz-prg2.suse.org:rdns,imap1.dmz-prg2.suse.org:helo];\n DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519];\n RCPT_COUNT_TWO(0.00)[2];\n SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from];\n DKIM_TRACE(0.00)[suse.de:+]", "X-Rspamd-Server": "rspamd1.dmz-prg2.suse.org", "X-Rspamd-Action": "no action", "Received-SPF": "pass client-ip=195.135.223.130; envelope-from=farosas@suse.de;\n helo=smtp-out1.suse.de", "X-Spam_score_int": "-43", "X-Spam_score": "-4.4", "X-Spam_bar": "----", "X-Spam_report": "(-4.4 / 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_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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", "Precedence": "list", "List-Id": "<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": "Now that everything is in channel.c, it's easier to browse this code\nif it's all in the same place. It's also easier to grasp what the\nconnection flow is if both sides of the connection are close together.\n\nSigned-off-by: Fabiano Rosas <farosas@suse.de>\n---\n migration/channel.c | 86 +++++++++++++++++++++++----------------------\n migration/channel.h | 14 ++++++--\n 2 files changed, 56 insertions(+), 44 deletions(-)", "diff": "diff --git a/migration/channel.c b/migration/channel.c\nindex 042e01b224..ba9aa1c58b 100644\n--- a/migration/channel.c\n+++ b/migration/channel.c\n@@ -31,10 +31,11 @@\n #include \"trace.h\"\n #include \"yank_functions.h\"\n \n-bool migration_connect_outgoing(MigrationAddress *addr, Error **errp)\n+bool migration_connect(MigrationAddress *addr, bool out, Error **errp)\n {\n g_autoptr(QIOChannel) ioc = NULL;\n SocketAddress *saddr;\n+ ERRP_GUARD();\n \n switch (addr->transport) {\n case MIGRATION_ADDRESS_TYPE_SOCKET:\n@@ -44,15 +45,24 @@ bool migration_connect_outgoing(MigrationAddress *addr, Error **errp)\n case SOCKET_ADDRESS_TYPE_INET:\n case SOCKET_ADDRESS_TYPE_UNIX:\n case SOCKET_ADDRESS_TYPE_VSOCK:\n- socket_connect_outgoing(saddr, errp);\n- /*\n- * async: after the socket is connected, calls\n- * migration_channel_connect_outgoing() directly.\n- */\n- return true;\n+ if (out) {\n+ socket_connect_outgoing(saddr, errp);\n+ /*\n+ * async: after the socket is connected, calls\n+ * migration_channel_connect_outgoing() directly.\n+ */\n+ return true;\n+ } else {\n+ socket_connect_incoming(saddr, errp);\n+ }\n+\n break;\n case SOCKET_ADDRESS_TYPE_FD:\n- ioc = fd_connect_outgoing(saddr->u.fd.str, errp);\n+ if (out) {\n+ ioc = fd_connect_outgoing(saddr->u.fd.str, errp);\n+ } else {\n+ fd_connect_incoming(saddr->u.fd.str, errp);\n+ }\n break;\n default:\n g_assert_not_reached();\n@@ -62,16 +72,28 @@ bool migration_connect_outgoing(MigrationAddress *addr, Error **errp)\n \n #ifdef CONFIG_RDMA\n case MIGRATION_ADDRESS_TYPE_RDMA:\n- ioc = rdma_connect_outgoing(&addr->u.rdma, errp);\n+ if (out) {\n+ ioc = rdma_connect_outgoing(&addr->u.rdma, errp);\n+ } else {\n+ rdma_connect_incoming(&addr->u.rdma, errp);\n+ }\n break;\n #endif\n \n case MIGRATION_ADDRESS_TYPE_EXEC:\n- ioc = exec_connect_outgoing(addr->u.exec.args, errp);\n+ if (out) {\n+ ioc = exec_connect_outgoing(addr->u.exec.args, errp);\n+ } else {\n+ exec_connect_incoming(addr->u.exec.args, errp);\n+ }\n break;\n \n case MIGRATION_ADDRESS_TYPE_FILE:\n- ioc = file_connect_outgoing(&addr->u.file, errp);\n+ if (out) {\n+ ioc = file_connect_outgoing(&addr->u.file, errp);\n+ } else {\n+ file_connect_incoming(&addr->u.file, errp);\n+ }\n break;\n \n default:\n@@ -79,42 +101,22 @@ bool migration_connect_outgoing(MigrationAddress *addr, Error **errp)\n break;\n }\n \n- if (!ioc) {\n- return false;\n- }\n-\n- migration_channel_connect_outgoing(ioc);\n- return true;\n-}\n-\n-void migration_connect_incoming(MigrationAddress *addr, Error **errp)\n-{\n- if (addr->transport == MIGRATION_ADDRESS_TYPE_SOCKET) {\n- SocketAddress *saddr = &addr->u.socket;\n- if (saddr->type == SOCKET_ADDRESS_TYPE_INET ||\n- saddr->type == SOCKET_ADDRESS_TYPE_UNIX ||\n- saddr->type == SOCKET_ADDRESS_TYPE_VSOCK) {\n- socket_connect_incoming(saddr, errp);\n- } else if (saddr->type == SOCKET_ADDRESS_TYPE_FD) {\n- fd_connect_incoming(saddr->u.fd.str, errp);\n+ if (out) {\n+ if (!ioc) {\n+ return false;\n }\n-#ifdef CONFIG_RDMA\n- } else if (addr->transport == MIGRATION_ADDRESS_TYPE_RDMA) {\n- rdma_connect_incoming(&addr->u.rdma, errp);\n-#endif\n- } else if (addr->transport == MIGRATION_ADDRESS_TYPE_EXEC) {\n- exec_connect_incoming(addr->u.exec.args, errp);\n- } else if (addr->transport == MIGRATION_ADDRESS_TYPE_FILE) {\n- file_connect_incoming(&addr->u.file, errp);\n- } else {\n- error_setg(errp, \"unknown migration protocol\");\n+\n+ migration_channel_connect_outgoing(ioc);\n+ return true;\n }\n \n /*\n- * async: the above routines all wait for the incoming connection\n- * and call back to migration_channel_process_incoming() to start\n- * the migration.\n+ * async: on the incoming side all of the transport routines above\n+ * wait for the incoming connection and call back to\n+ * migration_channel_process_incoming() to start the migration.\n */\n+\n+ return !*errp;\n }\n \n bool migration_has_main_and_multifd_channels(void)\ndiff --git a/migration/channel.h b/migration/channel.h\nindex 8cf16bfda9..86934fee38 100644\n--- a/migration/channel.h\n+++ b/migration/channel.h\n@@ -39,6 +39,16 @@ int migration_channel_read_peek(QIOChannel *ioc,\n bool migration_has_main_and_multifd_channels(void);\n bool migration_has_all_channels(void);\n \n-bool migration_connect_outgoing(MigrationAddress *addr, Error **errp);\n-void migration_connect_incoming(MigrationAddress *addr, Error **errp);\n+bool migration_connect(MigrationAddress *addr, bool out, Error **errp);\n+static inline bool migration_connect_outgoing(MigrationAddress *addr,\n+ Error **errp)\n+{\n+ return migration_connect(addr, true, errp);\n+}\n+\n+static inline bool migration_connect_incoming(MigrationAddress *addr,\n+ Error **errp)\n+{\n+ return migration_connect(addr, false, errp);\n+}\n #endif\n", "prefixes": [ "RFC", "22/25" ] }