From nobody Wed Jan 7 09:30:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1767103623; cv=none; d=zohomail.com; s=zohoarc; b=nT+Pu1QpbPHXxzB1nyJtlCCIDG20qnPQQcLIgtP4LmCrpF+ZWn+ok7TaPvBAobksJ6vZy3stt8/F8dkYo+520JhyifCn8aUAirhLZ14Odw0RqtUZJizxlkxnnKzpy2ycuKr6afs0sLN16IunUnCCD1Hk9hPfaUdu51EtqOP0V6A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767103623; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aEDt9j/ypr6P7eHORllvpkd1Ov+70gDWVLTQtJ9u6F0=; b=DlV1D5OAA6f2HQgbJ3Q6nml1Ut9w3NUNYlN+U3xuzo9XWHzitqCp+k6fq5vfy7Sla9a4HArTcyShN3GJr3OopT5HrFJ5BC58l1twmvo46b9gEFxIl3JySQWzsWWsDcYkQV7jWFMldeetyfSBKTk3FSPHqQfMSyrSY2rX/yUt5Q4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767103623526757.0151944454715; Tue, 30 Dec 2025 06:07:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaaMU-00048m-8P; Tue, 30 Dec 2025 09:06:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaaMR-000477-7z for qemu-devel@nongnu.org; Tue, 30 Dec 2025 09:06:07 -0500 Received: from mout.web.de ([217.72.192.78]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaaMN-0000f3-Od for qemu-devel@nongnu.org; Tue, 30 Dec 2025 09:06:06 -0500 Received: from [127.0.1.1] ([217.247.110.28]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1Ml4B4-1wLlcX1gbM-00cP2N; Tue, 30 Dec 2025 15:05:57 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1767103557; x=1767708357; i=lukasstraub2@web.de; bh=aEDt9j/ypr6P7eHORllvpkd1Ov+70gDWVLTQtJ9u6F0=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=jV5SFBQTui1DTj562vfspCUXgr+MntlS9o4VWVm0zwsUEc5bJ2krDPJFVx0mgZTj YhaggZUcjj/XAIA3wUvWZG0G69PWI82Orgw6y5o09KNCLLT+WGR8MtfDRAju25ZiU yHxWEX1xU/WzqIYsFBFft+2K/miuMNQms9GawI7xDDqVBB1qAJoqjUjF7TxpGu7Y8 wr5nrmiRD6/4NaFbjucLX21TkK6QpRdG5jZwi2uBOw82kXkrtZkEbdRrVqhItsu2q GIU8k5ABg9VqHbJs8n2tYJcmWRIGFWstJ7K8NSGgvC3pMtvi2NHxnWKwaKu1TcDIx A7dGSLNis6GTp8/+iA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Tue, 30 Dec 2025 15:05:44 +0100 Subject: [PATCH 1/3] multifd: Add colo support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251230-colo_unit_test_multifd-v1-1-f9734bc74c71@web.de> References: <20251230-colo_unit_test_multifd-v1-0-f9734bc74c71@web.de> In-Reply-To: <20251230-colo_unit_test_multifd-v1-0-f9734bc74c71@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Lukas Straub , Juan Quintela X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4969; i=lukasstraub2@web.de; h=from:subject:message-id; bh=WEqMLIYGPbH277vwdaIfTsLN0MNJZBuipO7n2sS33ok=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpU9xDv4gBT2cp/vbG2BtogYaPdDnO7Mmkj2655 G4Y+ETn9V6JAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaVPcQwAKCRA1qwsonF2y WEdxD/wNi7tEcfR5XqP3oBJJ7qeALgTNBdtM229n6XpV7TpN/NuZbnOh35HdGuG2Pp/qwYo5FX4 aXkoD0Lq63wA5vzqEH+GQTlDJ1teBdLjzUMo+qlphEjHsZm9W3qST3h9VsH7UC9sUgh9G8lb7QU 52Zzxaqosi8T2czsXuTIwSlwL1rNsF5Htnut6wVlYX6Nkw6M9aRtbjqQB9I8ECKEQpZMZMcCopk T7Rg9IDiu7C8lj6G40+flTek4i4AOAjnN7Ds4pmsTQlJHHveGUDkzkKZMrXvem2wIx6AS+p5Y1F CaMcO0xxLnpmZnQsb5bSDAuMRzTec/7SlgNxtWdAPDHVSR8yW5VJa40O9MMz0hiL50CvM6qc3Yg 2dgJUq7sNdNMea6zfsDIF+QL0fFHk24E3urHRH3ReRxVkRsCeOAAeP+GJiQL6XeYZO/a+LGx0x9 sBTetztOZFjRxFNWqiihGTTpQ3ZSNE/dFukxqWUUpbo40pbSbP0a3RtbTVYWrm6W8nSdlgDsMfo OK4X/2+U3E7RxeXLgdqX2vxdDVVT9S2sEElYqHahYhM93jS73nh6E0Ve1dkWPmz/FPF9hIfAGwx ST7eoePN9p4B1yKrNSFWuyESiZahZE1kkYIJsGUi/PMcUvpY152M5i5wQtm/UDQ63Sl2MxwtRDG D4v7I1dvsR2/WQQ== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:cQ4pVeDVEZ+LMnifMz0rm1auwcgJzZcmYixT5pimtpAEraF4yR+ o19xKPmW4TxLXGuGMpJSmbPOnA+ohlWQO4ce/1BrPrhUW+Grf8qmXa06rAwWWCTZ3x11d4S rDlgtdG/bwwxCJnZirTVfPN6iN8KwYr83kS0rszwJ6anoYZrjgfEPXqluCYkTK1p90ig7hR Ua0IEWWOItvP6XF/q7MWQ== UI-OutboundReport: notjunk:1;M01:P0:3ABiWVpGz7o=;moy6hoJkYtM3671C4gvQMsAQVRr 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 jFZzT1meMbXDrWJtPgdDfBx0rmwOVz2S2OXVB5 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1767103624769158501 Like in the normal ram_load() path, put the received pages into the colo cache and mark the pages in the bitmap so that they will be flushed to the guest later. Signed-off-by: Juan Quintela Signed-off-by: Lukas Straub --- migration/meson.build | 2 +- migration/multifd-colo.c | 57 ++++++++++++++++++++++++++++++++++++++++++++= ++++ migration/multifd-colo.h | 26 ++++++++++++++++++++++ migration/multifd.c | 14 +++++++++--- 4 files changed, 95 insertions(+), 4 deletions(-) diff --git a/migration/meson.build b/migration/meson.build index 16909d54c5110fc5d8187fd3a68c4a5b08b59ea7..1e59fe4f1f0bbfffed90df38e8f= 39fa87bceb9b9 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -40,7 +40,7 @@ system_ss.add(files( ), gnutls, zlib) =20 if get_option('replication').allowed() - system_ss.add(files('colo-failover.c', 'colo.c')) + system_ss.add(files('colo-failover.c', 'colo.c', 'multifd-colo.c')) else system_ss.add(files('colo-stubs.c')) endif diff --git a/migration/multifd-colo.c b/migration/multifd-colo.c new file mode 100644 index 0000000000000000000000000000000000000000..05a81e57b2bda517cbc0844b4f0= 3dc78453f6af8 --- /dev/null +++ b/migration/multifd-colo.c @@ -0,0 +1,57 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * multifd colo implementation + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "exec/target_page.h" +#include "qemu/error-report.h" +#include "qapi/error.h" +#include "ram.h" +#include "multifd.h" +#include "options.h" +#include "io/channel-socket.h" +#include "migration/colo.h" +#include "multifd-colo.h" +#include "system/ramblock.h" + +void multifd_colo_prepare_recv(MultiFDRecvParams *p) +{ + if (!migrate_colo()) { + return; + } + + assert(p->block->colo_cache); + + /* + * While we're still in precopy state (not yet in colo state), we copy + * received pages to both guest and cache. No need to set dirty bits, + * since guest and cache memory are in sync. + */ + if (migration_incoming_in_colo_state()) { + colo_record_bitmap(p->block, p->normal, p->normal_num); + } + p->host =3D p->block->colo_cache; +} + +void multifd_colo_process_recv(MultiFDRecvParams *p) +{ + if (!migrate_colo()) { + return; + } + + if (!migration_incoming_in_colo_state()) { + for (int i =3D 0; i < p->normal_num; i++) { + void *guest =3D p->block->host + p->normal[i]; + void *cache =3D p->host + p->normal[i]; + memcpy(guest, cache, multifd_ram_page_size()); + } + } + p->host =3D p->block->host; +} diff --git a/migration/multifd-colo.h b/migration/multifd-colo.h new file mode 100644 index 0000000000000000000000000000000000000000..82eaf3f48c47de2f090f9de52f9= d57a337d4754a --- /dev/null +++ b/migration/multifd-colo.h @@ -0,0 +1,26 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * multifd colo header + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#ifndef QEMU_MIGRATION_MULTIFD_COLO_H +#define QEMU_MIGRATION_MULTIFD_COLO_H + +#ifdef CONFIG_REPLICATION + +void multifd_colo_prepare_recv(MultiFDRecvParams *p); +void multifd_colo_process_recv(MultiFDRecvParams *p); + +#else + +static inline void multifd_colo_prepare_recv(MultiFDRecvParams *p) {} +static inline void multifd_colo_process_recv(MultiFDRecvParams *p) {} + +#endif +#endif diff --git a/migration/multifd.c b/migration/multifd.c index bf6da85af8a1e207235ce06b8dbace33beded6d8..9006f73cc5b52e8814da107c0b5= c867ee6d03a95 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -29,6 +29,7 @@ #include "qemu-file.h" #include "trace.h" #include "multifd.h" +#include "multifd-colo.h" #include "threadinfo.h" #include "options.h" #include "qemu/yank.h" @@ -1398,11 +1399,18 @@ static void *multifd_recv_thread(void *opaque) if (is_device_state) { assert(use_packets); ret =3D multifd_device_state_recv(p, &local_err); + if (ret !=3D 0) { + break; + } } else { + multifd_colo_prepare_recv(p); + ret =3D multifd_recv_state->ops->recv(p, &local_err); - } - if (ret !=3D 0) { - break; + if (ret !=3D 0) { + break; + } + + multifd_colo_process_recv(p); } } else if (is_device_state) { error_setg(&local_err, --=20 2.39.5 From nobody Wed Jan 7 09:30:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1767103607; cv=none; d=zohomail.com; s=zohoarc; b=Edka+iczEEBhShT2MBDr/NjLao+uqhthrJOSLOkZ5HsOWoLpJ9J99G4kpcbiAdlwHJjnxBieIkiogyX0LvrUiKt87shOqMgAjiBEJVL4yXvRxkXuhRkGennqjFnnXOFni2bcdXehFvsOh+QId1kaaLK4o6IiuTAW4WWbOmAq2sQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767103607; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IJdhhwrpjxpzQDkHFTGPLxwjC0Qy2O4wkTBkP1PiIOg=; b=Ux/Z3X2r0jcZznS68lLUlgnAhz4eUx84cPW1u6AzrS8EHYam2XOjJgZS3BP0YFSOoWKtRCGRB3jPS2abBWVoowhGFWwiv7xYpeUGVFnTZfQHIxTlqbJAgx64xGw1UH5UGdDP3ex1/pZ99iqf8IeAxEb0OU+n364bas4QoNaKKSw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767103607594643.642731531679; Tue, 30 Dec 2025 06:06:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaaMS-00047R-02; Tue, 30 Dec 2025 09:06:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaaMQ-00046n-G6 for qemu-devel@nongnu.org; Tue, 30 Dec 2025 09:06:06 -0500 Received: from mout.web.de ([212.227.17.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaaMO-0000f7-6x for qemu-devel@nongnu.org; Tue, 30 Dec 2025 09:06:06 -0500 Received: from [127.0.1.1] ([217.247.110.28]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1N8Vop-1vw7b23Vtx-00x6p0; Tue, 30 Dec 2025 15:05:57 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1767103558; x=1767708358; i=lukasstraub2@web.de; bh=IJdhhwrpjxpzQDkHFTGPLxwjC0Qy2O4wkTBkP1PiIOg=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=ulyXDT3dZYkNPXMm7FFbYyCDA/T2ldaz2xYfuY8QCIz9LIkuO3me/LMUPcK7l1Yw W7VUMRHxfrkTb3p2fjTXBh4MCNWnwXWWrWSMF1Iade/8AAWv9aYTwTE1SbbQcqEQZ EvsueUR32HeJDDD3fyI6RtMhb4f7NuWiZOd66lydHvMbmlN+Rx5jCg6PNpqrowYFR +Qg0nT0Xjp4G2eG6lZAiT1Ga1qjShi9AHC4jss8qT2hOPQo8Ontuw3tjKwGj4bdJF 9gAnzqcIimUJGSy2xJXv3ALPFfLsdQQzJVKIy1n27cV9Xn7+g+uu8A22x5nsdtg5k Z9f5Dp3Sb26AZz2yvQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Tue, 30 Dec 2025 15:05:45 +0100 Subject: [PATCH 2/3] migration-test: Add -snapshot option for COLO MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251230-colo_unit_test_multifd-v1-2-f9734bc74c71@web.de> References: <20251230-colo_unit_test_multifd-v1-0-f9734bc74c71@web.de> In-Reply-To: <20251230-colo_unit_test_multifd-v1-0-f9734bc74c71@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1939; i=lukasstraub2@web.de; h=from:subject:message-id; bh=DZjtVO4KSpIlSVNY0AVQ++ao1ntVj0lQQjATFcqIaYE=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpU9xDB01VAOpZKifg8UucaYdRU8UeMGd4rfV2d i8Nbl28ArKJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaVPcQwAKCRA1qwsonF2y WI/4EAC5d/lRBQ7ZXitvNNs+t03xXhuxwlQqpjp6McEYCOt9VNePfi7KWWo5HuftZcsnip+Vigv j5WPyfa8Pn/NKn/2CJhzARqBs4FCmHs4Q1xn4KatBDccchTtSOSn0IRu3GiUXLCpxZn9gMX43zZ zlqBRZbEM8Hy8G4R/y6TakN9F436E4Yu+lckPrnpTCfD1oeUe+OSAoiGxBmhvINNOHezEKiS4MA u0V4Gmzj93oe5JEGGDAn+L/sxcUjZPPAMKCqt4WL3J14FFXS6jY8cJukGKV963AJDCYnyjf1IGX 89Evyc4SJOtOr+S/u05epk8d8JthWULlklT9NqslsMLdTpZJ1GdgqNiLktt2EDoGHxlJ8FwLHeQ wSJ88pRLa+zqLRdptxmX2sgH/TxKyySX1x/FJsH1YhaJPc3exspsFl0kUgFAspqyuW0KTTkUNgK ZgLyFPm1+QCjT/EzrzFNmvSRvCPbCwhFr2GR6wIXvkv4ihc44YERouRbUBtcHwGgnqtiUEHWRwp EpQ9e4jhSl1/xu+IRoH8Fri6hwMqJd4JGv46w34u+P/a4EKK0dyK883mCoOorgWV3ZiMYOm03HX SJWSOCDA6VBhhYnihpMjGLb12OvalbAZaIAVVwgbEiluVJPZS8YLPMuLY+HDp+JVjFBJxuZOy/C +/jH7crohiEwUfw== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:+23O/FIOtKxmwGAHswrs+ymBG72QMFDqQ1duvcOU0iVZycjlFD+ OExAw1Tfdlsjmr+pkRWIM+PqM6lBBvxdTTPL2YchWoVl+k2Tamq1mFpIxaMVQdsNoCq5x1e t1230+r26UHhvFg40vxF4njVovR/C3iR7C/wQzvQgFXuTDfxv7tH3C6VwfY1W+MGwtEDCng O0gFfAg4khSTTNQVP3fww== UI-OutboundReport: notjunk:1;M01:P0:JpZlnrlAnGA=;8SuW5mmPyHp/wSFS6sHr2C4IOyi 0zbaBz7ZegSSqaovjkbviLuWU1UMpOph9Z1cSg6JkXnCV08q3Y7DPZ/y9O4rw6ffKJCS0lzDh vCZV/DOqJMOpT/5PlmK3gGg+LhGo16jWob45Y24KtqJ83fv/DGZRtTeTBgvGkaIT8P8o6kvsX gEl0UkKc8eYmBccLZDj8G0Z2w+G5xbpL5MY+4rT0UaZgqWYcimPu+E/WJBRr7z49zMM4ch1On Dgo/MkFmNhN++wy7yFMdeaCfUnI0H3I1Q0dv5tzW9r/bYkLI1T6tCogeiOANOefI3iKaPkyuj J/rEx9eL+6o/Qes1DUoSvT0pa9VtE6j4Q5brEiPUKI0Fk1MxNRoUmnwbttXJtG7x7KddIVNuo S7QLKUaUBDDoMrWKhpvdpQeoVkQNj/YqjF5J+uInACyWAmOGncLRIMLykGDbixNhLqyWoXxti C7R+2J5KMXR2pjUqMMQ/AuVDwEGQi8iu3v/ESTkalJurKgA5kiTgMY1KBDMT6e3o3iR1PcZ0r Hp752r82gcu1/VsIVadeAbnWte+f/vaoxrG5ymlYZBjH0gbor8Z6HjnMDoxSh4PJ3bJ+MdhwJ tESJMPOEbuKrYdswuHUMOp5TGbq1kcSoeQwGmy9KGnNnA1AtoybX/KBCMewRQSi/zNi3NiQ2J oTJLRrLVXRKBoSwxJ7QyyKNr3UOXMBhy6rJqqTQEAULV9tpzaevAZXb/oEXu3vHaxi471CFFO F1RDzrHF/uF8CMAJyayGX/elV+RICcfTcFyfCMptdr+XGPx83bO5/68xWX3guhCpJ0xd2mHeM Emi9snRgJ6S5GQ9y8JXvRwttmDceqJcY2sJE1iofgsuAHqijiykxO1eqbnCxTnI4HVTiow3dX XOkoyi9untd7kcsy0NwkWlG7kKR7tr1pEE5iowsohh4AfN+EuuVC+sgiZy1xuBZBpdbbwB48Z KjUMko+5hu6vtYKbMwaImLe4i1C6jr1RlAPF55sudCLO1huvPiFe8KjLSRjlxgX2df756WEa0 XomjEFnF3elQk7MDxBYN3CCFg3l30VY9Ua8hRd72hai5B8NQfOH0rAs9GFmVunhSY3psnT1P+ b/CpvztonJIi/YEE2DyN25dp14mFyQX8E8bPGvGkwO5BDZugYzdoiKutYbGT28URS4pn1RKjf RGEZWQixBYv7KOOM7NWpoESEp6hTvEq3nUsu7NnqDFwsRsdQcl7xBHwfCKBhvUxkVQCB42hOi OA14DbKvkHNN7KVtYT1wsSlixKGmQl8k2AOF6BDux4f13gfVXW3vxPy1NrAJJYU/ZdeKk1/t/ zV0lWIVcCd0CtGz1EQB2771Gg/Wi7MsCmUTwoBIvFhZOacAUoQ3Yw1aoKI9cSVGm8Fwc3KSxS E31pR+OhHFONClj4liJGoLaVCZj1adolNujQWX367hqsLlyQiK27xiQY/pviR6hGOCF2KP6BN ZGjdmN4/InjBpXpI/tQdByvWjNiBH+50ixuAnTrqO91wzdzR7FQBMr5XtpqQchBqywh9/XOEE Twb8QxX0ChNFNNqS2jdV0zEt24UjdCSrYNh58ywz+l15VQhovuU+/SVV8F+MRWYkjegeOGtiu 2JDuiSrY+6nQnSYrsKZzGhLmHv+insB7QcEV1yBHy0mXg/vK4lDNixmfgA2gYi4yNj+JDLCV1 FjEwEFYtI80O9vqQJnEHb7BkM6Y/HZQcmpePGytkmDar470TRx/c2WUDdH3kPWQhNupkGdBNQ eEWkCQMLQZBzKvhWJLY1MEQxqZMTDRBhu7G7LBtKWtLDL+uTSutcaPBFSa64wwgPIv79JT+uE KZUsP/jNzU5JXexUrzZnXerA95rNDbXxfranGmuOJoISsP3obCx9/s73Nz4yf2KeCjPHsRN9s nzMdlx2sGBUKoTKmNm+83CR39b9Hmm8Z4hP/P5Bu9v+jb9mCqsAN6l6RIj9uTfw1LLD8QzRgd xHW4aJ+i5V7N4PrHCF42kFBEiKCVBBy4aQCfgFQXngyvH3M9rrl6B1ZWIHypjZbJkm4oEOXz4 ctzZZUI5gJLh/0IcHQR2SyfFqgcTzZBTTpkhtsgyRynlX6KeiaAZttM6tsnmQNnLXtkhlpJ+T NMff7jPR5qzVEUbZILmmvzn/3RM248Pr3F/aOVN7oqXzqJNcL689E9SVJuqK8LxNisQe9kUzT jwk6cC8/sekWE7nGgktxWHwCLfTrmhL+bt8ITaIQ2wKRfJcl4c3iafqjCtLZcwIab8hxA6cJA 9E7QyQ7OItO1C9yzDRgSaS8GgxvBbAi57CKQNZl2YzHYyOT9P2bunTazxofDBsQSk4TAi8eYi NVIBGKtd+wUeBvOxYznRkybExrGfpw+tHWQb8EF9+xSzzIf4OiBp9i7gARu3Yu614NeS4VewU rW0Fsy8eyyAguezFF27hpOtxCTsmkxoTxzhazVsZ94ax9zZOJXctQVEVMdfQ4cyHchvr3lWuX NfeE+0akJ7V4rub/kzbxJOWYcVKSLSzI1EGh8f05SFPyQVK/QgkHeVRLzR5CD9S2HPpuYvFMw o6mfIuCtZLNRe1Hcuf4XIK+jI/qB2ab6me1YEyeNGNwnzxr96hX6gAl+MaZ7GG6upCaIKK3Tk 342jO14jky34Ias/+2fwnfdamihISLB63qh9ZpRidZ0s+VfdiDs5N+XdZzSQoEfuEYp5Q+6bX ZDYMCFafnrVGdWX08w4MITanRhBYlU1fd8jr7Y3pbLS9O/1eVgVzSzHbf7p1Lxb8BV8WrbSXQ /AKcW/GIwiMCnN4P2mP/xUpMMNMA2aDbC/iZ0hAd131XR63he0QAXXekypPo3kINVy+5FRKuO Eqjoa8XRSc2UD3cAUvG+9HjG5lKIPA1u69FpXTwZVeF08PIcWwxC9Qd82ewnJJ45OihJ6SEH+ 0SP8nF9vdhzZlSUHmtBZExpPJTh2c/Zu5rOeV31gRYE510meK8h3B9WX9SHMK2/uPKcbs1OYz ZEQC8p/jcY9WpRWYKQLtOWoYToWIQ+nCKC0OlMwgve7Cs4TDeCyX+yVaGZH4NFObBNBplA0UG G9CFDLgsEGEsz6G/GUsK392AJeoJkNdhbeQN+eKVhcnqyOzSWvOXmK06npZkJpTreQwGuXRA+ cx+7SAsw0nzIsZjAxAypCvpGqaDBsGo3kFibioscGtNuWFe7BzQWstLw6ZWHL/PHLXQBMLdqE auVJVuNimoj5WSihFDS/vEOP/oczxePJMmxoQYZ5TeyUXxumcMEghgWZ43/IfQpWrTKZaPO0E gpvVP6wRVvCGJ5AkW1bra8Iv/D8QPbfFg1fPCqDeMjN34WWxbnuyuM8VGGuV0qF9oJWuhPbgz oE8dkzbmW4D6d786Yb4p//upSW3vYsdvrLDYhQrr+4JcF+AZveKqc8J8ElzMtuf7nC0nCK8OO siEBq7Afn36F1n06TdxEvkBXB7mHszXB0lYFM0yNrtTAaha3AEhNKS6m0JWjC4w7iXsYjZ/Uh VjvCkkzqizUbz4Ta1aLpIwaUS3hZvRfOQCmSuuFIZHCgVePjtl8hiROcridaeYVOXdiA8FGQN o9JE5d+VLAS8mW7YSFO5K8/KYBeCbeTCKUFNwjR+J5ekaVW0L75EJ3/G/AIsLx1eC/lqSSJDA ae/V2w1hSbt3vzoz11Z36OUZOzXl7GelfxkusX872Fcr2F+JJHtc7+/sg92jQ0oIU0XAITApj QoP+n36/5dgd0+gv1bwA6j2axSncB3rzGmJt1hRXz06LaTbWlK2oBMjX7MDuuiOXQcCrCLieW /qRMePwvnvETfrFqCZNJp97QWjURV2UahWeQS9zSLbo+ThpKzsm7XS4DVmMJCNCmUNF9R06+U wQBl5F2BKWgZNRaMnWiDLCw2TzRFtoYNrLhYFSzxe3giRoPDVsG+TT/7vV8bqQaWoJvuJVa7s Ukn+P8mhzX2gY4PRyBkl4ssUWyKEdBaYSvIqe6kDGx7GNt+S3i8xIwipD7MgEMPDPsMLbhe1y HGYpo2GSYOXsc4YbQfaPceDyTtRhqL4T+T4rYyJ4/R/L5YnEfOLv43ppcU24kcKpF5k/X3zur R/e1D9yVYjPQMFNfIpVNGMvSSaFVRgc9HyP8nEdKSU7OfLdwQll7h0Ho6+ZBJMz9FSISN1NE0 GQENdoEi0M47XlVmJ712qUQQmp1c7B1Xq8uTW6OYcwCydheqVAsY6DAlj83N2r+yPmTU41yxh Djkhf3MDDQs0ajCYwFOYFCqzxISu/muawTQEp3HI42AHcXQ3jwXbckYqcInylH2rNWOQJYoS1 78I68rWIHMeQbVq+V5GpBsiTnTutytqWJVznLoNe9wVfu4agj5bpfEMi8W7yTq1hH1xw/3XxP 9nJjsC5WOoqMyR7FV9quSCkaTySIHoIsxv/21zxTPAfW7Lt5M8DWDLVQYnaxtfoytBmeYsd2c mb8RhsB2Uszsd40lVd7OSOELKmSOaJ4+lvnuHyjE6hsJX8EKfuij7vlVxbRBg8hgVNLnHzYSD AIAK1Uk9UDpSBZgXu7hPf3PFCxJ7hr8zuovQUWlJPz2fkmHcZCJHf+uhJK1xv07g6cz9b5pLQ cdCWdD5SAQlYCrSQeV54kQ94aVTBw/NOzQwqcmZHH3/DJLxrbMNuTQ9R7BcikQEZxTz9GvAl+ Y2orGaGmNbSe7ve02BEf64Z0EQjCxC5GRBg3OnK0Hw9m7TydcA0t5QLnprKzBEkJjyDq83FSZ BifFmq+MEg3ZBauGvZlnnd3IK8alLhNcYN0o9Kr7lrL3wwYTpRxm4DabEqcuTX860Bqr/CLXQ kV6F9Lop7edpVRtjtPHu+wgdyzBAlYnzOa2qWVzBxpaLa0P9CuCtTnCQrbd3HJyq+Rfc124u2 +YN+sqTe6oJ1EGPSeRaSeLz1koSaUknTwUsRcwc88SQ493Odux5D6LGTwLNbE1JA9zblSoGKH iu5sWUn1yFpPinawjLir61/+Hn3n575Zqmlp84ACiwTaA2Sc+SyChzCF0gFVtjIcnKg0jsrxG Fp8yu9vAYvqe2j0kWbUEt6c3g5xyZA5UBwR2bwzjmQebEyMlQhZ7zSrdIsAo4B60fy3gJXXuY I7YyyrjzfE7kgYaBoI9l2BSfzu1poNtPIKceTIOUa49Yv/D1AyljQ2lK+MP9LzVGaRxp3KQwn TSeOEvFYntpMM5AWX3dEuEtG6ikcDdflXD1NdoDR/aOa4lvJyDfDIgNn9eM9q2/EMRsj6wkeb Lf5crus4= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1767103608862158500 For the COLO test, both VMs will run in parallel. Thus both VMs want to open the image read/write at the same time. Using read-only=3Don is not possible= here, because ide-hd does not support read-only backing image. And the image won't boot with ide-cd. As a workaround, use the '-snapshot' option where qemu will internally crea= te a writable snapshut while leaving the real image read-only. Signed-off-by: Lukas Straub --- tests/qtest/migration/framework.c | 4 +++- tests/qtest/migration/framework.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/fram= ework.c index e35839c95f51d851a3fed8e8457ed2d7e927f59b..8c1fc6e009f16dc05a47e917167= f62e0250ca992 100644 --- a/tests/qtest/migration/framework.c +++ b/tests/qtest/migration/framework.c @@ -322,7 +322,9 @@ int migrate_args(char **from, char **to, const char *ur= i, MigrateStart *args) } arch_opts =3D g_strdup_printf( "-drive if=3Dnone,id=3Dd0,file=3D%s,format=3Draw " - "-device ide-hd,drive=3Dd0,secs=3D1,cyls=3D1,heads=3D1", bootp= ath); + "-device ide-hd,drive=3Dd0,secs=3D1,cyls=3D1,heads=3D1 %s", + bootpath, + args->is_colo ? "-snapshot" : ""); start_address =3D X86_TEST_MEM_START; end_address =3D X86_TEST_MEM_END; } else if (g_str_equal(arch, "s390x")) { diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/fram= ework.h index ed85ed502dd01aa809892b68d3934b5107bd3442..2ea13e7758697550b5531737e66= d6d939dd800d1 100644 --- a/tests/qtest/migration/framework.h +++ b/tests/qtest/migration/framework.h @@ -134,6 +134,7 @@ typedef struct { bool suspend_me; /* enable OOB QMP capability */ bool oob; + bool is_colo; =20 /* Do not connect to target monitor and qtest sockets in qtest_init */ bool defer_target_connect; --=20 2.39.5 From nobody Wed Jan 7 09:30:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1767103610; cv=none; d=zohomail.com; s=zohoarc; b=X3oFzTzanUNUIh1Q8en7YEMfcJRF6wjRDT1r5LNm/Yqji/sdJETOgSNnX+PQQsjku65QR56Yg4TijUz8onE2fm2K88IPjdu/YdGGAR3SaSQkFzyaXwQhBwFZR07GlpHgyWxJhReF6goELoK7Kd0DiKqMkhN8fKFOUGjQj+l3VG8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767103610; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=A76Ph+i1GoIhnzPNQjvIUIAIfgTWKwRNvs2FSVtG0xk=; b=in+n5BTZw3qEPB2I+uBCr6SGAaV3K+XJxcIWx3gBLXU9pMZp5FPg7NBMGjWjZC69KfHQl6vH3pq6byovr5r+x4HAmhBNb4Rk24s8TrP+qsgY0BgWA+44oWPiwcUE64qn3fqUzvIKEz0VsAsB0yjstJJ8ApT0Z4w1jRuZcaP9V5E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17671036106461015.4721776442058; Tue, 30 Dec 2025 06:06:50 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vaaMU-000492-Im; Tue, 30 Dec 2025 09:06:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaaMS-00047Y-6X for qemu-devel@nongnu.org; Tue, 30 Dec 2025 09:06:08 -0500 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vaaMN-0000fH-Qi for qemu-devel@nongnu.org; Tue, 30 Dec 2025 09:06:07 -0500 Received: from [127.0.1.1] ([217.247.110.28]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1Mr7eu-1wEbx21Cty-00e40D; Tue, 30 Dec 2025 15:05:58 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1767103558; x=1767708358; i=lukasstraub2@web.de; bh=A76Ph+i1GoIhnzPNQjvIUIAIfgTWKwRNvs2FSVtG0xk=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=V+Yb/isICt9DxFfRrY9qvfUYCA08PUzWlqPXFPLfjnfYyapsXaPUSzbMDahzCYHe vZ6EK901L+i2Iyhc7h6FzX9r4ufIdR78dNWqh9+fUuNufBxjxLsnDsoe1YKcf8wII n9ZFESyNgulr4iuOkOdyjoKwhW6D+CvS4vDiCl0fBuI8CfdVY3RCidOh7dyZTMXtD GCzlRtaddhqOlTUEuNn2yRqABOqHyi1Wo/cgw/wR5HAlLV5Sgxbd/YrHLEkmSPeah dc69XcFXa9Tm7MSZ8N6lsLqFrtH/zGs8Bf1Mn0p+q/ZgI5eN31XnpkdDg6tGStruH sLOiaLqw/eWhEOT+Vw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Tue, 30 Dec 2025 15:05:46 +0100 Subject: [PATCH 3/3] migration-test: Add COLO migration unit test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251230-colo_unit_test_multifd-v1-3-f9734bc74c71@web.de> References: <20251230-colo_unit_test_multifd-v1-0-f9734bc74c71@web.de> In-Reply-To: <20251230-colo_unit_test_multifd-v1-0-f9734bc74c71@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10834; i=lukasstraub2@web.de; h=from:subject:message-id; bh=QEAmCgemvlKK2nsqj3U9UKnsQqF1qKJe1KOMusox+SI=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpU9xDK5JxjVW5w2qJO3wrSrv94+dBildorCsbz ZQ4xGZ4JqqJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaVPcQwAKCRA1qwsonF2y WNTID/9h8KKod3PdEIVy98628Ws7cbltPXvppWZ4wtXq+VdqTEE3K96VVRJ+p9vxK7Tq0fdHYJ4 rP4QNkoJchlyB557ZNIB1hPlL6kJ5i/M0fdpOKQRert+w3MFdObN3RGjNtpijIkztyaFak6GiGD 6h5UDm9fvu8RYvYFS/i1PL9z3BM/7PQ1i14+LPdVxD+52S+xmv9LoJhJUAy2OgZtp/hQZdfpnmS o9GaZbmwXb8ckDEpBuGDLjV5vkTtk/h1qTfM1qSb2j6bDmmeHda2wxJkUS8duXyufCzsMLFtHCY EpWbxnf+vMq/leTT6folpG/x2NghDALHA/GUUvoINnr4zuUgGV5KGMvAgM3qtmmYFL6rsaZHFo2 G2gRiAwPe8UbKhyIBAiFTUniJ2EkegQTgiwgJKrPon3Vio9IKIrUIBPLcRCDUbrlQCwm0Wy52+0 cxP3IcxY9euWlmmvdjNJS+eCHLcVT9NzjOe31tZ8lmvgJS2k8Cx8oxb3jSaJANs3IhCeQcohiya wL6+EbOkyduCT3sqdEABQbkwDpTRC6UpAmbJLIwqDzbXaPjixquAaJptL9qUlKAGBf3Wr4iEa0h VOqH8cq4yN0bWHaqdLfP7Worxs3+V1VUD5XgVpRXfcgYjred2MtxJZJcZOWnOK3b/r8hQDbOFmn j8lanC/Nyll/a8Q== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:lU+aaT55dL9tHHgu1gSzQFH+OLe4TNavYdxVfzm5XaJJCHCCHOx KmO2jDka6V0aLXhQI9JnOxRvowS0pXdCpccW3D98bTS1PRYd3gwx/ZyL8V1wUI1vfxVjdtI E4lEfLeci/mhiOqAjxHJKdlyL4C3jrO0gfIihbQ3VhJUcwkrLZ7NYnn6ROT590IZ4L4P+hj HvTfqNmm7av6pmnghwlYA== UI-OutboundReport: notjunk:1;M01:P0:HnODsnAbyoI=;qN2O3hPoAX7RcqqiDqz7a5nk94G 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 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, 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 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1767103612808158500 Add a COLO migration test for COLO migration and failover. COLO does not support q35 machine at this time. Signed-off-by: Lukas Straub --- tests/qtest/meson.build | 7 ++- tests/qtest/migration-test.c | 1 + tests/qtest/migration/colo-tests.c | 115 +++++++++++++++++++++++++++++++++= ++++ tests/qtest/migration/framework.c | 65 ++++++++++++++++++++- tests/qtest/migration/framework.h | 9 +++ 5 files changed, 195 insertions(+), 2 deletions(-) diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 08fba9695b9813dc0b6b6554ef8c40c9615918fa..e68ce6c193ce2a2c244fa072ebb= 24738380f844a 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -366,6 +366,11 @@ if gnutls.found() endif endif =20 +migration_colo_files =3D [] +if get_option('replication').allowed() + migration_colo_files =3D [files('migration/colo-tests.c')] +endif + qtests =3D { 'aspeed_hace-test': files('aspeed-hace-utils.c', 'aspeed_hace-test.c'), 'aspeed_smc-test': files('aspeed-smc-utils.c', 'aspeed_smc-test.c'), @@ -377,7 +382,7 @@ qtests =3D { 'migration/migration-util.c') + dbus_vmstate1, 'erst-test': files('erst-test.c'), 'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'], - 'migration-test': test_migration_files + migration_tls_files, + 'migration-test': test_migration_files + migration_tls_files + migration= _colo_files, 'pxe-test': files('boot-sector.c'), 'pnv-xive2-test': files('pnv-xive2-common.c', 'pnv-xive2-flush-sync.c', 'pnv-xive2-nvpg_bar.c'), diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c index 08936871741535c926eeac40a7d7c3f461c72fd0..e582f05c7dc2673dbd05a936df8= feb6c964b5bbc 100644 --- a/tests/qtest/migration-test.c +++ b/tests/qtest/migration-test.c @@ -55,6 +55,7 @@ int main(int argc, char **argv) migration_test_add_precopy(env); migration_test_add_cpr(env); migration_test_add_misc(env); + migration_test_add_colo(env); =20 ret =3D g_test_run(); =20 diff --git a/tests/qtest/migration/colo-tests.c b/tests/qtest/migration/col= o-tests.c new file mode 100644 index 0000000000000000000000000000000000000000..adec41c1c0473539d02e488b1d0= baa663d7743b1 --- /dev/null +++ b/tests/qtest/migration/colo-tests.c @@ -0,0 +1,115 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * QTest testcases for COLO migration + * + * Copyright (c) 2025 Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "libqtest.h" +#include "migration/framework.h" +#include "migration/migration-qmp.h" +#include "migration/migration-util.h" +#include "qemu/module.h" + +static void test_colo_plain_primary_failover(char *name, MigrateCommon *ar= gs) +{ + args->listen_uri =3D "tcp:127.0.0.1:0"; + args->colo_primary_failover =3D true; + + test_colo_common(args); +} + +static void test_colo_plain_secondary_failover(char *name, MigrateCommon *= args) +{ + args->listen_uri =3D "tcp:127.0.0.1:0"; + + test_colo_common(args); +} + +static void *hook_start_multifd(QTestState *from, QTestState *to) +{ + return migrate_hook_start_precopy_tcp_multifd_common(from, to, "none"); +} + +static void test_colo_multifd_primary_failover(char *name, MigrateCommon *= args) +{ + args->listen_uri =3D "defer"; + args->start_hook =3D hook_start_multifd; + args->colo_primary_failover =3D true; + args->start.caps[MIGRATION_CAPABILITY_MULTIFD] =3D true; + + test_colo_common(args); +} + +static void test_colo_multifd_secondary_failover(char *name, + MigrateCommon *args) +{ + args->listen_uri =3D "defer"; + args->start_hook =3D hook_start_multifd; + args->start.caps[MIGRATION_CAPABILITY_MULTIFD] =3D true; + + test_colo_common(args); +} + +static void test_colo_plain_primary_failover_checkpoint(char *name, + MigrateCommon *arg= s) +{ + args->colo_failover_during_checkpoint =3D true; + test_colo_plain_primary_failover(name, args); +} + +static void test_colo_plain_secondary_failover_checkpoint(char *name, + MigrateCommon *a= rgs) +{ + args->colo_failover_during_checkpoint =3D true; + test_colo_plain_secondary_failover(name, args); +} + +static void test_colo_multifd_primary_failover_checkpoint(char *name, + MigrateCommon *a= rgs) +{ + args->colo_failover_during_checkpoint =3D true; + test_colo_multifd_primary_failover(name, args); +} + +static void test_colo_multifd_secondary_failover_checkpoint(char *name, + MigrateCommon = *args) +{ + args->colo_failover_during_checkpoint =3D true; + test_colo_multifd_secondary_failover(name, args); +} + +void migration_test_add_colo(MigrationTestEnv *env) +{ + migration_test_add("/migration/colo/plain/secondary_failover", + test_colo_plain_secondary_failover); + + migration_test_add("/migration/colo/multifd/secondary_failover", + test_colo_multifd_secondary_failover); + + if (!env->full_set) { + return; + } + + migration_test_add("/migration/colo/plain/primary_failover", + test_colo_plain_primary_failover); + + migration_test_add("/migration/colo/multifd/primary_failover", + test_colo_multifd_primary_failover); + + migration_test_add("/migration/colo/plain/primary_failover_checkpoint", + test_colo_plain_primary_failover_checkpoint); + migration_test_add("/migration/colo/plain/secondary_failover_checkpoin= t", + test_colo_plain_secondary_failover_checkpoint); + + migration_test_add("/migration/colo/multifd/primary_failover_checkpoin= t", + test_colo_multifd_primary_failover_checkpoint); + migration_test_add("/migration/colo/multifd/secondary_failover_checkpo= int", + test_colo_multifd_secondary_failover_checkpoint); +} diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/fram= ework.c index 8c1fc6e009f16dc05a47e917167f62e0250ca992..08bca49a8980f9988be9447acf5= 4b17acd56da94 100644 --- a/tests/qtest/migration/framework.c +++ b/tests/qtest/migration/framework.c @@ -315,7 +315,7 @@ int migrate_args(char **from, char **to, const char *ur= i, MigrateStart *args) if (strcmp(arch, "i386") =3D=3D 0 || strcmp(arch, "x86_64") =3D=3D 0) { memory_size =3D "150M"; =20 - if (g_str_equal(arch, "i386")) { + if (g_str_equal(arch, "i386") || args->is_colo) { machine_alias =3D "pc"; } else { machine_alias =3D "q35"; @@ -1068,6 +1068,69 @@ void *migrate_hook_start_precopy_tcp_multifd_common(= QTestState *from, return NULL; } =20 +int test_colo_common(MigrateCommon *args) +{ + QTestState *from, *to; + void *data_hook =3D NULL; + + args->start.oob =3D true; + args->start.is_colo =3D true; + args->start.caps[MIGRATION_CAPABILITY_X_COLO] =3D true; + + if (migrate_start(&from, &to, args->listen_uri, &args->start)) { + return -1; + } + + migrate_set_parameter_int(from, "x-checkpoint-delay", 300); + + if (args->start_hook) { + data_hook =3D args->start_hook(from, to); + } + + migrate_ensure_converge(from); + wait_for_serial("src_serial"); + + migrate_qmp(from, to, args->connect_uri, NULL, "{}"); + + wait_for_migration_status(from, "colo", NULL); + wait_for_resume(to, &dst_state); + + wait_for_serial("src_serial"); + wait_for_serial("dest_serial"); + + /* wait for 3 checkpoints */ + for (int i =3D 0; i < 3; i++) { + qtest_qmp_eventwait(to, "RESUME"); + wait_for_serial("src_serial"); + wait_for_serial("dest_serial"); + } + + if (args->colo_failover_during_checkpoint) { + qtest_qmp_eventwait(to, "STOP"); + } + if (args->colo_primary_failover) { + qtest_qmp_assert_success(from, "{'exec-oob': 'yank', 'id': 'yank-c= md', " + "'arguments': {'instances':" + "[{'type': 'migration'}]}}= "); + qtest_qmp_assert_success(from, "{'execute': 'x-colo-lost-heartbeat= '}"); + wait_for_serial("src_serial"); + } else { + qtest_qmp_assert_success(to, "{'exec-oob': 'yank', 'id': 'yank-cmd= ', " + "'arguments': {'instances':" + "[{'type': 'migration'}]}}"); + qtest_qmp_assert_success(to, "{'execute': 'x-colo-lost-heartbeat'}= "); + wait_for_serial("dest_serial"); + } + + if (args->end_hook) { + args->end_hook(from, to, data_hook); + } + + migrate_end(from, to, !args->colo_primary_failover); + + return 0; +} + QTestMigrationState *get_src(void) { return &src_state; diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/fram= ework.h index 2ea13e7758697550b5531737e66d6d939dd800d1..1da532569d8c5941c99d83ae7da= 88ccab2bdcbe2 100644 --- a/tests/qtest/migration/framework.h +++ b/tests/qtest/migration/framework.h @@ -230,6 +230,9 @@ typedef struct { */ bool live; =20 + bool colo_primary_failover; + bool colo_failover_during_checkpoint; + /* Postcopy specific fields */ void *postcopy_data; PostcopyRecoveryFailStage postcopy_recovery_fail_stage; @@ -248,6 +251,7 @@ void test_postcopy_common(MigrateCommon *args); void test_postcopy_recovery_common(MigrateCommon *args); int test_precopy_common(MigrateCommon *args); void test_file_common(MigrateCommon *args, bool stop_src); +int test_colo_common(MigrateCommon *args); void *migrate_hook_start_precopy_tcp_multifd_common(QTestState *from, QTestState *to, const char *method); @@ -267,5 +271,10 @@ void migration_test_add_file(MigrationTestEnv *env); void migration_test_add_precopy(MigrationTestEnv *env); void migration_test_add_cpr(MigrationTestEnv *env); void migration_test_add_misc(MigrationTestEnv *env); +#ifdef CONFIG_REPLICATION +void migration_test_add_colo(MigrationTestEnv *env); +#else +static inline void migration_test_add_colo(MigrationTestEnv *env) {}; +#endif =20 #endif /* TEST_FRAMEWORK_H */ --=20 2.39.5