From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023088.outbound.protection.outlook.com [52.101.72.88]) by lore.virtuozzo.com (Postfix) with ESMTPS id 4C96D81236 for ; Tue, 3 Nov 2026 13:57:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fVTt4IXt9cTE1ucOn3jCKNqzDd4jlFXpMJC97/yEHEHQlORAqe75vARCmPDQl9JRg78YRGxbEmYu089pKoqdZbBWY26hOGYOHhEaKFdBkdlOvV8oSlJDdOQjwjSxWc93QjVEjfY62wEzBdCs/+ED5mRKXiarVVtkjyc1GH2ZF8r834JV00t9HaxbqgKzbZnGTrWkUwBSZpnDw3TfsRdTHYQ/3uF6oTdob7cF+GlMO3gcCwTlyvyF0rS4Ca57ykHIhSK+DYNgi96PzUdCE6mngEvqkFrbUh7XK9QVk2FqCVamLofEueh2JcsaBphzz0g3AjVIlA0hdvJHcVwOm6JISA== 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=f4bRJYGOyNEyMJpBmVnw/xubEvEu5AkM76JEO/nc44Y=; b=Dt6BrPGXSttohFULqJ6Wog8LGmAKoWTUB8xxF3euHKDAcL3U+ycehXi/RyxbHpvgnduCi9kp5r7mhknHFnosTmf2uDkJXj3b0Kk32fW93rGS8M/qzLcGBHjUbLSxBBNKDlUkBT0Wa/zo7m5GQX1tASNqrowhqGygQ3wuQOQz8kJify9yTXu8lMBb5j0QF6eNBaeHVFlZQbcrGDO4M0ltiGpCnT/SgG1w/2tijjZ71/nrHLn8k19v4kX2vRYdUmPFXrnwAqDVrfoi1LQxQNsJPhPtRlZg/ycLhE/kt8eh+eOv9WcEYr427b8M6QmeUfoycNFt9Ov7CnUo4/prqHiPGw== 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=f4bRJYGOyNEyMJpBmVnw/xubEvEu5AkM76JEO/nc44Y=; b=N6stqN9Me8uq9eGwZSKEyeHVL8Mq3WU8lfaqOMxnlwQL1WaH1JKvoijng3QwcoL2wEM+Jr8SKI8dq8H7Zte0emQ32XiOw3Q1+iiEYXx7peyb3rEl/c7t3njxXlZt5hZoM2dq6EOyopWq8WED3WtROv6kgNKZ39Z+qefFvsH19e3oJs2JiFS5ObK8lYLYkMkswM+Pfj8731ex6YvZdCI2Bq5sBDOFIbpm6k85BSeKzsBFN9lP8DuApYiWSvXjhvPivBtNZ+erpZIqaCS4pKhgzJClgSQ39DFsBlOW8zV5T8IultC2uKoz7wE9IgWVVfD2xlps4OKjRdb34LbslLkNDw== 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 DB9PR08MB7423.eurprd08.prod.outlook.com (2603:10a6:10:370::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Tue, 3 Nov 2026 13:57:52 +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.0569.011; Tue, 3 Nov 2026 13:57:52 +0000 From: Andrey Drobyshev Date: Tue, 03 Nov 2026 15:57:42 +0200 Subject: [PATCH QEMU HCI-8.1 v7 27/35] vfio/migration: don't assume the device is running on CPR incoming Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261103-vfio_v1-v7-27-4467fdccbbe6@virtuozzo.com> References: <20261103-vfio_v1-v7-0-4467fdccbbe6@virtuozzo.com> In-Reply-To: <20261103-vfio_v1-v7-0-4467fdccbbe6@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI4PEPF00000153.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::86f) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB7423:EE_ X-MS-Office365-Filtering-Correlation-Id: fcc698de-26ae-45c3-559b-08df39b269b3 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|366016|1800799024|376014|52116014|23010399003|18002099003|22082099003|38350700014|56012099006|261009223027099003|261102123227099003|261022075727099003|261028144727099003|261021123027099003|261026140227099003|261021121427099003|261022105027099003|261026121527099003|10067099003|5113699003; X-Microsoft-Antispam-Message-Info: nQM4mS89Pxz+vyRVTZxEwFi8SGvrXSgxs04SuAIu8f44Ico7pHAuCzhqiRLxSBSqEOGSsNaKlnjxKSrACuQ1dX/wAV6oNEI7yqDcsyDkrUzgl8MS4+X7ombPiNJZgEt5ZlEbS5q5nG/j12I+9+QO1z0ehqbjk0Fgld3pXfPl6F+E0O8gQ3Wg/nz2wgz1L+O2saGi9U8mvIG/RcXAeX7jKqvS53fQlQcotq1f7mZsRyquc4sYRChmHyuv9gi/iq9aalVvZ5JqQll0H/bVWEX32/AJ+rdwmZD5SW7A4BGZ9/ld0K+a+mSMlAHHKAkTti0d72CpQsqUvxPdluaf4iQbFGPQsQF6/9uSxpBVXyaZxXr/xGhqJZm6Oz1mZ43Rx6AZsINI8+659C3+XCSLhJs6fV5IKuNuHwdpY8Hp/Js9iokRkunSdK3iMKDvD6KS+MgRnujxssHCW2r61Pqb0bVHwwN3ch6cxofUrZV2wpu4QbsW1CpGgYFrv/5fnkXAIKkYc0C6b/YA/M2t/TIo3g4k+UYfAU1xw6HbiKQ2UcaLcaaqMlJRB6bRitf1gllDrLJmPNACVpziXA64ErEWZ34uY6/Uw5iRecm0TYNyXZwhbvVWt/W1pZsafe8UajzuqwqmuWkfB/HZxfN8jD15KIWsXcWGlBfX3S/T7eEdgadbdUX+JKlMhkB9v8iKSKi1yIcHWk6UpL0ol6d6wZB3529U3Oocv5oLgQC/tEA1Az+IKJA= 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)(366016)(1800799024)(376014)(52116014)(23010399003)(18002099003)(22082099003)(38350700014)(56012099006)(261009223027099003)(261102123227099003)(261022075727099003)(261028144727099003)(261021123027099003)(261026140227099003)(261021121427099003)(261022105027099003)(261026121527099003)(10067099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OTBPSHpBMnNRQlhDdXE4QUxQMm95eXgxRWhPTkZjMXNYWWN6aGhKSS80eVM2?= =?utf-8?B?SjFJQnZOd1BGRDJaZzJaNWVsMUlBd1FnNUF4T1JobnZLYW9QN2d5Sm4wWERB?= =?utf-8?B?YjFIYm81K3ZWOFhnYWNkMnQxeHorNnJRYjlKRnVOS2Q2TEVjbFVhTUtDa2lp?= =?utf-8?B?YTFWL0REbkxqd05LczVKNTZRRFBwWE5RUzllUTB1UE14WVlOam5Qc05UNUpG?= =?utf-8?B?eGFvRU0vOGgrWkNBWjV5VmIrSTEyNEN3clp0WmhwMktXTHEzemlEbC9CUzJk?= =?utf-8?B?WkhPOU1IYjVLRS95ZzVnTHBEZWdiaVVJV0ZVSEtNYnJIK0lsVDg1aGZiWXZW?= =?utf-8?B?UFBNeFpiZUFXNHEzWVVydzNlVEFna0V3WkxHRmpxRnljMHM0R0FFZnpLaTQx?= =?utf-8?B?UlM3NjNseHpVSU14MGRFT1JaQTBCdFBCQ3duMWhCdWR1anFUZWM3S3R0WG9O?= =?utf-8?B?VUxNZGQ2aVVLSkJsQzZTNWdoMGNKcElJVXB0WE1oajJoVDBLc05KRFU2aWFo?= =?utf-8?B?TEx1Q0xQbVgxakNOMkY3dys1QkIyZlNRQzB6dDlXZkx1M1hudHdOT01rcEFF?= =?utf-8?B?Q2FuR2xGcCtrakRvNXJVYzRrT0pVVUhTdTYvb0VVYnlDN0UrZDlGR24rbVh0?= =?utf-8?B?aFRVUGJSZUtxRFNWZ0hPRDZsRk5ReHZvOUNpVU5uSmlReHlhWE1ZKzlnRDFL?= =?utf-8?B?NHBGc1lndUxvKy9PR1U4cmRDZ2JjbnY0aUsrZVFXNzdsWGkrV3lTaFVYZUNy?= =?utf-8?B?U2JuakNwN09zQUJEVUVQVWliZkNyTS9PaVhCODlNWXJWYUx2Y2k0M1FKeE9i?= =?utf-8?B?Y3NnY3V6dGxuaG9YaC95STlRRVN0Qk9vM3ZYMk04aHhwMUpPQUM0VXFleDZz?= =?utf-8?B?RGEwWGpwUkczSTFJNUZFNlN0VG9KT0NNVnI0UGk1U0tTVDcrcnB4QmxBR2J2?= =?utf-8?B?S2xZQ1dnNWNNYWRuTUVxYU9IWFpremFlelZLZEw1cFVpajhJS2llTE5uRi93?= =?utf-8?B?UUFjZ3VJc3JKaVdTL3NQSnlzZTFPTVpScGozQ1RDVlpqeU9pczNPek1STmJz?= =?utf-8?B?dXk4L0o5cHkrV0Y3M3VGSlBzTDREaWJ3TUtLNzFqRkF2ZW9aMStsRTliZkNt?= =?utf-8?B?QWVoNytWYWt1dEJSNGxKOVc1QkRBenVUTTNEMmhXUy82K3Y5WjcwUzBwSCtE?= =?utf-8?B?K1NkeVltWVRBbldZSUVJblE0aHZOVjhBcElnNmppKzROMFozYjZPWVp3VUsv?= =?utf-8?B?UVE4aGsyeitqSXpDcXdGRDFOYTlrN0xFb2FsaGpZWmduVURScUZybU9NUlF3?= =?utf-8?B?ZXo2R0E2bjdVYVQvM1FramNURFZuLzQrWUlBMkMyTGJDZ3lTR1h2V29wRS9l?= =?utf-8?B?K2dFVFRHdTcrNDN6UGQ4ZFVyY0FXUk5vSVRLRGtXSmtoTUJsRytwYjF3V212?= =?utf-8?B?cUNrcjdQYnBsME42a0IzeUlNa0J2blNTa1ZpUUROZFIzdm1ibmp2TXJOMWhL?= =?utf-8?B?VjZycDFRNlJURnI0dXJzOXEvYWpBVUYvRkJtRmU0UitFdHdsOENGUkV3MW1V?= =?utf-8?B?L2VkdGJSL2lrWm9NSUNpbzA4dnJXb2szWFpralJBVmFXQVAwNmt4Y3lORm5E?= =?utf-8?B?cFdaQlVRcFlwNk9aRnZzY3J0UmJmWndna2wvS3Nmb3hIVWJyYm5BTFRCWDlx?= =?utf-8?B?VzFFTEZkaTZuRFJLMW5oUEdBSERjYnZ4U25HeU1vVnNZOHlPSVFaS05QTVI3?= =?utf-8?B?SnlNa2c3WXdqenFEOG1HUWFYNW9JT3VmK1QxSnR4eFJGLzlHWTNneVloZGFV?= =?utf-8?B?bE9LOGhsRUJMWXVLK0pyQm5LRWFKR0U4NGhvQm4zbXZ0Nk0xT3B1SVFvYlNh?= =?utf-8?B?b0srSFhhV3dWVllWVVdneCtCZzRjRXI0M3JlZjQ4VTh2a2pqYTlGUGlLZkFW?= =?utf-8?B?RUhlL0NQWGg0Y2FnRlVWa2dDRU9ySnc4bkpDUmFIM0h0b2NrOFJTZFVDTnBR?= =?utf-8?B?L1RpdkVEelZrdmpoQ3BJbXNGK2NiYXlueUh2cmtyQlhFZmY0cWJtdlMxUlFp?= =?utf-8?B?N1FNL0s0RHlCaDlwalI4QWJweGRqSFZhK1ZmdHlzcVVFL0gyZnorV0Z1TTVI?= =?utf-8?B?bENHemdLRW9oWURXa2FJVjNsdE5mb0d5M1czdUZONUxrREZXV01DWDRhaTR2?= =?utf-8?B?bkw4R3RPaXlMNkxYVk9BTG56TXAvVWhKQ3Z3RzRhbHczVEwwUnBTQXA1OWsx?= =?utf-8?B?aFh4a0RKbUlaQzFNZXZ2ZlhPUnBDcFQ4N0Zxd2xwODM0YkoyZmVNMmFuUE8x?= =?utf-8?B?am15NU5KM0Y1bGlNeEhUMGpROWJ1TTJkUG10Q0trZkt3TjREQ2ZXVysyMVdJ?= =?utf-8?Q?7XOA9A9jbRZoMQG8=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: fcc698de-26ae-45c3-559b-08df39b269b3 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2026 13:57:35.1126 (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: 9+3qQC9zrfbVzBc/Ad/MNZL/H0ZEs4HJQH7NCekBOHhxoLMXAMCWnQ0+0zC2JN85WD/yrS/14GB3S+v7ClEUOBLWrEk4Yzx/+qEc2VXs4QU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7423 Since the device descriptor is preserved across CPR, the device keeps whatever state the source left it in, while vfio_migration_init() on the target still caches RUNNING. For a VM paused before CPR, the device is in STOP, so on 'cont' vfio_migration_set_state() finds the cached and the requested state equal and skips the ioctl: the guest runs with a stopped device. On CPR incoming, cache STOP instead, and have the VM state handler, which doesn't touch the device during CPR, note where the VM leaves it: RUNNING once the target starts the VM, STOP if it stays paused. At CPR the device can only be in one of the two. Fixes: c29a65ed685 ("vfio/container: preserve descriptors") Signed-off-by: Andrey Drobyshev --- hw/vfio/migration.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index b142c9f2289..04d0de7cef0 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -914,6 +914,14 @@ static void vfio_vmstate_change(void *opaque, bool running, RunState state) Error *local_err = NULL; int ret; + /* CPR target only: the device kept its state, note where the VM left it */ + if (cpr_is_incoming()) { + vbasedev->migration->device_state = running ? + VFIO_DEVICE_STATE_RUNNING : VFIO_DEVICE_STATE_STOP; + return; + } + + /* CPR source only: the device keeps running across the exec */ if (cpr_is_in_progress()) { return; } @@ -1039,7 +1047,9 @@ static int vfio_migration_init(VFIODevice *vbasedev) vbasedev->migration = g_new0(VFIOMigration, 1); migration = vbasedev->migration; migration->vbasedev = vbasedev; - migration->device_state = VFIO_DEVICE_STATE_RUNNING; + /* A device inherited across CPR is in STOP unless the VM gets started */ + migration->device_state = cpr_is_incoming() ? VFIO_DEVICE_STATE_STOP : + VFIO_DEVICE_STATE_RUNNING; migration->data_fd = -1; migration->mig_flags = mig_flags; -- 2.47.1