From nobody Fri Dec 19 18:46:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1739348012502198.28278124930557; Wed, 12 Feb 2025 00:13:32 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E46111826; Wed, 12 Feb 2025 03:13:31 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id BE58B1914; Wed, 12 Feb 2025 03:12:39 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 84E9215FD; Wed, 12 Feb 2025 01:29:18 -0500 (EST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2055.outbound.protection.outlook.com [40.107.236.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 0A2C1145B for ; Wed, 12 Feb 2025 01:29:18 -0500 (EST) Received: from CY5PR12MB6405.namprd12.prod.outlook.com (2603:10b6:930:3e::17) by DS0PR12MB7745.namprd12.prod.outlook.com (2603:10b6:8:13c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.18; Wed, 12 Feb 2025 06:29:16 +0000 Received: from CY5PR12MB6405.namprd12.prod.outlook.com ([fe80::2119:c96c:b455:53b5]) by CY5PR12MB6405.namprd12.prod.outlook.com ([fe80::2119:c96c:b455:53b5%7]) with mapi id 15.20.8422.015; Wed, 12 Feb 2025 06:29:16 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kwz04oWQ2CWyh8IEUtCHoNnfPs95/xsrwMzSMMDOJAM8uKaHh0WfkIT0Rs6xtxlxQCi/0JrvRhCOkYQXSqDaSEeBEDnD1SUpulGYRSMw3YLLASzrx6HA+nphrxL1wvYcuiHCv/tYJaWiIUaLkwD5ymxf5zu/5rBNRgvf/fONXpz/gxcDARQ2bHvVbJdJMXEXb1wiCGv33JyCpUUea34EpFtSCLlNlFn2mPLDDFbwD0EdloWBxMekebfDlLCZ44XMpnmTerwz5ZyuAHJGxRFmWEXM7oSjsuETN9z4Rw7ta5itU0u5v+hRPuclC4dGF6Fk7TEczIN0VvXwE9u7ULMiZA== 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=YwfqlyHUTusx/Q9nEMEQkZUHXPwBSr94UPanOHcKMZQ=; b=i0zVDS724Up60pzf2lhM3ovwxjzDZxkWwhNci/k+x4EHn9TD0dhzgr1LH/SwepDXgtU4BdMLB1IgosiWrGfNipupm4fb+RFcLCUZA6BTCOUJbq3R5NmxloZ2fFoBj305Vf+bSmPA3T5xpAVoAHbgFeY1GSVDmtUBHxK5tZjv+EQBcsy+7McIHn4JmiNd4Zal/ncsynGFgObmUteC+2GB8PU/9f3mrZFSlNG9MptGmeIvmWoKrk6wgOChOS+oTQq/fVJ1fsFWI6zJgs/rWz9NBjjRk1XmCysq2lA0AR9uzofZfcnz/jVqfGtof6Amd8wlbl01iNiFFnJtf/XDhO3dfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YwfqlyHUTusx/Q9nEMEQkZUHXPwBSr94UPanOHcKMZQ=; b=Slvnew9Qm7HmTyvtGmZg8WAEJuUn0oUqCKyrz9TUC/F5lst/QEJ6EZ8tcLVKs+KgAMX1lBYlMm5L+Ps9N4WHJw/glP07n5+W9iYEIf/aLrGH4pBM+D0h6SvUReMs6oSyq3GNry0me4S6TgoniZuxaqXHKo/gDbaEn3tVWBiufAj0ePgNSrN3DWrNRqSwv04UkcjBQ7QxjjzbylmHW+LNUpKYv95s3d9dSUylM9+unf7iz15rmUs7WoKCy64o99f6yNRwyUSi2MFlhWKlHDQCoMk0qbbf99YwDd5FwPjLS8UaxoEnEU2HNx8nhS0E9BCyM81DJiBWU0D+6C3wlNvv/Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [PATCH 1/2] qemu: Allow to define NUMA nodes without memory or CPUs assigned Date: Wed, 12 Feb 2025 07:26:08 +0100 Message-ID: <20250212062905.321572-2-arighi@nvidia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250212062905.321572-1-arighi@nvidia.com> References: <20250212062905.321572-1-arighi@nvidia.com> X-ClientProxiedBy: FR2P281CA0013.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::23) To CY5PR12MB6405.namprd12.prod.outlook.com (2603:10b6:930:3e::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR12MB6405:EE_|DS0PR12MB7745:EE_ X-MS-Office365-Filtering-Correlation-Id: 29489e3e-0c61-464b-0f0a-08dd4b2e9314 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?JDMpjBEJzbnX/jWeGOeOiWMNidALAXCSW/USA2JERGcuDvrTatkFUl3S6pFW?= =?us-ascii?Q?epFZIzaGUeaT1rVYVz7utFscnx1kb6AsvSSfxlJbid7K6LQ+pMsUZ3kwLdWs?= =?us-ascii?Q?1zX9Y+E8h4vwu2V1B6ZRw1iTbwjfcB28V9HcJVv200rUSXKGWFfWFBQSZyGP?= =?us-ascii?Q?fbZTqxQ0DmHsUijv6KI3mLSPiXgHsSpxQ4dBsId5vMkz2P23+ibsiLS1P8F0?= =?us-ascii?Q?SoQuDUcjFZ1R98UIOhiGq7vYn+jKaoC8wAGjtfnwupZtEd9nOx9hUsparwLG?= =?us-ascii?Q?Xj3cjJ/0htrzwVhZ49LzCCY2X82mqhv5XgKRtoQHIqBzNbGoOu/2dr/sRVK8?= =?us-ascii?Q?oXqfPJGrptrPUjusZ3sxZf3Z3bBzzTI3w5gtkNp8R5ZqV/CuFkoSdtW3sbyp?= =?us-ascii?Q?UqENs1KrSCRwODqymm6WyzuWxHqOqkCadtgd0ivVO9H5Nm7nJ2yjelVPMVHF?= =?us-ascii?Q?3YxSf+xV98MiZYjh260uDUdQ+J0YrWf1xGt9bONUhvpG+Er4ZzJ3b3n42cxA?= =?us-ascii?Q?iwt5KNaWdcAdTwZvnxIr6awa0qTi9PW/58XzsaJt8Fdk/vvMz/DjT3ArkFle?= =?us-ascii?Q?xagF21Mve+tck/PH6Bovi0wztg5QtZ/lyryvYPdoGYCA1k9FvmRf3O2qKG7c?= =?us-ascii?Q?8XwGgPRh4bw6w3jIM8LV0ffhcxQ8oDIyMw9sXIC1kd7xMiOXnC7WANgwvdXZ?= =?us-ascii?Q?mEir68nmnW+bATg9yjqjRkZWbqs9CdsKdvmlM4wZ33RAe7/NstySAroWKMCT?= =?us-ascii?Q?GAYkXOMmyR6MYJqiKaxWOCbUGARoa8dq6+z+MiOUvH9N+nrycLiMBfBMAxia?= =?us-ascii?Q?6hhwbxBucUopC/mb1QsXEDf64JPysXBP8Ybnk2W1T9+DsacilYIZCk+INz/8?= =?us-ascii?Q?FZTLnpuC227Skv9bPBVsQaMSswWw6a/6qpNb7warwg3bSpK9q1fyrtsUSUOE?= =?us-ascii?Q?Dd/2qCeDq0mIccYQZmiO+ehL/2V+zc4xk3Yl80LcDMTdU+e18DK6ScSgPDVW?= =?us-ascii?Q?DCEJ3eD22DjZ65mRZ4CKg/K2pdh+mwWo5QRDCU3hpAC+bYrkwCUdW+ggdlu/?= =?us-ascii?Q?HmfiR0nYw2rjnfcoo2WgXGJXHHeBpD+aK2Trno5LZPhIB8476fTpDUTuMJAc?= =?us-ascii?Q?Xg+zc+/7uAx7pXQsLLR/uNmgIBdCIK8+2RHQzgONN3F4qKGx3E+BjJbXtV/C?= =?us-ascii?Q?eg0PZ1Ye2sYqrzVUscz6FUw6eeYpr/2GO6HYZ8RkENCe16kY/PM0VOYEHn/A?= =?us-ascii?Q?W9SjiSAGOEizxTJrcElA+q8Xw4QvSMePSFf9XDz02vyl6B5lph3+GQyoDGzo?= =?us-ascii?Q?jkCJfg+6pnj5/McnZsBLr7BRfHxTqkdteFWEFdxZCICKRC+cMgvnC5QS+MZj?= =?us-ascii?Q?PLpJn+9ObfUfE6+RZUdL9FTpbsAJ?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY5PR12MB6405.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IQg8/yeltWSnbkE3sw0DnIvCU8h66rLLdGk0J0H88mtUiX8TAkMxl/6uEo1x?= =?us-ascii?Q?/Pgoz6pnuGsWnSpEdvrmK56mep6yhu/0Dy2CiBBGHz7zC0bv1Nsa0aszGavF?= =?us-ascii?Q?xVan2f1IleWSi/fZKAtVnjgl0tMlGfDlNBLc5YrOWZB7n+o6BpbpBdAQDTej?= =?us-ascii?Q?7fjdryyBtd7ElTqIbTURr2dDYnmvvx1j5JuQZU7VBT8VkUYl5HvhKMj3Uhwb?= =?us-ascii?Q?hSACsggIWMrHgl6KQ7RFMLHomquXB04Fl5kwpgxjMNGyZ+ylm/oFgRs+demQ?= =?us-ascii?Q?2IH0PIVCDI/fglDti2GtE5WjIqUXdbbAor3qyK5jQjnkQrffYiQV8gD/6/kL?= =?us-ascii?Q?pYD0H4R7l1DnyRlyBXwSyinbbuiImoIhaXnFLXp6yT+JElvfqt8LsbfjNbtv?= =?us-ascii?Q?bSha7llHlMbaoygxHXCnnHnpUejhUdCH/4gb09daFfxGSmx0Xg663AhdG6H1?= =?us-ascii?Q?jr1pBNPm2st4w2+sHWsiRF7cHeT+ZV+X0pEgn7dQS+eft0w4dUfIxBAifuYE?= =?us-ascii?Q?M2UejSTzWcCt8UykV5eh8XLITieb0gy1R+3PBHhtONWcRfOEwSUGz3KJnJ6t?= =?us-ascii?Q?h8PsE9g8jXhVWE+DM48WQg7NHgC4QToCLTzmyS4Zc7KvJMMakirr1JFrC27G?= =?us-ascii?Q?HxWmcUqq0upfC2PpfHOd0Bwtc3NQUbprafdiE+JdMe8FzkazzL+oBy+e8hBf?= =?us-ascii?Q?7E4iwull16qgcxgdFbNu09ihztfXzqMVA7KxGxFqpKxzzf47kfYzlRLivlwB?= =?us-ascii?Q?98um3s5gbdyCHxNAxPQOjJQn6XhDbuMU6c1ytpCn5Fe53IDnrsgE5AewcMeD?= =?us-ascii?Q?MM9Idm3BB3VdhuTEIISGqu/7HcDxrGOhL5zGZ31S6wN3ftnEZ0twuHJy2OZ4?= =?us-ascii?Q?unGlEjE7xhjYbDpUGMnsgVLEnJoktt5P3tV635XstCkTCiByAxeoZaPSd5uQ?= =?us-ascii?Q?ORJU7t3TRBavUXoNAe3jaMMHgE9sOShxUV3+Jz4w2xnu0N/qSmS/4ZVbBOh7?= =?us-ascii?Q?VIDLoQY6E10/+famiCdlvzBNtCbAH8DHE077yjaT4ll18LqDjSDFyUtvKl7A?= =?us-ascii?Q?cqgriVa01ujB/wH+LMlXMdAe/ss/UQLMGyLZ5gwPqOxKBZfxgN+iwtDuCplI?= =?us-ascii?Q?vJVeod3lKyLfXTRNjhMntvqeuLRLnbLq1jcqztFwToPQXW6xSCKpHwmWlQBj?= =?us-ascii?Q?3sYqZghbXHPSfWh611cj5qqf4X1h2muv5D6R1RSmDeAxTIWdP5neFbW7E10o?= =?us-ascii?Q?K8K0yqiW+eZaVqWEiCYaZ0WfunFQgzTNjPfLwzR6XFlJ0Xdpy1sPrsAlvvIN?= =?us-ascii?Q?FFTzY7nm07a8df6yiErltVH3BWhI1YTCyyqaGWTN1qBYMALhLeMg6XOmHDN/?= =?us-ascii?Q?pV301r0z5GjnXIfBPlThwRap1kuhHarULpxItMRmubEqiwCj/JFFCws5gnRm?= =?us-ascii?Q?ZAji8VbBk4CGSUlZJntHm9BWNjj6l9xOj4T/GVL0YWsFx7b2kSu+gSCnUDuG?= =?us-ascii?Q?Kmq3udrbWrbsocSnnBVcMfAK9PLC/jpa8K6jG1JLOiRg4DjBiIkrf2w3OhaL?= =?us-ascii?Q?s59DnpJfhzizN67sshKv6UkV4Kl0GomBSrFIshiT?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29489e3e-0c61-464b-0f0a-08dd4b2e9314 X-MS-Exchange-CrossTenant-AuthSource: CY5PR12MB6405.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 06:29:16.5756 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iBgJj6hRiPLideYV0N42uQPdggxk01ZWtUsKttrP7iT/WN1l0riXfqpGFykMy9aRCPhyDUa5gTr1ezoa4vEwww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7745 Content-Transfer-Encoding: quoted-printable X-MailFrom: arighi@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: 7RE7SFIYFG3VXAVPJ4U4HCDNVX5DCAES X-Message-ID-Hash: 7RE7SFIYFG3VXAVPJ4U4HCDNVX5DCAES X-Mailman-Approved-At: Wed, 12 Feb 2025 08:12:35 -0500 X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Andrea Righi via Devel Reply-To: Andrea Righi X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739348013902019000 Content-Type: text/plain; charset="utf-8" Allow to define NUMA nodes without memory or CPUs assigned to properly support the new acpi-generic-initiator device. This is required because the NUMA nodes passed to the acpi-generic-initiator object must be independent and not be shared with other resources, such as CPU or memory. Signed-off-by: Andrea Righi --- src/conf/numa_conf.c | 3 +++ src/qemu/qemu_command.c | 22 ++++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c index 0a0e2911f7..0b311c9416 100644 --- a/src/conf/numa_conf.c +++ b/src/conf/numa_conf.c @@ -1498,6 +1498,9 @@ virDomainNumaFillCPUsInNode(virDomainNuma *numa, if (node >=3D virDomainNumaGetNodeCount(numa)) return -1; =20 + if (virDomainNumaGetNodeMemorySize(numa, node) =3D=3D 0) + return 0; + virBitmapSetAll(maxCPUsBitmap); =20 for (i =3D 0; i < numa->nmem_nodes; i++) { diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7370711918..03d0676f45 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7567,16 +7567,20 @@ qemuBuildNumaCommandLine(virQEMUDriverConfig *cfg, } } =20 - if (masterInitiator < 0) { + /* HMAT requires a master initiator, so when it's enabled, ensure that + * at least one NUMA node has CPUs assigned. + */ + if (hmat && masterInitiator < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("At least one NUMA node has to have CPUs")); + _("At least one NUMA node has to have CPUs")); goto cleanup; } =20 for (i =3D 0; i < ncells; i++) { ssize_t initiator =3D virDomainNumaGetNodeInitiator(def->numa, i); + unsigned long long memSize =3D virDomainNumaGetNodeMemorySize(def-= >numa, i); =20 - if (needBackend) { + if (needBackend && memSize > 0) { g_autoptr(virJSONValue) tcProps =3D NULL; =20 if (qemuBuildThreadContextProps(&tcProps, &nodeBackends[i], @@ -7606,11 +7610,13 @@ qemuBuildNumaCommandLine(virQEMUDriverConfig *cfg, virBufferAsprintf(&buf, ",initiator=3D%zd", initiator); } =20 - if (needBackend) - virBufferAsprintf(&buf, ",memdev=3Dram-node%zu", i); - else - virBufferAsprintf(&buf, ",mem=3D%llu", - virDomainNumaGetNodeMemorySize(def->numa, i)= / 1024); + if (memSize > 0) { + if (needBackend) { + virBufferAsprintf(&buf, ",memdev=3Dram-node%zu", i); + } else { + virBufferAsprintf(&buf, ",mem=3D%llu", memSize / 1024); + } + } =20 virCommandAddArgBuffer(cmd, &buf); } --=20 2.48.1 From nobody Fri Dec 19 18:46:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 173934808158935.164746596868554; Wed, 12 Feb 2025 00:14:41 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E5BFA1771; Wed, 12 Feb 2025 03:14:40 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3412F1950; Wed, 12 Feb 2025 03:12:42 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6AD3C15FF; Wed, 12 Feb 2025 01:29:26 -0500 (EST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2051.outbound.protection.outlook.com [40.107.220.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id CF298143A for ; Wed, 12 Feb 2025 01:29:24 -0500 (EST) Received: from CY5PR12MB6405.namprd12.prod.outlook.com (2603:10b6:930:3e::17) by DS0PR12MB7745.namprd12.prod.outlook.com (2603:10b6:8:13c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.18; Wed, 12 Feb 2025 06:29:20 +0000 Received: from CY5PR12MB6405.namprd12.prod.outlook.com ([fe80::2119:c96c:b455:53b5]) by CY5PR12MB6405.namprd12.prod.outlook.com ([fe80::2119:c96c:b455:53b5%7]) with mapi id 15.20.8422.015; Wed, 12 Feb 2025 06:29:20 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PAtoogCpDIbktrsDej5VLdLRWCtB5zKYh9TXWlxWoR/a4ycoCUYhpqUnRwWr6IsAQPgK5gMHD+hR9Ml1naD09Qcpg9JjESiAvbU54EY33GAPHFFswOh+EgWgghd7b3UQFFuw6E0VzKKeJiFTTiBTTRy1zur3JmxQfk9+xvbeKkcyfeNW7rj5/6tM7Ti9jRwc2eqeLBj/QoUg/87axvWGmlT7toX5CtI+MhrMljnDRTHeDK/NrxV4SjPsNb148M8+qMAZRRtNqsWhUzx6R2r+bwO+zBBCtL9lHj5QHbl8izzC/kyIoeVYGBeB11GBS1MIRiH62lN9pl8NAKjOHFPXow== 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=4mKbVK2YcYW07hQHh7hO/a6+9JXdvZc2cpN2xyQEnVw=; b=N0tJcAbGHv7BsrJBjXuAVbDVnaB6cUwSF4MY6ukGkuVh5gPQCpyGHPAAR7s6RmIZ9/wf9zqhWeTApzdLXwUIE6IebZbhPEFnzUWlli/RtGUt2JGXnQWw6ijd/GU4KWbboA9i47MhJ9NhzWKw4476j0z3LmZUkA65v7HDToP+rdY3lzXfwz5w6P9aueNOiTUqTV5vJDBj+Zn+3tCaKNeXl91U1FGon39ReCIcq1sXpcEsJt+EWrwdjEbx11WTfEMjQ5epoo7iw+QVB0orV+LZCEu61H7o0tfIplYlzLjO2zfDf0hrbjHhgRxrGD9R2jAb9gOB6zVLaIURMAr7iMtt7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4mKbVK2YcYW07hQHh7hO/a6+9JXdvZc2cpN2xyQEnVw=; b=frwqfXvgGIle4mNmGjqd6Cqdo6yrlTm/GNaLmkHMjrCoXkr3xjkrTSTxg8gdfXENOlLu2414lLv+iXBxMBp2glzTgQ4QXq0/1uOv8TRwR9cutK91NDRWqBOL9HY5X11vFRE5yWxVMHmawoSFyjW4rYi5VuSCxX4aSC/TJlf4onpdTm/PlOtOZxKXfdvDNZixnZzUXdWg9ntNIgsCVBukaUU9jx4GNrwJpgoufBAEz6zKkIzMSuvoEfajBkBXwhBHpnzmgKiUThZ3X/6i6nxc2YM4PJU6JNAqeQArXw3+H82L3FqMh7O5mmkafEX1DH1wQ0sdt8XYxKPMoZXw1GuygQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; To: devel@lists.libvirt.org Subject: [PATCH 2/2] qemu: Introduce acpi-generic-initiator device Date: Wed, 12 Feb 2025 07:26:09 +0100 Message-ID: <20250212062905.321572-3-arighi@nvidia.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250212062905.321572-1-arighi@nvidia.com> References: <20250212062905.321572-1-arighi@nvidia.com> X-ClientProxiedBy: FR2P281CA0006.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::16) To CY5PR12MB6405.namprd12.prod.outlook.com (2603:10b6:930:3e::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY5PR12MB6405:EE_|DS0PR12MB7745:EE_ X-MS-Office365-Filtering-Correlation-Id: 393731b1-0cc6-4cfb-2eb9-08dd4b2e9550 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?19Nj4ozIeXeuFfjC7gvWgBo25zZQgQNGFdpsgetNukXFlRN+ytBrHcMyMV1p?= =?us-ascii?Q?yZTJCquXm1uM4ZGZYY1HMdqS2/W8hbk/Kn/W/Zuek+yiH0ZIKc2UH3TBlX2q?= =?us-ascii?Q?H5qqn8Aq245WoEl70r4Bv2KnfhjERR2+GHR7XwOcp7w3o78XpkNqFtk0BKIj?= =?us-ascii?Q?VGLXdRLJcfJQUUtulhLItrCHt0/mvfdP02n0biM16qfXj344Xo6VajX13Fb1?= =?us-ascii?Q?E+IH5bEigk/Ch94QrIWpSHIoQam1YbY34WZmivErP3N9UYmMKs4gZoZIs2EK?= =?us-ascii?Q?xBxpocKqFfJn7tXSDg0GMVlnaCZyQ9MLUsmQH0EeU3JW4E7WBWUrvw+JXUq1?= =?us-ascii?Q?83mkCQ/7oAK8IO1w+4HIbzBinJ4AnAo93ZjTL0VXtcdByCcnn8AkqlXWDSyY?= =?us-ascii?Q?znn+zQt6jAE9Okte6/694wt77x7jg+Eu5ZVfHX657p79UsIAhfmJEaTDbjA0?= =?us-ascii?Q?LE5FbMlFneNn5V8NAU92eMyWq8gl7kcIzf1CaPchCSb0fdLxdoN2acD3mhog?= =?us-ascii?Q?xAKXYbp7/NqrBOZVF2ujb8ToF7LU2Cc9Twz7Lcxi4rNtkSwI+Ug+mechDTPJ?= =?us-ascii?Q?bbwRwuZ4ji45kgTbPKKNEDBvAUPcmfuKHRtDRxOcdXR5q9iR9ByKaq+ouULz?= =?us-ascii?Q?sPbFmIpi0iWaM/eG5JIwhrjTrf+3i5tqVX4GFtnaJivRu0WOoPBMPzO2+QIK?= =?us-ascii?Q?xS7rc2zGMU0i9n1r8qe450BB5vXJgmyygw6XOxPGmLbxTMHU8yQ0MGZDzDJC?= =?us-ascii?Q?s4SWXkPapjU+irYKa0Vtyemuc/W4k+9rFu7Hye35TEW3QVZeM9hMe9aN00/g?= =?us-ascii?Q?Ixzor7m478i6aYqpncou7ojKgSwn3RFs+i/EtJS0ii+pjFJOGjvdzhEHXszk?= =?us-ascii?Q?czjhOJ+Es75MiSwkHQSv+XWe4ZWuYUtV9/KrdFOVATis52AOkX3uU09chYYf?= =?us-ascii?Q?g4/K49nFg0tjSJiEPv8JnQzKPpfxXc8V4YI2+HqzEAl0o86DDE1ZrOlPSBFl?= =?us-ascii?Q?hZUWmwh++gMiPkULYwPZOJz2XMVJZNfdVKBlt/cRhewA1QYOYmAH9d+B6O5X?= =?us-ascii?Q?NlrTLECxEZx6xHAJPi/lz108HL8HdI59RGGbrKbNlaCS2rxGTtLpOZE0qJFb?= =?us-ascii?Q?gJMYkS6sMLnbw2bPP/SkOeMMJR6yfaX2auyu0xdJXJ/fEk9BwSdw+3aqRGs+?= =?us-ascii?Q?29fM9rmYTbzkNqm6mxfve0zMWwavlK+gjvaECu6Aev2iysZUCTASds3U+Cs5?= =?us-ascii?Q?bXwSKNQpNvZovnt0MqIbZjgkRbME8ykFMaQuA075/sxoJhXiqDEFJyBqGs7+?= =?us-ascii?Q?Id2EPDGe+BWODKYIKPb8E22jm/0r2j2dET8ANQ+LiYIn7BFjNZoHNLjlpxyJ?= =?us-ascii?Q?ICBOFP5+ilHFnNz3qevSdNkopjCl?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY5PR12MB6405.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?U5XkN+FDbPp1TpnaeS112E+uASqviJmlvjfApmTWNU8OAO4wUL4e9JLMk6zt?= =?us-ascii?Q?wtbhtPJhFqBWJmqwIfE7fv205N/n2mTkagRnNe4DpBCXEkNWeKuGcg/uczjJ?= =?us-ascii?Q?5Ugpz2K7Jn0tJXf2WCgELz9figOmjXI3ppM6e47cyDu+mQiZ84X+iWVlrDG3?= =?us-ascii?Q?K7GQD2pmOFW0cOhTOD0DwpVdS5FXvpsuPUYnimvNd98HWqMmFyzjKVrrTX0p?= =?us-ascii?Q?8hrA7mdR31LPY2bllT5sMQyPeHWLdlFiJ+yau8UWFYMg+AYB2gVGC6rQj6Qp?= =?us-ascii?Q?MAai4Igk8tmWEHakt71lifVVqSBlfKAWHohMFnKkRasvUmYimnOt/fNXRsjk?= =?us-ascii?Q?FQhtauZbi647MlcfMB8EMZMyHTpkdf1URjC+RMOw2QSxCEfo8Rx0Tk4oY2V3?= =?us-ascii?Q?rd4OWdDs8Exv8713KnGOLW2ck915wnS+eZWTNJD+S5t0KujHYywUU4zFlN0I?= =?us-ascii?Q?RUneXdZCKs9UriqnqqWUK0M2J0H/JsX2QTAeO7bH1fAzZo4WD3uAFBPzQUTB?= =?us-ascii?Q?z5uDYNmsPqiJg6dVHBiF8wSZwMukqLkL2uA6DQmQvoiyUaQsQIFtf6FymORM?= =?us-ascii?Q?jamwzkmXsDwePtDPLmnRlYuBevyY+uKh+6ys43JI1m5YpKItK0lTgtC3GNpV?= =?us-ascii?Q?OyH9zSr1lQ17MXRbyiXb/xWuBYgj/vWZuYqJKT23qVfzmm/2aeD7yFXwUh3V?= =?us-ascii?Q?yAIFwMhKA+oXNrn4AcADJLgTas1uWJJ1cQRdAijsBnMORDzJQ6qNQMBQR+bN?= =?us-ascii?Q?YxjKelA42HsjezbPDX3g+/0WljwGaZBAyWZ7AzXIa1XIXkeBOS5bQQOhbmzo?= =?us-ascii?Q?GXQ5FcMJlKdproRA/q0TQ5sbXKukkmRMW1iwPajL6IeJ7rIZA1G3GO/oeiOe?= =?us-ascii?Q?5EU83R8BDgSO2BKKmqzmqs9vQTxVlvxylvtD74RsXULPiSOUxmamEamxTZ6h?= =?us-ascii?Q?I0GqTc2gxIEucStjEbmXEyhyts8oJ5ndM1kFHndpHDVSEO/UXZ8rNatdNoh3?= =?us-ascii?Q?XvZDsFjb8YBxSvx42FGwf1nhwyIZYodz/Hat9SVCnT8Eu5tuPlElCieCptDl?= =?us-ascii?Q?xV2CFKzXjHGhBFyFgiUaczrsSOXcio4WSZeCNsuzAB8ks+QAvSIFGZJoTI9y?= =?us-ascii?Q?pSm0MxiQ19nF9oMvTb9/4R+0R61ZF9JiAgzDvw+yOpKhrZ+jLmtvyBqwLBvb?= =?us-ascii?Q?cYt64hcR+qd+0qdXMi0qz4C2SNifOkD/7yGAlozOEDCXy9PHeqPFXSPSoc2z?= =?us-ascii?Q?YbCP67jRTm2tlQlKP08l5VnCiIqw5fg84oCmVKMxCwWep4sIvZEeSOpe1ZtY?= =?us-ascii?Q?o0DGJDOGsEgEL4ua2P0CmjYVcXPYhS64fbXXdNHzehu6d7MciqljI5E5m5Q8?= =?us-ascii?Q?q2W47EN59RVcFNRAQt7t9sZlJz3IqwVRlNi2NMbqdIjCytLPcWFd/+O2PfvK?= =?us-ascii?Q?B0nhQY7Gek0fZltrSb2P0wKaZjKxhQtHg1x3K8eDjJJIdk5eQxzaChNjznr6?= =?us-ascii?Q?hY2ZdxKgLrvqgmL1o574We/gC3aOEr/ECxLnT654UQixicVa6geGbgVoCMVT?= =?us-ascii?Q?znS7htK4pTQhgHc7gIyENN+IRgGR2T9jWZnFx6tL?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 393731b1-0cc6-4cfb-2eb9-08dd4b2e9550 X-MS-Exchange-CrossTenant-AuthSource: CY5PR12MB6405.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 06:29:20.4586 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jVYdIOGpPl0kfvLtkcGDa3nAJV4ts11jKBgGLOi4NeEdCSHP3n/I6GGeTMKHBDt3DibBcUk+8w/qRbJDo6zvmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7745 Content-Transfer-Encoding: quoted-printable X-MailFrom: arighi@nvidia.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 Message-ID-Hash: BFWWNJYEUYVAURHC2NAOA3VXOEVLMZYG X-Message-ID-Hash: BFWWNJYEUYVAURHC2NAOA3VXOEVLMZYG X-Mailman-Approved-At: Wed, 12 Feb 2025 08:12:35 -0500 X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Andrea Righi via Devel Reply-To: Andrea Righi X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1739348082017019000 Content-Type: text/plain; charset="utf-8" Allow to define new acpi-generic-initiator objects to link a PCI device with multiple NUMA nodes. Link: https://mail.gnu.org/archive/html/qemu-arm/2024-03/msg00358.html Signed-off-by: Andrea Righi --- src/ch/ch_domain.c | 1 + src/conf/domain_conf.c | 153 ++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 14 +++ src/conf/domain_postparse.c | 1 + src/conf/domain_validate.c | 40 ++++++++ src/conf/schemas/domaincommon.rng | 19 ++++ src/conf/virconftypes.h | 2 + src/libxl/libxl_driver.c | 6 ++ src/lxc/lxc_driver.c | 6 ++ src/qemu/qemu_command.c | 18 ++++ src/qemu/qemu_domain.c | 2 + src/qemu/qemu_domain_address.c | 4 + src/qemu/qemu_driver.c | 3 + src/qemu/qemu_hotplug.c | 5 + src/qemu/qemu_postparse.c | 1 + src/qemu/qemu_validate.c | 1 + src/test/test_driver.c | 4 + 17 files changed, 280 insertions(+) diff --git a/src/ch/ch_domain.c b/src/ch/ch_domain.c index 4f5966adce..224a97bd79 100644 --- a/src/ch/ch_domain.c +++ b/src/ch/ch_domain.c @@ -159,6 +159,7 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_CONTROLLER: case VIR_DOMAIN_DEVICE_CHR: case VIR_DOMAIN_DEVICE_HOSTDEV: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: break; =20 case VIR_DOMAIN_DEVICE_LEASE: diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 87f87bbe56..095501f77c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -342,6 +342,7 @@ VIR_ENUM_IMPL(virDomainDevice, "audio", "crypto", "pstore", + "acpiinitiator", ); =20 VIR_ENUM_IMPL(virDomainDiskDevice, @@ -3457,6 +3458,19 @@ virDomainHostdevDefNew(void) } =20 =20 +virDomainAcpiInitiatorDef * +virDomainAcpiInitiatorDefNew(void) +{ + virDomainAcpiInitiatorDef *def; + + def =3D g_new0(virDomainAcpiInitiatorDef, 1); + + def->info =3D g_new0(virDomainDeviceInfo, 1); + + return def; +} + + static virDomainTPMDef * virDomainTPMDefNew(virDomainXMLOption *xmlopt) { @@ -3517,6 +3531,18 @@ void virDomainHostdevDefFree(virDomainHostdevDef *de= f) g_free(def); } =20 +void virDomainAcpiInitiatorDefFree(virDomainAcpiInitiatorDef *def) +{ + if (!def) + return; + + VIR_FREE(def->name); + VIR_FREE(def->pciDev); + + virDomainDeviceInfoFree(def->info); + g_free(def); +} + void virDomainHubDefFree(virDomainHubDef *def) { if (!def) @@ -3679,6 +3705,9 @@ void virDomainDeviceDefFree(virDomainDeviceDef *def) case VIR_DOMAIN_DEVICE_PSTORE: virDomainPstoreDefFree(def->data.pstore); break; + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: + virDomainAcpiInitiatorDefFree(def->data.acpiinitiator); + break; case VIR_DOMAIN_DEVICE_LAST: case VIR_DOMAIN_DEVICE_NONE: break; @@ -4605,6 +4634,8 @@ virDomainDeviceGetInfo(const virDomainDeviceDef *devi= ce) return &device->data.crypto->info; case VIR_DOMAIN_DEVICE_PSTORE: return &device->data.pstore->info; + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: + return device->data.acpiinitiator->info; =20 /* The following devices do not contain virDomainDeviceInfo */ case VIR_DOMAIN_DEVICE_LEASE: @@ -4713,6 +4744,9 @@ virDomainDeviceSetData(virDomainDeviceDef *device, case VIR_DOMAIN_DEVICE_PSTORE: device->data.pstore =3D devicedata; break; + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: + device->data.acpiinitiator =3D devicedata; + break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; @@ -4938,6 +4972,13 @@ virDomainDeviceInfoIterateFlags(virDomainDef *def, return rc; } =20 + device.type =3D VIR_DOMAIN_DEVICE_ACPI_INITIATOR; + for (i =3D 0; i < def->nacpiinitiator; i++) { + device.data.acpiinitiator =3D def->acpiinitiator[i]; + if ((rc =3D cb(def, &device, def->acpiinitiator[i]->info, opaque))= !=3D 0) + return rc; + } + /* If the flag below is set, make sure @cb can handle @info being NULL= */ if (iteratorFlags & DOMAIN_DEVICE_ITERATE_MISSING_INFO) { device.type =3D VIR_DOMAIN_DEVICE_GRAPHICS; @@ -4998,6 +5039,7 @@ virDomainDeviceInfoIterateFlags(virDomainDef *def, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: break; } #endif @@ -13373,6 +13415,60 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xm= lopt, } =20 =20 +static virDomainAcpiInitiatorDef * +virDomainAcpiInitiatorDefParseXML(virDomainXMLOption *xmlopt, + xmlNodePtr node, + xmlXPathContextPtr ctxt, + unsigned int flags) +{ + virDomainAcpiInitiatorDef *def; + xmlNodePtr cur; + + VIR_XPATH_NODE_AUTORESTORE(ctxt) + + ctxt->node =3D node; + + if (!(def =3D virDomainAcpiInitiatorDefNew())) + goto error; + + for (cur =3D node->children; cur; cur =3D cur->next) { + if (cur->type !=3D XML_ELEMENT_NODE) + continue; + + if (xmlStrEqual(cur->name, BAD_CAST "alias")) { + def->name =3D virXMLPropString(cur, "name"); + if (!def->name) + goto error; + } else if (xmlStrEqual(cur->name, BAD_CAST "pci-dev")) { + def->pciDev =3D virXMLNodeContentString(cur); + if (!def->pciDev) + goto error; + } else if (xmlStrEqual(cur->name, BAD_CAST "numa-node")) { + xmlChar *content =3D xmlNodeGetContent(cur); + + if (!content) + goto error; + if (virStrToLong_i((const char *)content, NULL, 10, &def->numa= Node) < 0) { + xmlFree(content); + goto error; + } + xmlFree(content); + } + } + + if (def->info->type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + if (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, def->info, + flags) < 0) + goto error; + } + return def; + + error: + virDomainAcpiInitiatorDefFree(def); + return NULL; +} + + static virDomainRedirdevDef * virDomainRedirdevDefParseXML(virDomainXMLOption *xmlopt, xmlNodePtr node, @@ -14374,6 +14470,12 @@ virDomainDeviceDefParse(const char *xmlStr, return NULL; } break; + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: + if (!(dev->data.acpiinitiator =3D virDomainAcpiInitiatorDefParseXM= L(xmlopt, node, + ctxt, flags)))= { + return NULL; + } + break; case VIR_DOMAIN_DEVICE_NONE: case VIR_DOMAIN_DEVICE_LAST: break; @@ -19798,6 +19900,23 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt, } VIR_FREE(nodes); =20 + /* analysis of the acpi generic initiator */ + if ((n =3D virXPathNodeSet("./devices/acpi-generic-initiator", ctxt, &= nodes)) < 0) + return NULL; + + def->acpiinitiator =3D g_new0(virDomainAcpiInitiatorDef *, n); + + for (i =3D 0; i < n; i++) { + virDomainAcpiInitiatorDef *acpiinitiator; + + acpiinitiator =3D virDomainAcpiInitiatorDefParseXML(xmlopt, nodes[= i], ctxt, flags); + if (!acpiinitiator) + return NULL; + + def->acpiinitiator[def->nacpiinitiator++] =3D acpiinitiator; + } + VIR_FREE(nodes); + /* analysis of the user namespace mapping */ if ((n =3D virXPathNodeSet("./idmap/uid", ctxt, &nodes)) < 0) return NULL; @@ -20725,6 +20844,17 @@ virDomainHostdevDefCheckABIStability(virDomainHost= devDef *src, } =20 =20 +static bool +virDomainAcpiInitiatorDefCheckABIStability(virDomainAcpiInitiatorDef *src, + virDomainAcpiInitiatorDef *dst) +{ + if (!virDomainDeviceInfoCheckABIStability(src->info, dst->info)) + return false; + + return true; +} + + static bool virDomainSmartcardDefCheckABIStability(virDomainSmartcardDef *src, virDomainSmartcardDef *dst) @@ -22073,6 +22203,11 @@ virDomainDefCheckABIStabilityFlags(virDomainDef *s= rc, goto error; } =20 + for (i =3D 0; i < src->nacpiinitiator; i++) { + if (!virDomainAcpiInitiatorDefCheckABIStability(src->acpiinitiator= [i], dst->acpiinitiator[i])) + goto error; + } + if ((!src->redirfilter && dst->redirfilter) || (src->redirfilter && !dst->redirfilter)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -22243,6 +22378,7 @@ virDomainDefCheckABIStabilityFlags(virDomainDef *sr= c, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: break; } #endif @@ -28287,6 +28423,19 @@ virDomainPstoreDefFormat(virBuffer *buf, return 0; } =20 +static void +virDomainAcpiInitiatorDefFormat(virBuffer *buf, + virDomainAcpiInitiatorDef *acpiinitiator) +{ + g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + + virBufferAsprintf(&childBuf, "\n", acpiinitiato= r->name); + virBufferAsprintf(&childBuf, "%s\n", acpiinitiator-= >pciDev); + virBufferAsprintf(&childBuf, "%d\n", acpiinitia= tor->numaNode); + + virXMLFormatElement(buf, "acpi-generic-initiator", &attrBuf, &childBuf= ); +} =20 int virDomainDefFormatInternal(virDomainDef *def, @@ -28762,6 +28911,9 @@ virDomainDefFormatInternalSetRootName(virDomainDef = *def, if (def->pstore) virDomainPstoreDefFormat(buf, def->pstore, flags); =20 + for (n =3D 0; n < def->nacpiinitiator; n++) + virDomainAcpiInitiatorDefFormat(buf, def->acpiinitiator[n]); + virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); =20 @@ -28922,6 +29074,7 @@ virDomainDeviceIsUSB(virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: break; } =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e51c74b6d1..b43d589760 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -88,6 +88,7 @@ typedef enum { VIR_DOMAIN_DEVICE_AUDIO, VIR_DOMAIN_DEVICE_CRYPTO, VIR_DOMAIN_DEVICE_PSTORE, + VIR_DOMAIN_DEVICE_ACPI_INITIATOR, =20 VIR_DOMAIN_DEVICE_LAST } virDomainDeviceType; @@ -122,6 +123,7 @@ struct _virDomainDeviceDef { virDomainAudioDef *audio; virDomainCryptoDef *crypto; virDomainPstoreDef *pstore; + virDomainAcpiInitiatorDef *acpiinitiator; } data; }; =20 @@ -353,6 +355,13 @@ typedef enum { VIR_DOMAIN_STARTUP_POLICY_LAST } virDomainStartupPolicy; =20 +struct _virDomainAcpiInitiatorDef { + char *name; + char *pciDev; + int numaNode; + virDomainDeviceInfo *info; /* Guest address */ +}; + /* basic device for direct passthrough */ struct _virDomainHostdevDef { /* If 'parentnet' is non-NULL it means this host dev was @@ -3210,6 +3219,9 @@ struct _virDomainDef { size_t ntpms; virDomainTPMDef **tpms; =20 + size_t nacpiinitiator; + virDomainAcpiInitiatorDef **acpiinitiator; + /* Only 1 */ virDomainMemballoonDef *memballoon; virDomainNVRAMDef *nvram; @@ -3690,6 +3702,8 @@ virDomainVideoDef *virDomainVideoDefNew(virDomainXMLO= ption *xmlopt); void virDomainVideoDefFree(virDomainVideoDef *def); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVideoDef, virDomainVideoDefFree); void virDomainVideoDefClear(virDomainVideoDef *def); +virDomainAcpiInitiatorDef *virDomainAcpiInitiatorDefNew(void); +void virDomainAcpiInitiatorDefFree(virDomainAcpiInitiatorDef *def); virDomainHostdevDef *virDomainHostdevDefNew(void); void virDomainHostdevDefFree(virDomainHostdevDef *def); void virDomainHubDefFree(virDomainHubDef *def); diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c index bf33f29638..acdfbdc679 100644 --- a/src/conf/domain_postparse.c +++ b/src/conf/domain_postparse.c @@ -757,6 +757,7 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDef *d= ev, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_PSTORE: ret =3D 0; break; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index eb5e764c02..3bcbedb4fb 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2316,6 +2316,43 @@ virDomainHostdevDefValidate(const virDomainHostdevDe= f *hostdev) } =20 =20 +static int +virDomainAcpiInitiatorDefValidate(const virDomainDef *def, + const virDomainAcpiInitiatorDef *acpiini= tiator) +{ + const size_t nodeCount =3D virDomainNumaGetNodeCount(def->numa); + size_t i; + + if (!nodeCount) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("No NUMA node defined")); + return -1; + } + + for (i =3D 0; i < nodeCount; i++) + if (acpiinitiator->numaNode =3D=3D i) + break; + if (i =3D=3D nodeCount) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("acpi-generic-initiator must have a valid NUMA node")); + return -1; + } + + if (acpiinitiator->name[0] =3D=3D '\0') { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("acpi-generic-initiator must have a name")); + return -1; + } + + if (acpiinitiator->pciDev[0] =3D=3D '\0') { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("acpi-generic-initiator must have a PCI device assigned")= ); + return -1; + } + + return 0; +} + /** * virDomainMemoryGetMappedSize: * @mem: memory device definition @@ -3234,6 +3271,9 @@ virDomainDeviceDefValidateInternal(const virDomainDev= iceDef *dev, case VIR_DOMAIN_DEVICE_PSTORE: return virDomainPstoreDefValidate(dev->data.pstore); =20 + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: + return virDomainAcpiInitiatorDefValidate(def, dev->data.acpiinitia= tor); + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_HUB: diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincom= mon.rng index 96cedb85e8..f6c42a4844 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6807,6 +6807,7 @@ + @@ -7626,6 +7627,24 @@ =20 + + + + + + + + + + + + + + + + + + diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 59be61cea4..564c06638e 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -118,6 +118,8 @@ typedef struct _virDomainHostdevCaps virDomainHostdevCa= ps; =20 typedef struct _virDomainHostdevDef virDomainHostdevDef; =20 +typedef struct _virDomainAcpiInitiatorDef virDomainAcpiInitiatorDef; + typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys; =20 typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMe= diatedDev; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index a76545c9ff..61e21dd85d 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3511,6 +3511,7 @@ libxlDomainAttachDeviceLive(libxlDriverPrivate *drive= r, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be attached"), virDomainDeviceTypeToString(dev->type)); @@ -3620,6 +3621,7 @@ libxlDomainAttachDeviceConfig(virDomainDef *vmdef, vi= rDomainDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent attach of device is not supported= ")); return -1; @@ -3989,6 +3991,7 @@ libxlDomainDetachDeviceLive(libxlDriverPrivate *drive= r, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be detached"), virDomainDeviceTypeToString(dev->type)); @@ -4080,6 +4083,7 @@ libxlDomainDetachDeviceConfig(virDomainDef *vmdef, vi= rDomainDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent detach of device is not supported= ")); return -1; @@ -4143,6 +4147,7 @@ libxlDomainUpdateDeviceLive(virDomainObj *vm, virDoma= inDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be updated"), virDomainDeviceTypeToString(dev->type)); @@ -4206,6 +4211,7 @@ libxlDomainUpdateDeviceConfig(virDomainDef *vmdef, vi= rDomainDeviceDef *dev) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent update of device is not supported= ")); return -1; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 4740aeed52..828abc5d32 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3024,6 +3024,7 @@ lxcDomainAttachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent attach of device is not supported")); break; @@ -3090,6 +3091,7 @@ lxcDomainUpdateDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent update of device is not supported")); break; @@ -3172,6 +3174,7 @@ lxcDomainDetachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("persistent detach of device is not supported")); break; @@ -3274,6 +3277,7 @@ lxcDomainAttachDeviceMknodHelper(pid_t pid G_GNUC_UNU= SED, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected device type %1$d"), data->def->type); @@ -3950,6 +3954,7 @@ lxcDomainAttachDeviceLive(virLXCDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be attached"), virDomainDeviceTypeToString(dev->type)); @@ -4368,6 +4373,7 @@ lxcDomainDetachDeviceLive(virLXCDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("device type '%1$s' cannot be detached"), virDomainDeviceTypeToString(dev->type)); diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 03d0676f45..0619e2b132 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -991,6 +991,7 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef= *device, case VIR_DOMAIN_DEVICE_IOMMU: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: default: break; @@ -10290,6 +10291,18 @@ qemuBuildPstoreCommandLine(virCommand *cmd, return 0; } =20 +static int +qemuBuildAcpiInitiatorCommandLine(virCommand *cmd, + const virDomainAcpiInitiatorDef *acpiini= tiator) +{ + g_autofree char *obj =3D NULL; + + obj =3D g_strdup_printf("acpi-generic-initiator,id=3D%s,pci-dev=3D%s,n= ode=3D%d", + acpiinitiator->name, acpiinitiator->pciDev, acpi= initiator->numaNode); + virCommandAddArgList(cmd, "-object", obj, NULL); + + return 0; +} =20 static int qemuBuildAsyncTeardownCommandLine(virCommand *cmd, @@ -10656,6 +10669,11 @@ qemuBuildCommandLine(virDomainObj *vm, qemuBuildPstoreCommandLine(cmd, def, def->pstore, qemuCaps) < 0) return NULL; =20 + for (i =3D 0; i < def->nacpiinitiator; i++) { + if (qemuBuildAcpiInitiatorCommandLine(cmd, def->acpiinitiator[i]) = < 0) + return NULL; + } + if (qemuBuildAsyncTeardownCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index cf05dca55a..36782b381e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8721,6 +8721,7 @@ qemuDomainPrepareChardevSourceOne(virDomainDeviceDef = *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: break; } =20 @@ -10655,6 +10656,7 @@ qemuDomainDeviceBackendChardevForeachOne(virDomainD= eviceDef *dev, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: /* no chardev backend */ break; } diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 970ae3949d..aac0ca7ece 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -471,6 +471,7 @@ qemuDomainDeviceSupportZPCI(virDomainDeviceDef *device) case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: break; =20 case VIR_DOMAIN_DEVICE_NONE: @@ -819,6 +820,9 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, return pciFlags; } =20 + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: + return pciFlags; + case VIR_DOMAIN_DEVICE_MEMBALLOON: switch (dev->data.memballoon->model) { case VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL: diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 78bfaa5b3a..ada49fb389 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6899,6 +6899,7 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent attach of device '%1$s' is not suppo= rted"), @@ -7118,6 +7119,7 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent detach of device '%1$s' is not suppor= ted"), @@ -7244,6 +7246,7 @@ qemuDomainUpdateDeviceConfig(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent update of device '%1$s' is not suppor= ted"), diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 6c224c9793..089e5d9aad 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3521,6 +3521,7 @@ qemuDomainAttachDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live attach of device '%1$s' is not supported"), @@ -5440,6 +5441,7 @@ qemuDomainRemoveAuditDevice(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: /* libvirt doesn't yet support detaching these devices */ break; @@ -5545,6 +5547,7 @@ qemuDomainRemoveDevice(virQEMUDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("don't know how to remove a %1$s device"), @@ -6440,6 +6443,7 @@ qemuDomainDetachDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%1$s' is not supported"), @@ -7432,6 +7436,7 @@ qemuDomainUpdateDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("live update of device '%1$s' is not supported"), diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index 20ee333e0d..c81f93e384 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -905,6 +905,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_RNG: case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: ret =3D 0; break; =20 diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 76f2eafe49..ddd067c331 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5498,6 +5498,7 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef = *dev, case VIR_DOMAIN_DEVICE_PSTORE: return qemuValidateDomainDeviceDefPstore(dev->data.pstore, def, qe= muCaps); =20 + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_PANIC: case VIR_DOMAIN_DEVICE_NONE: diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6f18b2b2c8..5c706a1035 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10459,6 +10459,7 @@ testDomainAttachDeviceLive(virDomainObj *vm, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live attach of device '%1$s' is not supported"), @@ -10602,6 +10603,7 @@ testDomainUpdateDevice(virDomainDef *vmdef, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("persistent update of device '%1$s' is not suppor= ted"), @@ -10973,6 +10975,7 @@ testDomainRemoveDevice(testDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%1$s' is not supported"), @@ -11044,6 +11047,7 @@ testDomainDetachDeviceLive(testDriver *driver, case VIR_DOMAIN_DEVICE_AUDIO: case VIR_DOMAIN_DEVICE_CRYPTO: case VIR_DOMAIN_DEVICE_PSTORE: + case VIR_DOMAIN_DEVICE_ACPI_INITIATOR: case VIR_DOMAIN_DEVICE_LAST: virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("live detach of device '%1$s' is not supported"), --=20 2.48.1