From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022131.outbound.protection.outlook.com [52.101.66.131]) by lore.virtuozzo.com (Postfix) with ESMTPS id 38A408095A for ; Fri, 9 Oct 2026 14:04:47 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uOEvwM4lnQ1nOG/a5NOwHVmDhMXTm3uXGHH67k3VXmBNi+ZEDNLcRkJsPjcIveBTfRERztfXIpPrOxiKa2SPJM5EHMODN4MGWM3zEfzYKgX27qYFS/KZpdoYpc/r5NPUMvAMLhj4XcDxtoo/iUoFRcEAcrVDwFS/cwm+QKj/94eUTQS9E/ionN/1inxgQp5yvRIr66u5zTCH4XfP19uotJjg7qPx5O+LuVvOzkq3Q8U+7SryWu5j4/hofKKSKw/oXRunVw48kVN15H+Unwx0cQQ4BoNC8poHx5zCaYaU/54FoT/aaSSUdR1qo8CQ6EDv/fTJQMx5QxQLUfssCWtHDg== 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=nAEClSBXTgUEn33o6/b6SOA3BG7bjg1cvX9wqJpR6q0=; b=y/YzPoveCLJrEz7n2PCoNwu6GU8+AtwCRudAuVwdEIBNTCugNmWC+IPPkKwMf1/RhgAittR9jF0JhSaL9acoaj6iRjgP4gb5tcakTFEGVLL/ltDdutPeBduj51WUs7ZKb2Cntyg1LEdEsTWwpzXJzxWiU168GHGWpBlDHJK6mGUuweEjd/Ip1wiarwjpbbuR5t5vadyfheXNAS92CY2v6MK5nJpqLyTxdvYtmhI/nvnn8flzbbLejwwN+RP0G8tYN8j0qLvrMWm154xZaPQLlw2f+eRvXuTFtlNMN2PisZC/G6Ey14d/Zbf6HEUraRn6faYq3HpZqqA+iNiIQnzSnQ== 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=nAEClSBXTgUEn33o6/b6SOA3BG7bjg1cvX9wqJpR6q0=; b=ADGe3a9tIiyFFMUb/BsvspBE4OllSkByviPwkzbrr3oukzOdC/3yiI1P8IkFA6pSbnTvXSW8LUZsDObMYmqwIT/sP2eqx1YJ3Du6dKJoUwSdqflt7YYkkrMImA92Sc7JNjw4Xi2FJliHUI76tnc/XXTPjou4yu+NXD2074muItH4FIwHN8VMXcxQ6vy6oO20r4BbQPBvGoShCupx1NoSMskMhCi41ueVsT6Iv8QjUwJ6M6urhhqs3cDME68Da9/hCZJZrcR8zg49GGTeJnmUQGNCRNZKJEAe5DQ4icnXt26Jk1DMYOjwjPiuutpKRWp6aXD93uda3nQ5BgPPVhqVmg== 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 PR3PR08MB5802.eurprd08.prod.outlook.com (2603:10a6:102:8a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Fri, 9 Oct 2026 14:04:45 +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.0496.010; Fri, 9 Oct 2026 14:04:45 +0000 From: Andrey Drobyshev To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, efim.shevrin@virtuozzo.com, den@openvz.org Subject: [RFC HCI-8.1 PATCH 1/5] qemu update: allow qemu-update for VMs with PCI and USB hostdevs #VSTOR-103860 #VSTOR-137800 Date: Fri, 9 Oct 2026 17:04:31 +0300 Message-ID: <20261009140435.483100-2-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20261009140435.483100-1-andrey.drobyshev@virtuozzo.com> References: <20261009140435.483100-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: VI1P194CA0026.EURP194.PROD.OUTLOOK.COM (2603:10a6:803:3c::15) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PR3PR08MB5802:EE_ X-MS-Office365-Filtering-Correlation-Id: f18b93cf-e13e-4744-741a-08df260e45c9 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|366016|1800799024|376014|23010399003|5113699003|22082099003|18002099003|10067099003|38350700014|56012099006; X-Microsoft-Antispam-Message-Info: 45A0obF50owMUkaUe9FJji2Q72SuV1cTCQOe6x45g3v9jK7v27Tix5BM9um6E9xInCH0Bl9jT5rUTlq48q/sbrLEvnpK2HYMCqGud0Vj9YojNZneGetto7cFI1nFH8hVbGdWglescDzjhw6vxfmbzziex6tbHQmgbC26Pj7kPP5LhSwSvyngelqTBQqY7EMO0AX9WDiDzHF8KgTp/7sW1Z5CUjxkC/WT5x2iAQS6UfcoQrorQz99/FodbGMrq+5jCtsz7uAffFHVQm063GNAComPDXNDQ5wSN/Bzmwkoq+rwT8jmyb2w5JmhGWbr6/5PJwNiKtXtcE27dyLtKheDfW8Tq/gj0CwVIA/Aa33ctfY2d7CXz0YDnB62Y74fekLaG42+KD3ezjzjHUmPqDCZKgJRGmQatWqxHg30St1lD6oHTR4OYcCX1FJsH7BTfA/hH7UVLRb6arfF23Ay3JlvGru5O7uFk7vJmr7DddmtU+NI54vQiybi6yAW0amE/UKWi7gDWUJH9OuTW+BiQ0g3iARI1XX2lFDq0f47cmIFsfHOfW+HpsyT8wnK8ZcZzPqnhNUMwuSrEKHPkrRHFusldeVTad2ubdWkk4L0UA4qJ5lacJ8tcv0RePNHtQIBtnySp8ekS7JIzykLVwo30CCx0JKLE/0eIklmV+lzchRF2TeizWszNKWydAROxvqpdGPPZHDP9AkBQ0PUunCEAXLtpbarpU/yfI6ZIATZFFIzFYs= 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)(366016)(1800799024)(376014)(23010399003)(5113699003)(22082099003)(18002099003)(10067099003)(38350700014)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zHtz0bPcgjAhx/rkmqNuKVRD6fQtt91oB4AnSxSBVg8Tmv7PK1xgKL2jiu2i?= =?us-ascii?Q?AzqlTSFrhVVRnKZ6ksKbpdYY772AFSTOyYNRqKQ6FCFsGCYYqrY6ynQg1CEd?= =?us-ascii?Q?17pxdfc2gzAemgbwkV+8trZIsU7z3nGFy/jg/P2/K/Vf+SgDF9Jzl7pCLyE6?= =?us-ascii?Q?DsGIqFx9R/8Q486zrjvph4zeAt8uipkvA7jv0olxst4SXDDSHl2sRRdTkRKf?= =?us-ascii?Q?0kbiKZob5cbgqkQWX+U1LdsLpAV3KOVyFPsCkPLmxQO4hISN58KJQHvpAHfT?= =?us-ascii?Q?E5EHtTwUlmDQNv5Y6c46hzUNCh+tbkiZ4hz+sKhuhxryhYdGuAW34ePnTnCE?= =?us-ascii?Q?lpRtdnaZxMBoqV8dKdzN/j3Crw4wzMQdS3iajb22HkcdSQ+V4afrjNWVkfLd?= =?us-ascii?Q?tq6il+z1/5RckOUGntvT47RyTJl/2OTM3nDO/DfeESgDXtKJxN/09hETSGg+?= =?us-ascii?Q?vv1yxzlEC7asV/0vupVUVD7AhQTLDEDL8n9q2ofnd/Fg1vOx7Ldd2AjIUJas?= =?us-ascii?Q?FAJVdeP/muKxlujVWCvC+Ifuime0m6j8HzKwhEUNiBQGzC5hlMTLuVXQq4p3?= =?us-ascii?Q?LkZ/xuX70pHRYixMnJveEGgrKbq2zg3ijN6hlaX5hoaN/9LEFjPlOVAbUEyN?= =?us-ascii?Q?aWeDNLqWg2T8GZHkoj7WcEOl6XEYuJNLgCSB2ONCoYJBF1X8lBQCl5Ukyedh?= =?us-ascii?Q?OxWs426+1T0WDVxS5XDcIVfcAAoenDLsnAeKu6R13qQSt2YSWtArdgX66wSL?= =?us-ascii?Q?+XAdIor9Z+N+D6/nVrfQuBzmDX12l67r6zSjnLt81JKctgiUcRdEkrC7km3Z?= =?us-ascii?Q?p6Dy7cyHkwFQE2V8fng7sXNXqkLVgiGmILl2LFtj3EUXOg6bIKfk0FYrb5J1?= =?us-ascii?Q?yfytN0Rt/FELRAefazealw0ag5balMLHXZZMh6hUqm+wIlP40C70/OJm+JBO?= =?us-ascii?Q?L+nu6NpdGfU3zDOkxPzUOvFY0cX8CsrYhiAJDiXIP1LsZBfmfc6E+w68F4Xa?= =?us-ascii?Q?vADCg+S5xvBLpns29cNqVqiHkN5qDtXzbsw/A5C3BuOl3RnbLoG3VjbgqhJG?= =?us-ascii?Q?tQLK720FKxHIaG1fVCOT/+YP/FIbcbNSwR3iXlD1L9oX8TLD0aZeOnFRyO5N?= =?us-ascii?Q?BwCScWkcl3lNRhyr4BhG4CxnLHBln04t2NmRulHlBvL9F7cZc6SSbCq1vOfT?= =?us-ascii?Q?5mOcZgzaQS3Afy6KnsAKgPyj0W4YR7qFXbrHVKKIKaAlCgr2dhROx12sfJsc?= =?us-ascii?Q?72FeqjQVUjbwXRbrjDm84v30OYueYmLIBIeSuhNn8JoWOwGH1T4rOJjplCBh?= =?us-ascii?Q?UaPpX+DbQNPJFXI0+gRkrECNTK4ZO0Plx8SDQ6mzsKhqzhidwJiCcBRFxHsi?= =?us-ascii?Q?sZwKm04qXKF9WDze21zAy7i+G0YghPN1r32X70TLClL9v53oyQTvpBFoM8QE?= =?us-ascii?Q?EUt2SjWssjcbqPrbZ/KKMIeuvh6O68KxOso/vabNWJbjk870bQmqNFxg7hDU?= =?us-ascii?Q?HuTearsyo3IqK99vBOTddb09apLMXwJY9EZGC5SsVIJrgY4jcIJ/5jPVYyBX?= =?us-ascii?Q?whDhMtc/VD4snzMQ7iz79m/pgOMkCde9m2ASQ/QzJFC5QMZZv21706GA7xQq?= =?us-ascii?Q?eJVccbsJDskOIuAgMK1NHqzyO6nps3uvQvlBBkBkq3nSSlD623Jjy42zIzbZ?= =?us-ascii?Q?lAlbtQwf2aQGv7EscxHncuXQc9zcBKXJJPPUbWx131OrhJ6jHu+WbLv2oxlN?= =?us-ascii?Q?ebsu9ShVxhsto0/5AnMvi5axja0AxTI=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f18b93cf-e13e-4744-741a-08df260e45c9 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Oct 2026 14:04:45.3334 (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: 9b2jiO4RXr8YZPyoVAAWyQEh+5yDLwljosnpG3/YgndX1/SZ6YGv6Hw/4pFwcE4mTsRGUpjYsbgMzLP9UIyCUDvGvH4IGhgAqEuWjAwgQVk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5802 Previous commit 23ba7842b6 ("qemu update: disable update if hostdev device is added to VM #VSTOR-97345") refused qemu-update for any domain carrying a , because QEMU of that time could not preserve passthrough devices across cpr-exec. QEMU now does: VFIO devices survive the update via the CPR FD preservation machinery, and USB hostdevs are covered by QEMU as well. Replace the blanket check with an allowlist. PCI hostdevs (VFIO; this also covers SR-IOV VFs, which libvirt keeps in the hostdevs array too) and USB hostdevs pass. Other hostdev types (mdev, scsi, scsi_host) haven't been validated with cpr-exec and are still refused, now naming the offending type in the error. NVMe disks (QEMU's userspace NVMe driver on top of VFIO) and vDPA interfaces pin guest memory for device DMA just like VFIO devices, but they are not hostdevs and thus never went through the hostdev check. Refuse them explicitly, each with its own error. Signed-off-by: Andrey Drobyshev --- src/qemu/qemu_driver.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 911690e3909..b3902f10c65 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -25158,6 +25158,7 @@ qemuDomainGuestQemuUpdatePrechecks(virDomainObj *vm) qemuDomainObjPrivate *priv = vm->privateData; g_autoptr(GHashTable) blockjobstats = NULL; g_autoptr(virJSONValue) array = NULL; + size_t i; if (virDomainObjGetState(vm, NULL) != VIR_DOMAIN_RUNNING) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -25172,9 +25173,38 @@ qemuDomainGuestQemuUpdatePrechecks(virDomainObj *vm) return -1; } - if (vm->def->nhostdevs > 0) { + /* Only PCI (VFIO) and USB hostdevs are known to survive cpr-exec */ + for (i = 0; i < vm->def->nhostdevs; i++) { + virDomainHostdevDef *hostdev = vm->def->hostdevs[i]; + const char *type; + + if (virHostdevIsPCIDevice(hostdev) || + (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && + hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)) + continue; + + if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + type = virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type); + else + type = virDomainHostdevModeTypeToString(hostdev->mode); + virReportError(VIR_ERR_OPERATION_INVALID, - _("VM '%1$s' has hostdevs, qemu-update cancelled"), vm->def->name); + _("VM '%1$s' has hostdev of unsupported type '%2$s', qemu-update cancelled"), + vm->def->name, type); + return -1; + } + + if (virDomainDefHasNVMeDisk(vm->def)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("VM '%1$s' has NVMe disk, qemu-update cancelled"), + vm->def->name); + return -1; + } + + if (virDomainDefHasVDPANet(vm->def)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("VM '%1$s' has vDPA interface, qemu-update cancelled"), + vm->def->name); return -1; } -- 2.47.1