From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023128.outbound.protection.outlook.com [40.107.159.128]) by lore.virtuozzo.com (Postfix) with ESMTPS id 661668122C for ; Tue, 3 Nov 2026 13:58:34 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qz7LDf+3Y5PrGhXthjf6//2OSwLs+f9MKAx9wxzhnwIs1uCNAu74/En3EQfYhvS44xSmoFpBH53AAhrZkttSsKkjIFyJU1GlAe65ANZ3xhzkqZNM+2K6IXVDvShmrTMUkhHEvVdP0vc0LJVjgUjHZEYlkZNuzoYNbq95HLceK64j2QQdGXA7zecC9LlolhwehSX2ZzKZwOI+n/4OefqTFW1YxtyTHm7ZWmxAe1fTx9Dm6KLNiLN6VnrftC7SNrQ/r+fBbDe7N3uubKK4xBNNatjIZek1FS0lT1eLwmMnlMWiMfypDxYnV/aAT1I7I8yWZ4W8OU7lbasg+2hjr9vOkw== 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=RHHHoJPWpc7fVxVT6AwmpOqvDMwRh3FRtnCYkgJlDv8=; b=NMetKeIV59ML07LBiFVpMRhHItsEv6w7b9FalFjuTvrV0DSt3spz/1NOAAX1FgXLOOTQmQDLq2pj+CNTVSGFRZ+7F7ROaWjl0FH4nEQCH35vnS8NeutKV9NjjRbmVwF/rNrkyu3tPHxb33LpMgkdXxJ2q2rYbtw+V1qAeXtKqtoYTKE/20ns9DpziGYplp3ljsmkAxMxIXc8DVAOJ5KmYmRg/+ekz1NGq7TxXMhvcmUHzNrFxk/bvy7FOYD5BghlAXM6/bwMl7RpmHSepW2wHP/CqwRRoue+BGg3qpoFv7pnjKgkjjn9+aMaP94/ywYDAENttJkB7vcv/mf+zwu8zQ== 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=RHHHoJPWpc7fVxVT6AwmpOqvDMwRh3FRtnCYkgJlDv8=; b=nWbMyflmsM4D9vLkIkBLpsFk141q08jP+H7s/L4pTYCUylnbPAs/pCbhMvsGJFxR3ARe4sZUdVd/yXl1YBWZMS7xfWt4LamucBbKvHCtT4X4c7o7tt5KhWu4tpvSw9RPxSrruI4egZx1BWEK5qKl/+6gr52bbLSM2h2imn12s/nON7aLSXTCNHdlYf1DlcGFS/2D8hcNEHI6kzXmMfO66kwaDBHXhOO39HGSPDkfdMVBsgQpGGa41WH4PKrvGT1U4Rw24unpjIV7tqqTRyxOXUyw6aQADuuRuwHplxxRS/d0WJ5ZeL9vQNve9egw83btH+9/erwBYDxxwgYWZhbR3Q== 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 AM8PR08MB6338.eurprd08.prod.outlook.com (2603:10a6:20b:369::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.8; Tue, 3 Nov 2026 13:58:33 +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:58:33 +0000 From: Andrey Drobyshev Date: Tue, 03 Nov 2026 15:57:50 +0200 Subject: [PATCH QEMU HCI-8.1 v7 35/35] VZ: vfio/migration: don't wait for stop-copy-only device state #VSTOR-141821 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261103-vfio_v1-v7-35-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_|AM8PR08MB6338:EE_ X-MS-Office365-Filtering-Correlation-Id: 75f331b7-0f36-4a5d-3ce1-08df39b26b5e 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|52116014|376014|23010399003|366016|1800799024|5113699003|10067099003|22082099003|18002099003|56012099006|261022105027099003|5023799004|261021121427099003|261026140227099003|261021123027099003|261102123227099003|261028144727099003|261026121527099003|261009223027099003|38350700014; X-Microsoft-Antispam-Message-Info: 9YczyBDYKKKS62zKvdRN9VO43kuC1VnJsQh820Yr4kAM2/DaTnFnVO7A8BwxwiJcwJqnPI1Y3TcN0vW8iTx/kVuyfe06EKsf7fA4MSAdo5j+we/wiPUaNOKFbT14aU3BwZV8SD5OMhk/A/er8MWIHwVuymvvFGliyb1Fp4q+gKO7h8VkWNINc78EOQveutpGT3vAUTNnxkQSpbN773WXOIOxcOmRq3HPOdmYVr8FsXd22S9l5/fA+g7KYmgMafrUKs69jItYbdgzqNsb/bdkXo5FlmZysVmUtbKmm19lpzNBye5dnYNFmdBFZDfUyvZlqNv5y7LAh8o67dTOd/qR9OnwSUDdZ4gVDwpdc7iHRiDXEyVWBiAcXKWJB4RVpBKD0CkqpTZ8HsNWoSiG/TL0iLl33qThMXCZF/1arrD27e55VT9DsnwYVYn23Pz6il0Vvc/jnLXHEY7WIEi+pH3wyQjz0Xk5zgYuWxWkO1m/FJ6ylMkVrtYyNWzQT2zh5Q0m41QF0oLCNzDmRuK99MQjkvUz7rrOQkHX0iNUJ2x71CISkt41p0PmZRT7pdfXolBWmU237eW9Mo8TSHjY+2rkC1FxBz1bA8s6n20VGbyk1h4s8SMScVle5exl5cwP+F+cOvOR89YM7OCt3H1ZC2e25nt7mYPtx+OHLqtJfHk3h47D0mopwno0hPzwKo2nAqPdTyVKCjzkgL5oktB4lJbKwuG7rJYMNMm0bFrjNoZ+1f0= 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)(52116014)(376014)(23010399003)(366016)(1800799024)(5113699003)(10067099003)(22082099003)(18002099003)(56012099006)(261022105027099003)(5023799004)(261021121427099003)(261026140227099003)(261021123027099003)(261102123227099003)(261028144727099003)(261026121527099003)(261009223027099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c0JaK20wdkJ2ZXZFYWtxMmhnNWVnK0RhcEVzMmh5eHpZQVU5aUt5RlZ0MWVU?= =?utf-8?B?U2w3SHgzN1IreTNuSUY3TC9yaXB6Mk1MZVd6WDBrYWl6VStJelRSb0tubEc2?= =?utf-8?B?UnNYTDAxUVVQRG9NQnRqZGwyNlNNZnBqK0VxVTdnRjBCMG90aFl1c1A4R1R3?= =?utf-8?B?RFFkU0pidzA3bjE2Rk16ci8ydktPVExLQjEra2ZQWDBqcUIxNWJSNUZhMEdZ?= =?utf-8?B?Uldyc2lrT0ZQRGNoejk3OERZbGY2NUdXOHgvVjFOZUZhSmdDeGRQc2FlendQ?= =?utf-8?B?aVNFeW1aM0tVTU1lODJFRExNeE54SHdTS2ZPSVp4aG5FcmJnUmFOeFl5UGV0?= =?utf-8?B?WkhRb1MxQmk5alBqQVdoUVU2MWV3emR4b1BaazJ0dFVrUjBwOVhGVll5V2Mw?= =?utf-8?B?UWR3Y1J0SElhSVNYRldXSFFOdysxVER1SmJTbGZNd1NqYU1YcW1aQW9ieWhS?= =?utf-8?B?eEJrMWNpejdPOFY2bDN2NmRDM095blZyclBLLzRNWmFuWnRNd0IzT2Z3SHdI?= =?utf-8?B?bFRtZ24zc3JUQ05tNm5IS0RORGtEc1ZDK1BmUEVQRWJqblphVXpra2Nhd3Bm?= =?utf-8?B?c2p1aGNkUHZ5aFA5THZWUjBGdXU3Ky9OTXdBb0FHZnd6L2xYbEdRNDQzT3ZE?= =?utf-8?B?TldVZjJqWWVaWkMvMERXSXZtRjBnM3czeHNLaVBOS1RlTi90U2hudWxTUGtN?= =?utf-8?B?cW9UekxHeEJpVTZJQ0YvczNBblBSbFRMM1B1aDNjNFliTG1JRlhKZGo0TjRz?= =?utf-8?B?TGQzMFdHZ3NTemg1cjYydmNUMWZXUnFhbGc0ZzVkRVU3SnY4ZXo4ZVl6TVVL?= =?utf-8?B?bDJKS2laUjFDOU9GVWhJVUhKRWw4cXdDbno1YlEzK0g0eTdBMEpIRXBkaHVh?= =?utf-8?B?TGwvTEJaQ09xRHpIMUF5U0dxaUpFNGRuWUs1UUQ2MmJYVVBnbmNrM3ZSMXQ3?= =?utf-8?B?bG9PNkJlb3Zrd0tlVlhjTEJWZnorY2dkWUoza2J3WmNKYUVjczk3NGRtYzIz?= =?utf-8?B?cStOTnBWc0xIdVZXb1FhNWxJNDBnNElOaGtqVmtuWFpROFB1VWY3ZEVReG8x?= =?utf-8?B?N21SSlN6STlTMkdxdmh2QXVBa09wSW0rM1lORFNhWWgvbkZlQjBMWFpkalV5?= =?utf-8?B?cjFwNGhncDNybUVFT3lPVkZiQkkxaG5WWkMvSHZidEsvMTJId0dIZno0YlFl?= =?utf-8?B?YTZORVI4K3FyaEpvNDJ6K2pMVUduRnJDVmthdGNJUDBtNWVtY2JhbzJZbUU0?= =?utf-8?B?eFVhYWdCa3VzQjJCTThXWUZIQjlUd1N6TU4zallkUlJGMzJQRWljYlhXWGlx?= =?utf-8?B?WUlSVHJEL29Zaml2Uy9NOGtiMmRscklWNDJCTWljSnJaRXZuUE0xMEE1NnNQ?= =?utf-8?B?TXRFMk9yOUdUbDdEY0ZWbXpXdXRidDl2Um12R3pIZlJwYldMUHJsL3EzT0NP?= =?utf-8?B?YjF3U1NSeXJRSUpJcEhWYW55V3owL21IbDh6TWNmV0FUMnF3UEsvZjRVNVls?= =?utf-8?B?em11MUExVzVkOHd3Zkt1WEorVXdWdEsvTGxDczhweVFrdHZNMGxubUVmV3ZX?= =?utf-8?B?cFdJS29GdXVtN3hNZHVsVVZ1WmpmR2xUZFJYU0ZCRm5lR2tLMnBTbjc3THNj?= =?utf-8?B?YlFoSFVQN3pDT1cwejdYUDB3VlBDa1BTY3g1RzIyVExWMGJzT1FOcEtEUVgx?= =?utf-8?B?eGNOdkFHenpLWlBldVpSN0c1ak00ZHVrWlpGa2s3RExXMURteFZKNWJRM2FJ?= =?utf-8?B?cjJVRVFnRnBIK29IeFJCcUliNG9NNHFBcXpic2xXWkZPWDl4NjdnUUpsWm4y?= =?utf-8?B?OGk3RS9MamVhQmFZQklSU0s0M05JZG13WUhDOEdOSUhnV0pEK0paWXdmR2k3?= =?utf-8?B?OG1IRGpzRjJDRkF5UFdQdEE0dEJwdkJkMjFLL0JIeTR4ZnFJZi94TW1CWHgz?= =?utf-8?B?elkxYnZxUUlUNTNnRnVWaGQyYTVOc2pIV3luQXRpZ3pjOUhBOFNzeXk3azd3?= =?utf-8?B?Z3VGMGJLYjNabzc5T1I3amx0Mi9BUjhTN2Y2bDNwQ0tYWm5LbXNyM2NRUTVr?= =?utf-8?B?bUdsbjFlbjNlVXlrdzhuYUI5WTA5WGNibFM4TXFXL0JQbmFnWTFOSmpNWWdQ?= =?utf-8?B?TmpwMy9tOG55WHdvWWNncm1mV21mMHRzZmdMUExKN3V3UE5CbFVTZU1YMVNY?= =?utf-8?B?bUo5aW44a0NNVlpuODhNTGozVkxVK05RVnVxcDh4aW1BRE5VTlN6WktZQ282?= =?utf-8?B?djl5ZCs0RjI5YzM5NTVaeEg0T2x2dDBKZ2Nna25mSDlVbTVhQVJhdVVKMUVT?= =?utf-8?B?bkd1dXZTVE1oTGFhSTQ5QWF6c0tYN21WdzJSNjdWeGxTSXUzRUVVRm9aSi82?= =?utf-8?Q?6aManzpEYpihC1t0=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 75f331b7-0f36-4a5d-3ce1-08df39b26b5e 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:37.9098 (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: ZpPQgQsn8vOAJzZOjwSWBXT5Vjf3aTpJLgt4OznneRsB/gRqo1DL0Dkfnm7wCtLr5Y8J5OVqjoKEyn9n+iLDTfynxz6kHAW/PTjDM4MBOlA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6338 A VFIO device reports the state it hands over once the guest is stopped as pending data, and the migration switches over only when all pending data fits into bandwidth x downtime-limit. That state can't get any smaller by iterating, so when it alone doesn't fit, the migration never converges until the downtime limit is raised, which Nova does in steps of minutes. An NVIDIA vGPU reports 1.5-3 GiB of it, which never fits the default limits. Report the stop-copy size as pending only while the device still has something to pre-copy. Once it has drained, the rest of the pending data, which iterating can shrink, decides the switchover on its own. A device without pre-copy support has nothing to pre-copy from the start, so its state isn't waited for either. In both cases the downtime limit no longer bounds the time that state takes to send: when it fits, nothing is lost by not waiting, and when it doesn't, waiting couldn't help. Signed-off-by: Andrey Drobyshev --- hw/vfio/migration.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 04d0de7cef0..d66de7d31a2 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -569,16 +569,24 @@ static void vfio_state_pending_exact(void *opaque, uint64_t *must_precopy, VFIODevice *vbasedev = opaque; VFIOMigration *migration = vbasedev->migration; uint64_t stop_copy_size = VFIO_MIG_STOP_COPY_SIZE; + int ret; /* - * If getting pending migration size fails, VFIO_MIG_STOP_COPY_SIZE is - * reported so downtime limit won't be violated. + * If getting the pending sizes fails, VFIO_MIG_STOP_COPY_SIZE is + * reported, unconditionally, so the switchover isn't taken blindly. */ - vfio_query_stop_copy_size(vbasedev, &stop_copy_size); - *must_precopy += stop_copy_size; + ret = vfio_query_stop_copy_size(vbasedev, &stop_copy_size); if (vfio_device_state_is_precopy(vbasedev)) { - vfio_query_precopy_size(migration); + ret |= vfio_query_precopy_size(migration); + } + + /* + * Once there's nothing left to pre-copy, the stop-copy state can't + * shrink by iterating: don't let it hold up the switchover. + */ + if (ret || migration->precopy_init_size || migration->precopy_dirty_size) { + *must_precopy += stop_copy_size; } trace_vfio_state_pending_exact(vbasedev->name, *must_precopy, *can_postcopy, -- 2.47.1