From nobody Tue Sep 9 23:43:08 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 1749415856526783.824184444093; Sun, 8 Jun 2025 13:50:56 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 4E9639B6; Sun, 8 Jun 2025 16:50:55 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id BC50C156C; Sun, 8 Jun 2025 16:48:27 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E63B7156E; Sun, 8 Jun 2025 16:48:19 -0400 (EDT) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2051.outbound.protection.outlook.com [40.107.92.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 4E5D1156E for ; Sun, 8 Jun 2025 16:48:07 -0400 (EDT) Received: from LV8PR12MB9620.namprd12.prod.outlook.com (2603:10b6:408:2a1::19) by PH7PR12MB9255.namprd12.prod.outlook.com (2603:10b6:510:30c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.34; Sun, 8 Jun 2025 20:48:01 +0000 Received: from LV8PR12MB9620.namprd12.prod.outlook.com ([fe80::1b59:c8a2:4c00:8a2c]) by LV8PR12MB9620.namprd12.prod.outlook.com ([fe80::1b59:c8a2:4c00:8a2c%5]) with mapi id 15.20.8792.039; Sun, 8 Jun 2025 20:48:01 +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.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FORGED_SPF_HELO,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=il3KK5ETYQMmS3dSPeYoY2jh/fzT00sRXGyok+rBHXBvV6x4+D1Aw8KDVHS6PGvf3Lujh6J8co4eba96ZxIevDkVOOyQ7Ukd0GTF7HIOrqH9WxVi0/cWBWNDlBRBQ9IDhTmTHODFDZz1iDLcHzz8x2/YgmNz4vwaWPrERLDsTrOFx4QLUaalddY6B1JFG7eQQNl6+e8jS98WMOy7c+y8cgOyD9dPqDtPIh0ywjqab0BRkmrhGrXaXJuvNPybjMLChpDw7o3aeHR9yrThDj8BiEug7dc+bbFcLcsMN7Bza9nZaaZemrrUmEDP+E6HBx+zXnhsUpz+EWi3Chp2/qEEXw== 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=+uNTTN9llLH+d0lb+WLkVYpjXSK0dRRsxcaOeIUX31s=; b=m2U20HZ0xQ8Af+dD8D46MfSPsvJxVB2IgRM1yLzPKvdghrkEHYTlnJQI3kGobHkbZsZN9kPIUQUbMwff6j9oWsPXUoZg1hHIYr1u5OsTYBjim65yEvmcN5eX8ZzcoImarcOspVHQ6oAW+Fe4XUVhW+G9AM3gTXx28e+HR1oW58JpeG5Y0w/nhRUNf5pXonq2gHa/uk38ohQV4MPNdPvkX6h3AfdhGURl2UQ/dY5GS5fHzGlRG42ZNfWdXl+ecKcppk27pmJaWlcl0TfVUZ2jmEXznYChHqe3dtgtbK5kOdSexTEqa12lNO2zPhCrCx0knlS+FnOwdfuKt1LmkPppag== 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=+uNTTN9llLH+d0lb+WLkVYpjXSK0dRRsxcaOeIUX31s=; b=NRR4yZza9liN1cVbaJoV8OtYqjCFmZq5GAQW8boCR8M4A/KdE3MersMLes0ZI6+gTjcM7yUF+6zTdzPkrX93Skae0egTor/nKObocGFeCirKuUWXLe/ekoj8CkZKjrJsFV4PRFwygU3sf1kdgreCQ4wZf4TxNCyrFQWVIMgCsmZw65nZB+dT0u1bJUGCbPdc2LoT3PLfmTqYfdpDBEzO8kooFADwdC/yDnK+eAkICF33YhaPSo5gWqTtPSxE+8jQNgKhxbfyvMqqelP2DvdvzD8s0drfT0VDMJ7iG7Q1MGfweQd0CUlsAFPYlZLlOEDFxUYGsN5+xa5nsEhHyzp/jA== 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/8] conf: Introduce acpi-generic-initiator device Date: Sun, 8 Jun 2025 22:44:10 +0200 Message-ID: <20250608204744.518118-3-arighi@nvidia.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250608204744.518118-1-arighi@nvidia.com> References: <20250608204744.518118-1-arighi@nvidia.com> X-ClientProxiedBy: MI2P293CA0013.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:45::8) To LV8PR12MB9620.namprd12.prod.outlook.com (2603:10b6:408:2a1::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV8PR12MB9620:EE_|PH7PR12MB9255:EE_ X-MS-Office365-Filtering-Correlation-Id: 5cdfc199-3fb1-4b5b-d1c7-08dda6cdc20a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kXokB6u9tV6WoK/GwSvNJ4zI++3rSMjPeeTl2LFjYkM2w8H5AD2hZKNtpXGN?= =?us-ascii?Q?+XcLMPgLzUAcuYEfUpDgbhUO3G2XY0Y7FpYpExpb46Cd6dhfxTLSQbasUdYt?= =?us-ascii?Q?tXuCH0CjypZVhiJUEsAXxPXS5K2eosBRs/oh0DhXgP4tHadNyONQ9dmUj8S3?= =?us-ascii?Q?1lk7aXpXfX1HEyMUr1YXx7DkrHdN//RsrJaxXZXrtmPhAmZ8grmrKtjA7xd1?= =?us-ascii?Q?kWDwp1KFyXf+g3JXY+toe9h0gZNb6bO7amA+IEj3NZrrTCK3FYS1d9EEUdMv?= =?us-ascii?Q?2X13jDewp6IhiwUxVViDnvdG/bLG5Vl+CGtpFxJYVGU/LhNIJGpalbrhlHia?= =?us-ascii?Q?dbjd/1Af15upiHy0lynxtd56BCxUxS6EB8tzJKmSWAHIt38gc5o7zD3V/nOg?= =?us-ascii?Q?tpZA+vdMSEVskPAb1yPR8RYKlVtnXKhoSJiDVqPl6O6dVU9tsmwGNvGK4Yj9?= =?us-ascii?Q?DnUlDmdTUo2iiKnXf+EfOnxdXGV6MUD/wLySGKkmeyi8BjcKfJpWU/1HeW0j?= =?us-ascii?Q?KD6NWweObbF+X3eLv1NBtf5QO5j2OT1LehHbhFkUkQImMrwGwKS9Po11QZmF?= =?us-ascii?Q?Ml8qEzThaTsrE02FtjRqevjJMAkoU3/56bt5BPL43lPU2D6WwZh6y3X6N83T?= =?us-ascii?Q?Se/aToNvoqjiBLfL1gcenLoum4YLxuwcXQMHgGEHP4t2iFCeG1sJIUIILKux?= =?us-ascii?Q?RxlQvgLz/JDY2VRHaWMX/6q8uIZAbS6rYuv+HOA+ItYzN5MXtDUj0atI1qvM?= =?us-ascii?Q?ZPR7r0NF4KOgmgnfvZOQyefYaAbHnFIjkDUzpdES4VnOcxXWZnW0V3uQtAkR?= =?us-ascii?Q?gdcItpChOmOyId5Yk40rpW5tdQoX4tf7LBj5iHx+VRXY2VkbkMzCOE7mYDM6?= =?us-ascii?Q?lTWyXHZTgB0wHkzEeRJBVFgps81vF9mheEIJIhDP6ClwpOFpQIHJeoGB3cwY?= =?us-ascii?Q?agOalshk3Szf9GzBv90aKcWwJM2rPilRMkLeQv9/TrAy5aSzVxyYsSnX3n8v?= =?us-ascii?Q?YIHbDuAkuriOkXcBkrDU5HWrUeo/72igUnA6nO0oZZvHMOYy/JvPaKb8pWgy?= =?us-ascii?Q?A7TsJpLdu69cZ+btYv7aBKLLkvANYxiRAujVFen7XBZECvuzZMvuR0cdLcP/?= =?us-ascii?Q?Hlu5jtt/o3UMz3g2InDw/tAxxVV57NB8+Mx8bzZU2JrQaGgtkovHUm9QgBNZ?= =?us-ascii?Q?2W6L3EUwlSP/sXn0736vYHtN++pAY81Xt10VQhlUw0euIgowAnKg5GpBgCNZ?= =?us-ascii?Q?eh/jvryGAeH3f0qpZXHdkzjWtexEa0qzrVsULvzKoi8Rxxt2K1TsDa7ZwNPm?= =?us-ascii?Q?oD7Oq2jc9cg3Fn3JLmSjfPKjNB2UhtZJ4xzWKQT6E3YovU1gPGMOjExQ7ADj?= =?us-ascii?Q?qsCqeY0y+4hJY4vT4c+mRKYM0ZCJtoG6Va74Kn2vF5nHonw+zxN/l+hGMtUu?= =?us-ascii?Q?Fqppd+goZac=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV8PR12MB9620.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lluPR8wI8uVGvmGIvR40Y18AP39CrxozrajfmUbXvg8y/3XZ2CTqlm+yajNr?= =?us-ascii?Q?fMLK5gLxcKxCQZhe+8EWmQgYvj+j5ttdfTYgQKDUHtaJ4+DQQg31an0jqcPe?= =?us-ascii?Q?V38PHRcPgnfpnts/63G819XvRYgNjMld+Bg18ajl4vhiLock1luEIGA+gzCo?= =?us-ascii?Q?d2ZLkY7dNcpNgR/Z5J3KUwDYtm4/ddM3nBE1ieGqAlxN7w1LFQM+vGki1i0D?= =?us-ascii?Q?dKl6xpG5K2oQJycF2HHGOxpohue6vSgmwLLk1LQ+Op/U3kqhui1ULQrW+7pW?= =?us-ascii?Q?1lkFpo4xYuaLDsJm9TWM1OWsWrbmT5N+hIHc2mDbwITwSxRNajJ0euYgs56m?= =?us-ascii?Q?KLv3XIHo3cNoUn73BCO1ozpytsswj0EHueReoAxEjbhltWCPaJfku6npNVBh?= =?us-ascii?Q?wQXIBCQSdONvAVh/9+753A7rjRzGi3kHfcNkTMWR9NnZmGHndRIHfHzuqnbb?= =?us-ascii?Q?e3Jvu37LusyWvF1Rrid9kcs4Zs1Fr9onozEmD7YJKc/uIuFolBsiXuLKLrR2?= =?us-ascii?Q?YLWPQYIj4sEO8coH7iFbphArBw3YB/U6QnDk60EsWLRKKmIuJ2p3w5RprVWy?= =?us-ascii?Q?JOJHGVZJ8KuEt0Odvlr7PoeNUS0jsSnLcTECiE7ZTmbOwN9kASgGE2/sgg3u?= =?us-ascii?Q?VeypfsswJvUz3PsssnVwS4JSJ+8App1/OaQ0/4gaPeWzouvbTvuT1mKUPKNS?= =?us-ascii?Q?8DQ5V2oMwcd3f3h29Y8LN88ZekmTfTuCg/lha7HryzhFSpnDDa5V7Xpqptgy?= =?us-ascii?Q?TgyfQcGrNp7n0J34804bo7nuB/SKjBS5UeqB33JIrWxpKbA7X4peQXS7q94+?= =?us-ascii?Q?WUEnBGUH8xuuP7vPF7VqCjnuaZfXlqQnqvqimp9lAyfcvLgAeaWlAGvtIF56?= =?us-ascii?Q?tM6o1/9U5LIotrH3tV30RB0OH+xoDcTGy8fndNzfurTXAuBOr2ic7ZiPs7T2?= =?us-ascii?Q?T1NOeqlLoaXQAhX5kJYLbw193LmLCEy3lz9fJpwxw5K9Itd+2E23l8dsXBBo?= =?us-ascii?Q?JkUfa6Lz7ubKusGVgHK2vZFSsk+jfClGT/utqC3VYdDApaBbg8J40wbIg0jU?= =?us-ascii?Q?ro556D+r0DFIXSyoHJIMWyc0gG6RC72dlVsWX6F9usMhKyHoiPz/p6a7hFRh?= =?us-ascii?Q?VYGCfsOPF3neApWLUdeV7y8qt/ICseOSu0r3aaoaGba7YXRiSWsGomvnVhtR?= =?us-ascii?Q?lBi2BttSvvDgDm8YPuAjQRn+EdzgVjd59wIStT0XMrHh29YVP7KirbBuPeV1?= =?us-ascii?Q?ZT08ULhQjEn9TwC1J4EF942Qzs0PlxlUHHkSYyMlmoVwCcJPYqZ/VxZ3gyhs?= =?us-ascii?Q?nOd+L023KJwAk4Hoqds+OoFx33FkaT+Qhk4u/mr8JWlNtuyzttXz2w03jc/k?= =?us-ascii?Q?n2SBLUfoDoljH7Jn2CuDPBkneSC16NVPLQBR/8XM3uNhGaHDFNhp0ccV/iwt?= =?us-ascii?Q?g3b2jDh5HmqXgcSWWELkrd/iNS9JMgXfui2gXSFXh4G2ZRLq6P6ARPom8WdR?= =?us-ascii?Q?JyGoeNaAq/xudPwZmUXH0dwi6/6Kegjx4OU7gtHlcdcdvbPXjoYSIT/T7oQW?= =?us-ascii?Q?AuDz+vQxX55QvsDofe6IOuAgzHxBVS8MxTUJaxJs?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5cdfc199-3fb1-4b5b-d1c7-08dda6cdc20a X-MS-Exchange-CrossTenant-AuthSource: LV8PR12MB9620.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2025 20:48:01.2614 (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: zz/jAID3FrFdBRwy/ImZvBzgCQgFCQloD2+8e8m058hDuNWTvrgxDdYq+L/rC8uD6XJru+t4tpmLo5zEVdgNNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB9255 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: HSUNIHBFNYH2JBZLPQ2DPLYZ76FJDAXM X-Message-ID-Hash: HSUNIHBFNYH2JBZLPQ2DPLYZ76FJDAXM X-MailFrom: arighi@nvidia.com 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; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header 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: 1749415857741116600 Content-Type: text/plain; charset="utf-8" Introduce apci-generic-initiator device to the domain XML. Example definition: dev0 1 This enables partitioning of PCI resources into multiple isolated instances, each requiring a dedicated NUMA node definition, that can be represented by the acpi-generic-initiator object. Signed-off-by: Andrea Righi --- src/ch/ch_domain.c | 1 + src/conf/domain_conf.c | 122 ++++++++++++++++++++++++++++-- src/conf/domain_conf.h | 5 +- src/conf/domain_postparse.c | 1 + src/conf/domain_validate.c | 37 +++++++++ src/conf/schemas/domaincommon.rng | 7 +- src/hyperv/hyperv_driver.c | 1 + src/libxl/libxl_driver.c | 6 ++ src/lxc/lxc_driver.c | 6 ++ src/qemu/qemu_alias.c | 11 +++ src/qemu/qemu_command.c | 1 + 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 + 18 files changed, 205 insertions(+), 13 deletions(-) diff --git a/src/ch/ch_domain.c b/src/ch/ch_domain.c index 7231fdc49f..95d835f07f 100644 --- a/src/ch/ch_domain.c +++ b/src/ch/ch_domain.c @@ -164,6 +164,7 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev, case VIR_DOMAIN_DEVICE_CHR: case VIR_DOMAIN_DEVICE_HOSTDEV: case VIR_DOMAIN_DEVICE_RNG: + 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 bfa3a46941..5558e6387f 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, @@ -3486,8 +3487,6 @@ virDomainAcpiInitiatorDefNew(void) =20 def =3D g_new0(virDomainAcpiInitiatorDef, 1); =20 - def->info =3D g_new0(virDomainDeviceInfo, 1); - return def; } =20 @@ -3558,10 +3557,7 @@ virDomainAcpiInitiatorDefFree(virDomainAcpiInitiator= Def *def) if (!def) return; =20 - g_free(def->name); g_free(def->pciDev); - - virDomainDeviceInfoFree(def->info); g_free(def); } =20 @@ -3727,6 +3723,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; @@ -4705,6 +4704,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: @@ -4813,6 +4814,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; @@ -5038,6 +5042,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; @@ -5098,6 +5109,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 @@ -13674,6 +13686,49 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xm= lopt, } =20 =20 +static virDomainAcpiInitiatorDef * +virDomainAcpiInitiatorDefParseXML(virDomainXMLOption *xmlopt, + xmlNodePtr node, + xmlXPathContextPtr ctxt, + unsigned int flags) +{ + g_autoptr(virDomainAcpiInitiatorDef) def =3D virDomainAcpiInitiatorDef= New(); + g_autofree char *tmp =3D NULL; + + VIR_XPATH_NODE_AUTORESTORE(ctxt) + + ctxt->node =3D node; + + if (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, &def->info, flags)= < 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("failed to parse device information")); + return NULL; + } + + def->pciDev =3D virXPathString("string(./pci-dev)", ctxt); + if (!def->pciDev) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing initiator pci-dev")); + return NULL; + } + + tmp =3D virXPathString("string(./numa-node)", ctxt); + if (tmp) { + if (virStrToLong_i(tmp, NULL, 10, &def->numaNode) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid value for numa-node: '%1$s'"), tmp); + return NULL; + } + } else { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing initiator numa-node")); + return NULL; + } + + return g_steal_pointer(&def); +} + + static virDomainRedirdevDef * virDomainRedirdevDefParseXML(virDomainXMLOption *xmlopt, xmlNodePtr node, @@ -14675,6 +14730,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; @@ -20084,6 +20145,24 @@ 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; + + if (n) + 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; @@ -21024,6 +21103,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) @@ -22372,6 +22462,12 @@ 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, @@ -22542,6 +22638,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 @@ -28762,6 +28859,17 @@ virDomainPstoreDefFormat(virBuffer *buf, return 0; } =20 +static void +virDomainAcpiInitiatorDefFormat(virBuffer *buf, + virDomainAcpiInitiatorDef *acpiinitiator) +{ + g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + + virBufferEscapeString(&childBuf, "%s\n", acpiinitia= tor->pciDev); + virBufferAsprintf(&childBuf, "%d\n", acpiinitia= tor->numaNode); + + virXMLFormatElement(buf, "acpi-generic-initiator", NULL, &childBuf); +} =20 int virDomainDefFormatInternal(virDomainDef *def, @@ -29246,6 +29354,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 @@ -29406,6 +29517,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 6aa76f7ff0..e843e2b87a 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; @@ -355,10 +356,9 @@ typedef enum { } virDomainStartupPolicy; =20 struct _virDomainAcpiInitiatorDef { - char *name; char *pciDev; int numaNode; - virDomainDeviceInfo *info; /* Guest address */ + virDomainDeviceInfo info; }; =20 /* basic device for direct passthrough */ @@ -3756,6 +3756,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVideoDef, virD= omainVideoDefFree); void virDomainVideoDefClear(virDomainVideoDef *def); virDomainAcpiInitiatorDef *virDomainAcpiInitiatorDefNew(void); void virDomainAcpiInitiatorDefFree(virDomainAcpiInitiatorDef *def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainAcpiInitiatorDef, virDomainAcpiInit= iatorDefFree); 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 d0d4bc0bf4..d7397e2a2f 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2375,6 +2375,40 @@ 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); + + if (!nodeCount) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("No NUMA node defined")); + return -1; + } + + if (acpiinitiator->numaNode >=3D nodeCount) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("invalid acpi-generic-initiator NUMA node %1$u"), + acpiinitiator->numaNode); + return -1; + } + + if (acpiinitiator->pciDev[0] =3D=3D '\0') { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("acpi-generic-initiator must have a PCI device as= signed")); + return -1; + } + + if (acpiinitiator->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)= { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("acpi-generic-initiator must have a device addres= s type None")); + return -1; + } + + return 0; +} + /** * virDomainMemoryGetMappedSize: * @mem: memory device definition @@ -3293,6 +3327,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 2e307e4559..0909aa26a6 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -7707,13 +7707,8 @@ - - - - - - + diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index 0d1e388c08..068d5db115 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -3122,6 +3122,7 @@ hypervDomainAttachDeviceFlags(virDomainPtr domain, co= nst char *xml, unsigned int 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, _("Attaching devices of type %1$d is not implemente= d"), dev->type); return -1; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 0fb256e5c0..bc3f25b3cb 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3492,6 +3492,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)); @@ -3596,6 +3597,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; @@ -3965,6 +3967,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)); @@ -4056,6 +4059,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; @@ -4119,6 +4123,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)); @@ -4182,6 +4187,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 80cf07d2e5..51071958e8 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3020,6 +3020,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; @@ -3086,6 +3087,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; @@ -3168,6 +3170,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; @@ -3270,6 +3273,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); @@ -3946,6 +3950,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)); @@ -4364,6 +4369,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_alias.c b/src/qemu/qemu_alias.c index 3e6bced4a8..0d1cb8afd7 100644 --- a/src/qemu/qemu_alias.c +++ b/src/qemu/qemu_alias.c @@ -665,6 +665,14 @@ qemuAssignDevicePstoreAlias(virDomainPstoreDef *pstore) pstore->info.alias =3D g_strdup("pstore0"); } =20 +static void +qemuAssignDeviceAcpiInitiatorAlias(virDomainAcpiInitiatorDef *acpiinitiato= r, + int idx) +{ + if (!acpiinitiator->info.alias) + acpiinitiator->info.alias =3D g_strdup_printf("gi%d", idx); +} + =20 int qemuAssignDeviceAliases(virDomainDef *def) @@ -757,6 +765,9 @@ qemuAssignDeviceAliases(virDomainDef *def) } if (def->pstore) qemuAssignDevicePstoreAlias(def->pstore); + for (i =3D 0; i < def->nacpiinitiator; i++) { + qemuAssignDeviceAcpiInitiatorAlias(def->acpiinitiator[i], i); + } =20 return 0; } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 77e7ea1299..7ddadb37d7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -985,6 +985,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; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index ace42b516a..b76bd2e5ed 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8791,6 +8791,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 @@ -10680,6 +10681,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 e89cdee487..573bbc282c 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 b3b0ee66f8..779395ed5a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6908,6 +6908,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"), @@ -7127,6 +7128,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"), @@ -7253,6 +7255,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 e84ad816a0..c3b3851c1a 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3538,6 +3538,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"), @@ -5508,6 +5509,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; @@ -5613,6 +5615,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"), @@ -6508,6 +6511,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"), @@ -7499,6 +7503,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 ed4af9ca8e..a6f610265e 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -906,6 +906,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 2cc52ff3bc..c1bd3da293 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5655,6 +5655,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.49.0