From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023115.outbound.protection.outlook.com [40.107.159.115]) by lore.virtuozzo.com (Postfix) with ESMTPS id A17AC81065 for ; Fri, 30 Oct 2026 14:45:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VsnU3SI0LjzqhuHBMLYPSdfdubpGahoEkwQkb/lZ8En/lQy4t7gOYo1XqMDb1Go4hpoOs5O9yly1+m0NHALE5t4kqDJ/z/PXaA7bLMIi3fXC1/Hkh1RNGxGuSiNQwGq/9g1f+sNf8nedq2BQgmoTpf0fpKDy3Mtanjq0jXNxNWyIHKSbSFc5N7dAf4Qz4A6t2tS0h792r4zX4eAuaMYJpM1g8Ma83y4GHUTS6krc6iWJEl6nAfsI+uBtzHKoJ2sCWGq06vTW+vuncQ5M2YKqoi0dHT11bQDPwEgOLiJzZTM2hN148LJUn1tQjgI6iZBr6jCWxw52svOhC0N1opG16w== 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=MGiPCVPlI4ZKFIhpW7Q9dbHD1vbzx3XfnONOB/ImoGRIksJJ9zYf0uIzFxQS4aQZmH+fkJWkjtgLfRrjRwBBxu/ACLafAybooJuoXZMkKbzC6PAmKncZLbXf7UzcBR8GYEYxcpdG9QymAi76KJSAb30Xv1mDy4fG5HQzQt3FwR8HbMamTyuAA7xgovz5Xv7Z3PGXdhCYUFzLqVwiPKEKyl8sR4olIepGeQJ/JfPAvIfJS0rkxFChUGSH+rvxg/nG1gafbJgFJp2H/uaI+2iReS7415ZEGkH+3NnGXvwuVyDSXWYHlEYrfWdYAUzFzQjsk15tmDVpEVWBnUMtNKZJpw== 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=OxNgISUptmXGt6IlI4PcmPMoTvAM3FvgZS3T8dI+4LXDtNwNbqdaHxUnLcu5M8PinyZnFex4968bEuFhlZ6H4kZiVLAyXeOGihoEVouqoYk5t+e5HDMJlesWcd6JkibivlrYyhmG8tm5yhXlTH4bFlNy/Wx8xuon1UqN6cPVmODMxXXNE6Njfg7YYCmsGWdDgLt4sDLsgWqv0bVUBr1wEiaNzOSOO1HRORFz3Myx9TAJid7lp7nQQ/UotBpITeIEHUnlWc+fwSnhZi+MpkZjGh8foUWrzHQhE+IaS/ZoB8sWPxxky6SD98uwqNTYiHPnzb5t7sD2apIbDroimMl8nQ== 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 AS1PR08MB7451.eurprd08.prod.outlook.com (2603:10a6:20b:4dd::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.9; Fri, 30 Oct 2026 14:45:53 +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.008; Fri, 30 Oct 2026 14:45:53 +0000 From: Andrey Drobyshev Date: Fri, 30 Oct 2026 16:45:57 +0200 Subject: [PATCH QEMU HCI-8.1 v6 26/34] 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: <20261030-vfio_v1-v6-26-45de246bc92e@virtuozzo.com> References: <20261030-vfio_v1-v6-0-45de246bc92e@virtuozzo.com> In-Reply-To: <20261030-vfio_v1-v6-0-45de246bc92e@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0502CA0031.eurprd05.prod.outlook.com (2603:10a6:803:1::44) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS1PR08MB7451:EE_ X-MS-Office365-Filtering-Correlation-Id: f5d00dc9-0ffe-4b4a-c029-08df36947e07 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|52116014|376014|23010399003|1800799024|5113699003|22082099003|18002099003|38350700014|56012099006|261022075727099003|10067099003|261021123027099003|261028144727099003|261021121427099003|261022105027099003|261009223027099003|261026121527099003|261026140227099003; X-Microsoft-Antispam-Message-Info: DRziPiR/30n4C1wUgrpwd6dLXEISGqriqpdhJ+I7NbycPvAWJBhNVTdELjdTYWICGRkVlBIIZdtIfJg1+ZaspyNTXLG47Jxrb5r/JbWD2ajLqVWMdtaVgBuxKXGFdI0xBvv2PqI0rO0HsxP0zpKOAJzYXgx+wxDQwQQ4t8rBWlfx3HBAmliwh8ohfetOGFKMaWrqkaQvYs4JgtHoKEUdfDXnHa3/BMiIyONchjy73fz2WkOA50oAa9oCJlgcD+GTEXO8VI6Vy36XpPIlKxguEIBWqy6TwL772man6daQ2KS2PA3p2UohlM3EE3bgtD5SYPZhYU2KPaN/2poi0nVGpaPZRDk9uK2iBxBVlSTG2QYZrVbbvnDm2Rp0du6yXi8nkeYSUo3IBFTMWgG0UCSA7LoWctgEaY6Rwsc4l8+Ch7F1+vA2QEeqe6tNLCxJ1/D/5pU5fJfkVfPxkSFuADQuYlWenUIj2CUaveQ7RyeNl0fTwKQRMWWJtnFUhmaNUhEWfHw9weuKLoutuALiXxTeqS5u/F8UQzmpZGwCmlWhQo5O+3AaCXRKcba9TFTbejbUMJIbgVSC1Vx7lOpFib3kANNNVzOj9QSuwjKC1Ix+CUfYRtLD0mdishUGsa1eQVKw94EUwnhfy0Qxios1Gf7cQOmDHhUk0wA9ZnrbwXgY1ilJElX/VRXfRhid/Hcg+kgXKKOrV1dSsYVgqpsXAXL+nT6NYZImJhku0nJkCXoSj+Y= 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)(52116014)(376014)(23010399003)(1800799024)(5113699003)(22082099003)(18002099003)(38350700014)(56012099006)(261022075727099003)(10067099003)(261021123027099003)(261028144727099003)(261021121427099003)(261022105027099003)(261009223027099003)(261026121527099003)(261026140227099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cENYTFl3NWd3L3JGbFBSaDBjT3NrWVRlRENpKzM0a0JlZXBWbXpnS29rai80?= =?utf-8?B?dGRONVRJWjd4TXZrYmpQOGR1akJaclJrRTJwMmFnTzJXSmh2WlQxNnZpRFMw?= =?utf-8?B?SmRiM3ZBRHVGVkZSbHI1YXN5Y2U0TldSd0R1WTR5MW9wUStXZ0tHR1lyUlZR?= =?utf-8?B?c2t4RXM4eGQ2Sndmb2FrQmFtTG5VcnBRMUNYSkhCL20wbWJKelBhWUJlWE5N?= =?utf-8?B?ek40NWQvUHNOdlBVOGN4SzJFNUJNMGVuZkxlWmthb0ZRaDNjdmdKdmNQRzdI?= =?utf-8?B?NFBKb0NlYUZUT0hBalhLcXlkckFmZXd5OS84ZzUxSUFKMHFtMzVVd1JNanZ6?= =?utf-8?B?NG56WUpkTjdWbVNINUdES3dMcFAwKzh6cUJNUnVEUk1PQTFSVDlvUUV1YXhW?= =?utf-8?B?NS9la3FjNzQ3RGttWEJLa0V3a3VjSjduTU5OeDVTM2NxOWtyR2dnaHd2Wkc3?= =?utf-8?B?Ky93TUJBT1F3cE1BS0lveHZmOTRiaEZTR3BYSjRFU1M4WXJjd1h5a3dyMElv?= =?utf-8?B?bUJWeVVCQkZnL1Z1ZzUvWmlrb1cxK2l3Z2t1aCt0VExLcm9EWU12R09idjA2?= =?utf-8?B?WkkvbE5RNDJxSlI0UDZCWVN5Mk1KRVcrLzI5VVJIQzcybm1QbWlhc0VtOHps?= =?utf-8?B?bmlJZmZvdEdtYU1TWkdBZ0Z6Y09Da0JUaEhWeDY0ODNNMFZqZ2MvZVU0ZGRO?= =?utf-8?B?TE4ya3ArVnNzU1lJOWNsVTdMZ0UzKy9uWitUbGRRTldVV0pRZzNrZGx3L1RN?= =?utf-8?B?NkZxYS95SzFVak5KUkRJZkFiMjNEejloN1U4NjBWL1phbUFLQnFmSWhEeVM0?= =?utf-8?B?THRKM2F4eWJaNTl1T2VWZVZxcjBtV1RyZnBwb3pqSVBwMWZXSGlVcWRSakNT?= =?utf-8?B?QWxMYTArenpyZGg1ZmIzamVQZktpUEtZV0ZibXBqSWprZlZKTnZpdWVTNjdj?= =?utf-8?B?MDlNMHBaQ1JHaUFNQWpNSkdBSWxLMnFXVkp4ZXBUM2xXbTRaUUlyQjd3S3NL?= =?utf-8?B?V0puWUMxVE5RTVJKUmxoTWRxaFBFTmFYWDVqNjZXVUVQQm15b0oxR1J3anNJ?= =?utf-8?B?ZWQ1VHhPRzN4UTZlYnlTVEdLTDNrYUZ4dmpab21CUUhaVGREYXVQM3FtS2ZY?= =?utf-8?B?TGVWR2tiRm1jMjRRaENNV2xNRHVkL01VSnNJanBxNEZoZW9HYTR1biszMWVq?= =?utf-8?B?SFd3Q0VtZEdTWURHb3U5L1JaMmdWODc1VnRabkhYQ1lhMDBsWk12VGcxWmFN?= =?utf-8?B?b2ppaUc4dXBJekcyWUxVZTRTUWFrQm4vancyL1N4MUphZGFQTmt3N0l4SzYy?= =?utf-8?B?N0xWY25DR1dmaVpoTWtOQVV5Zy9JdUVSQ0tPUFdlWDhRK3hHRU81SExMNjlr?= =?utf-8?B?VUdiMS9FaVZNSFhDYWJGWVZkREI5TzB6K3dCSjF1Q3hOY2JPZ3dJc1piazlD?= =?utf-8?B?NHhjcWRJMVVHYVl5aVlkV0dIdEpNbUc2dVdLeGZUTURsYkEzczYrWWFHUnp5?= =?utf-8?B?NmxHak1QVGphbXpjQ3dBV2lScnA1SGZpNXNyeG5Mc2xzckF3bmhZM2VNdG90?= =?utf-8?B?ekFvY0V4ZHlNbE41WE5tb0lsTDBVTUdpaW9xNVFjSmZwTXhrSEdsdmx3R0Jw?= =?utf-8?B?elRKUS9CcmNldU5XL21yY1JSdTBqR3NkVVR0MmFJZHl2ZUYwK1JsR0tVUUVh?= =?utf-8?B?cW5XZTF3c1RBWGw2c1U0U1E1TWYvM0pHTU1vV2cxYUZpQ0p1bzlaWHpKWHBO?= =?utf-8?B?Wk5RclREb2h4ZWNPVTZqdFBlenFYUVBGUWk0Q0x2TnVMTGw0RGQ2ZTlmOUoz?= =?utf-8?B?b3VsdFlRd0pVUzVHVXZQZEU5M0crZ2RUL0hDUi9QU09JZlBhR29wZS80bVg4?= =?utf-8?B?TEVTeFB0cStTckJSTTNqY2dqMy8vQUpWemliZytTWnh3SjN0THlIQ056b09x?= =?utf-8?B?OGpUYlBwNTNHYU9QZUdRSXJXUW9YUWxoQXlSU2NlSWh2dk91Q1RiM0lyYkdr?= =?utf-8?B?aDBPUmtVYzZYczIwZW1WUlZCcm9IN1B3Vm5KN00yTnAxdWdKbitmdzRjWHlE?= =?utf-8?B?ZEtyU2J1b051ZUFMZE91cmJpcFNhT3VSUXJmT1puVjNEZ25LU2hKNXlJWC94?= =?utf-8?B?Q0YvNm56cTNhTWFTUTNQWTZqQmhqdDRlTEN0YVF6OXZmUWpVUENFbFRlQW5Z?= =?utf-8?B?d0tvMjlLa2RmdzBnVi9wczBNemlzVG1nSmtGb09ZSWRZRTBrUGlHZlFjTzJt?= =?utf-8?B?U3BodzEwUDZqV1paZWFoekRXS0ppRktJOXFqUnpQcmFWRzlyZUtLTU1oR3Mv?= =?utf-8?B?NzZaZzNYNkhucGVmaXdsOVlCUEY0SHB2WXVSallRKzRxWGdQM0FmOEJnaVJ2?= =?utf-8?Q?rzGcEsby9NlOVhh8=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5d00dc9-0ffe-4b4a-c029-08df36947e07 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2026 14:45:50.8444 (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: hEwTkn6Wy1jUqQri5R54COiXVC+O1FlIyUK0O0O3yV3HePTl3g1D5N1v344JMOSwZO2kwExrohlTAY3xl6Co1o6BcMLpu50Kg/Q5CpQGXJ0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7451 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