From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023107.outbound.protection.outlook.com [40.107.159.107]) by lore.virtuozzo.com (Postfix) with ESMTPS id 89CDA80A84 for ; Tue, 13 Oct 2026 15:28:15 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e1KG4zLfvL9cN1Z6oOUUCULBR6hmysk18DwOSJcVV6aUy4ZHstHicEApNhozHmv84rKeHOH5QKXRV9IiJEqHHH2OTHXSfnydRMas59RlPjFlXuykW0W6Sm18Ma9cZ3LS3ODxS0tgEo3PgIGvlo7iriIM/bwYsPXSur1Uq0dEWq3YaBulpOW7mC/HOCoKFG6GA/V7Xhar91hWied/W09hgtZM+lNlWqk8XjwvWjTvFwjnCZ3p5KmO2KcPSdVEsH+VifFNz8AWWHVDI2nr0oekfmI1W5wJlgROQBGUY6XyxGS5SkRNKgcTSJNXL9iKVYvbSatUW8K4v5rfSfGwRa88dA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=W4Vo+xL3fdM1jBQZJBAQmyedB4QAoCRX+/Ms3rBUqPU=; b=sr5s20CQkveWxjwMq5X4NuZAoCKhNJMFcNhITHDu/KU06CUGn0aMWNfK6XsXpuY0CrDj1yw+pktYpusZHTRvrx8x4PmkZr/RWrSo9iW4oB1N8FgVIDTiKtCrM4CJEvOdQxC6LrY/lV/YSYq7bsvJUh8t73zcX9Bgv4riEyx+M6wliQwuqXGti5E1F+TSheR6xNNU7PEQpFiQNcv/+Z3UyIikGe17PdHGKL6svp5lPNlIH9V2k96oCIbIb1XEqChX7FgiyCqT1l0t+SKdGtmy9630JfqKbL2yEszbBtk7OegBMn7ue8yulZWzQmRy1tPjnuVthVBjIwrlzk3q/vX10w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W4Vo+xL3fdM1jBQZJBAQmyedB4QAoCRX+/Ms3rBUqPU=; b=jItUGwnp+dOuaVYF2KULaFnjvli4dXt8DtnqSd4k0/ZAHip0Lmw19oa5FDHjPLxUIzOIN8xBbvsI2z4PY84fzJvynrCdblFeD/CrBVUYODWMv1eikDmCPt99FNfWVCxIYrb8IqNjjrpKcPLurB/vjOc+HRyEn0ztP09HE5mygSC62VSA/Pe/L072ahyuEL+46mP+NR5qpKiPKIO+u2LpT0h/I152n6DO/2RrqxVt4dhiP2P5lbz5C5Hmr0b5VuHYVejhq5TYUqEsOUxKA+kbby2NYuWSpzbsJSCEeZABvwMZSzlU1Kfa6upYblez0QR5tnrydKUEMFLd8RuUcCFzmw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by WA4PR08MB366192.eurprd08.prod.outlook.com (2603:10a6:1d0:30::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.12; Tue, 13 Oct 2026 15:28:13 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0522.008; Tue, 13 Oct 2026 15:28:13 +0000 From: Andrey Drobyshev Date: Tue, 13 Oct 2026 18:28:15 +0300 Subject: [PATCH QEMU HCI-8.1 v2 11/24] migration: yank: Move register instance earlier Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261013-vfio_v1-v2-11-433455c0a294@virtuozzo.com> References: <20261013-vfio_v1-v2-0-433455c0a294@virtuozzo.com> In-Reply-To: <20261013-vfio_v1-v2-0-433455c0a294@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI5PEPF00000939.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::833) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|WA4PR08MB366192:EE_ X-MS-Office365-Filtering-Correlation-Id: 0559808c-9016-4afb-bf89-08df293e988b X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|52116014|5113699003|6133799003|18002099003|22082099003|10067099003|5023799004|261009223027099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: eqezjvMkJRx2uwIb8fsJ1d01Oe/ZIrSrlJTIlNK6xgw798nYR/a5R8y75KTrh0ogSJAeXNXW6EPZ42K/+juk5yPvYLnMFl216Ykz1BKDGJjcrLNyU0vei2pnzL8v3HnzT9VteJNCpxH+MyMEY6XKdoooh48zn1kVzwp9ivBI7fSxug1sl1stq7HQnK/+TrgnZIK1CnMYNVL8DRcaxBH/ZSbwI7Qirp4MVMl26E2iN6O4e6/7cl3JQLMiupLYHEntyQpMjESNZ3DvLWUhsDkEnPJoJp1lQpf0nAZnk4bWZXS6l4NqGHi2pKAd4ks/5Q37IGB1FM3uADMdwPiCBQE90Z/87TZ4WAHuAYsQBpnlv/H9MmSbTqr0nlW6Yt+CbduJqJqBoPI3zt9T3WAACg6TC0kC32Mypu0sOeWCXliRWEfFPOf+sbX7WQ/F6lS2cTYICfLzbteHL1X87j2Abdc94EFuho+s40n0nBvecoh0hxL1kfVm4oT2SQZaZEFOixCY57ipWGWSYcvvQN0jLOr9v0qiSJllwbS2+DtJGk3t4zC9lqa8kiHbwij0pg82YyUAFx1pQJk3G5KD8nq9q7iC2tg6wi0BaAQ2vwz1KrrB/v8C79cWNLmLwotfVOmZpZOqUD0FB0DTOfvO00Iah3wAVlejhVxT5x08d6LuetVPVs0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(52116014)(5113699003)(6133799003)(18002099003)(22082099003)(10067099003)(5023799004)(261009223027099003)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a0tHYmkrNFB2T3dJSXJqUXE4b1p4Yld5TU1pdWFtejYxRGxTRENLZ28vZ1Bs?= =?utf-8?B?a3lkMjZvTW1aLzF1RjIxbUpHdFBsS3dYSG5vbFRyQnpBZ2k4NkVYT1hIcURX?= =?utf-8?B?b2VuK3JIVnFHN0xMZ20xdUE4a0V0T2ZzU0JsZG9uM2FMajBFbWZqNVFtbEVy?= =?utf-8?B?UDAranA2Mk5ZaU90TXdNanR2c1czZ3Q0MzFsMmk3THE3RC9veUkwR1hhZ3Ba?= =?utf-8?B?QkNXaVdVL0RicFF4YXVzRHVwZjV1VEQvbGJSMWZwSW1IYzZyS0J3ZFZxRDdH?= =?utf-8?B?cy9SR2lFNmlCNkE3NS9LTFh2d0djWWJHOTEwR1h5cVZEVTZRNkFGZXFhbG5Y?= =?utf-8?B?SE90TkFWR1VSUWRITXJUY05RVEpua1dhRTNmMXp2WGgyTkgzZ0ZHSEpoMTFN?= =?utf-8?B?QXJXblFOK3MvNjE3NExkcXFBVkZCeU1RaFlnUmdEUG92bDNBT2F5Sjk2cm9S?= =?utf-8?B?b2plU1dnTWptZTNBTEt0ZGtpQURSNUp3USt1bHB2S0tvbS9aMW5yWjQxVWhJ?= =?utf-8?B?VFpBaXB6MGlVVDhpK0lRVUdPVDE2bjBpY1JVM0hneGVvK2lyNFNRTnVEczlt?= =?utf-8?B?Q1JHTk01elNyVEFUaTBzYkttSE1iaGtLV1BJQWYwbEtzMkQxQnY3ZXprTENa?= =?utf-8?B?UDVlMjA0dE40emtYbVZRYWlIV3RhY3Fuc250VVV0SEV5VWVCMUdkNFZqVnBN?= =?utf-8?B?QVNSOXUvbjNCbTdsUUMvV2lUTTFYT0plLzY2ZDRueE1aRk5TelVPSkJmbWZk?= =?utf-8?B?OWw3QXJiNFNwUXpoM2NCa3NZVWtNbTZWRERPcTVCY3k1WUN2Y0V5Wk5ZK3VW?= =?utf-8?B?L0lUNHBVRWp2L0FscmhKdVBES3QyZm10WVZQNm5uY2JnYStGOHhPQzFlN2Ft?= =?utf-8?B?ZDF5WjU3SHhYYXRtVkt3SUo4Mzg2RGtnR2EveGwvd0RmTjNoQUlSMHBPbC9o?= =?utf-8?B?ZVlsUXdsa0xuV3UrbllxTDUwLzZCRlpDeGZBUktmNXhqQXZsemdvMXgzMzhJ?= =?utf-8?B?TkdUN0lBczhsS3Yvc1F6dGJVUTVycmJjME5BeGVwckF2YnlINDdTdnJ6U0RW?= =?utf-8?B?d1phTENrRXlOdTJwSlFWZnpYQXhlY2ZpWkxwR2FMdW1sNHdZVW1ZMWRBNDNO?= =?utf-8?B?QzRsaVFscXFFVXE2cDEzcEJRbUdyU3Y2U2wvb3NRMnQ4L2V4MlhrdmFxWng1?= =?utf-8?B?enoxVkN5ZGUvUE1VdEhKVTUyckpDdFNwZ0Q4N1RlOWp6QW5CbW5WcGYyTUxn?= =?utf-8?B?U1VGd0VGTGpGMFdvN1AwQldXck1BT2NZeVAyZlY4MnIyUW05Z3FvVGlPUHZY?= =?utf-8?B?c0xnVnQrUStJb0RyamhHZUVEUUxDeWl3d1NrNmhmbGtuNks2Wk12azdKbFJw?= =?utf-8?B?UEVGTEwzOEs1M1lhRTZCeVRNa2hMWjBDTE9RSmJkcVhxdjJabEIrTDRySkVN?= =?utf-8?B?bTNDczRJcE04bWgvTFlSMTRLMWhqRkFEZkRsQkMrdFNzcFBhVUtVOVBaZWVm?= =?utf-8?B?Yyt1eVFWVnRMazhJdDhNVGV1U2N6czZMOFV0d1l3Ti93Mk9KK0FjS3R6NUVQ?= =?utf-8?B?MHllU0xDWTR6c3ZRV2JRdGwxWUxmRTRRcks2Q0djWVJzWWpNTFhQQnJpNC9l?= =?utf-8?B?STdzWFJDNzduRVp1T1lBdjJicVZtRGpnR0F3WnZNcEU0RWFSM3UxZ0hQY1FD?= =?utf-8?B?VG9OZVByajBnQnl5Nzc4eVhDdEo2V3NsbEZicXk0TVduMWhwUStPK0ZoeHlD?= =?utf-8?B?L2UwRnNQSm1rcVNxNzR0Z3dlWVFiOGI0TVJLRklKblRSWGV1UlcxMkFBbVZO?= =?utf-8?B?S2lUQy9DTGU1djFZWWI1L1lmS3d0STBDdS8ybVhDQXJoMTNyTkZ0STZsMnoy?= =?utf-8?B?c3krbkVsRkJjZzdmOHN4YlpnM3hkZ0VQdlc1MEFlZkRtV1JmZ0RGTFZENHM5?= =?utf-8?B?UERiamZIZkhLVGE5VXR0TmNEY20yTXlBb3YrYldxcVVUT2hYZFhnc090RFBk?= =?utf-8?B?Rzdqa1VuK3BVK0tucWRyaDJtZXBqNDR6emxRKy9xNTczRG9XYUQ2REsvN3ZU?= =?utf-8?B?NTgzTFZpTXRHYnpiU1IzaWVzWWdyTVk1Z3hmeDBnb2wxY01QL3FSMDFZNkg4?= =?utf-8?B?ZTVLeDFLMHk2NUZ0T2dBbFZFVzJMUzg3K2psMnhtWnRSc0FRNEJ2OVdCTG80?= =?utf-8?B?cURxTm43cnlHRTFOY3h0RDYxWk0zS0xrQ0lqbGhraG45Y1lJWVNMSlBxcVRl?= =?utf-8?B?bmdlb0FDRzFCZEFGKyszQVJzWU5hOVNhZUNzLzVCWFVlVFhHbmRJelk0aTk2?= =?utf-8?B?RU5YUkttMnhodm5RNzZDeVdmaTdTVW9DaHVaSHREc3lGSWNweWhSSDAxQ3I4?= =?utf-8?Q?dDJITEV6gFGp8hkU=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0559808c-9016-4afb-bf89-08df293e988b X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2026 15:28:13.4783 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FGEg8Z75j1M8qIRM8E2FAtKKrIkhLw0+PyeE5fy5NU3h0NTIxwdmhiW/W23Psso6yhUX8OPSt400z8UscW3qd0N/k2jIvLLJ9spIpp00M0Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: WA4PR08MB366192 From: Fabiano Rosas Move the register_instance call to migrate_prepare() so it can be paired with the unregister_instance at migration_cleanup(). Otherwise, the cleanup cannot be run when cpr_state_save() fails because the instance is registered only after it. When resuming from a paused postcopy migration, migrate_prepare() returns early, but migration_cleanup() doesn't run, so the yank will remain paired. andrey.drobyshev: This commit was cherry-picked from the upstream commit 7e714392437c, adapted for the hci-dev base, which predates the upstream migration_connect_set_error() -> migration_connect_error_propagate() rename (77c82edadbe0): the error propagation calls in qmp_migrate() and qmp_migrate_finish() keep the older spelling. Also fixed here: upstream left the yank instance registered when qmp_migrate_finish() fails before connecting (nothing calls migration_cleanup() then), so the next migrate command aborted on yank_register_instance(&error_abort); and the unregister at the out: label ran on a resume, which never registered the instance. Upstream fixed both in 6b587af5ec9d ("migration: Fold migration_cleanup() into migration_connect_error_propagate()"), which needs the above rework; this is the equivalent for our base. Reviewed-by: Peter Xu Reviewed-by: Prasad Pandit Link: https://lore.kernel.org/qemu-devel/20260123141656.6765-11-farosas@suse.de Signed-off-by: Fabiano Rosas --- migration/migration.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 2f8ef20c036..fb83e8bc695 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -2235,11 +2235,12 @@ static bool migrate_prepare(MigrationState *s, bool resume, Error **errp) return false; } + yank_register_instance(MIGRATION_YANK_INSTANCE, &error_abort); + return true; } -static void qmp_migrate_finish(MigrationAddress *addr, bool resume_requested, - Error **errp); +static void qmp_migrate_finish(MigrationAddress *addr, Error **errp); static void migrate_hup_add(MigrationState *s, QIOChannel *ioc, GSourceFunc cb, void *opaque) @@ -2264,7 +2265,7 @@ static gboolean qmp_migrate_finish_cb(QIOChannel *channel, { MigrationAddress *addr = opaque; - qmp_migrate_finish(addr, false, NULL); + qmp_migrate_finish(addr, NULL); cpr_state_close(); migrate_hup_delete(migrate_get_current()); @@ -2276,7 +2277,6 @@ void qmp_migrate(const char *uri, bool has_channels, MigrationChannelList *channels, bool has_detach, bool detach, bool has_resume, bool resume, Error **errp) { - bool resume_requested; Error *local_err = NULL; MigrationState *s = migrate_get_current(); g_autoptr(MigrationChannel) channel = NULL; @@ -2329,8 +2329,7 @@ void qmp_migrate(const char *uri, bool has_channels, return; } - resume_requested = has_resume && resume; - if (!migrate_prepare(s, resume_requested, errp)) { + if (!migrate_prepare(s, has_resume && resume, errp)) { /* Error detected, put into errp */ return; } @@ -2354,27 +2353,26 @@ void qmp_migrate(const char *uri, bool has_channels, QAPI_CLONE(MigrationAddress, addr)); } else { - qmp_migrate_finish(addr, resume_requested, errp); + qmp_migrate_finish(addr, errp); } out: if (local_err) { + /* A resume didn't register it, see migrate_prepare() */ + if (s->state != MIGRATION_STATUS_POSTCOPY_RECOVER_SETUP) { + yank_unregister_instance(MIGRATION_YANK_INSTANCE); + } migration_connect_set_error(s, local_err); error_propagate(errp, local_err); } } -static void qmp_migrate_finish(MigrationAddress *addr, bool resume_requested, - Error **errp) +static void qmp_migrate_finish(MigrationAddress *addr, Error **errp) { MigrationState *s = migrate_get_current(); Error *local_err = NULL; - - if (!resume_requested) { - if (!yank_register_instance(MIGRATION_YANK_INSTANCE, errp)) { - return; - } - } + /* Before the start functions below change the state */ + bool resume = s->state == MIGRATION_STATUS_POSTCOPY_RECOVER_SETUP; if (addr->transport == MIGRATION_ADDRESS_TYPE_SOCKET) { SocketAddress *saddr = &addr->u.socket; @@ -2401,7 +2399,8 @@ static void qmp_migrate_finish(MigrationAddress *addr, bool resume_requested, } if (local_err) { - if (!resume_requested) { + /* Nothing connected: migration_cleanup() won't unregister it */ + if (!resume) { yank_unregister_instance(MIGRATION_YANK_INSTANCE); } migration_connect_set_error(s, local_err); -- 2.47.1