From nobody Mon Feb 2 07:29:08 2026 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; 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 (Bad Signature); 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 1768614196828212.23997539659194; Fri, 16 Jan 2026 17:43:16 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id EAAA841C92; Fri, 16 Jan 2026 20:43:15 -0500 (EST) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id C930141B52; Fri, 16 Jan 2026 20:39:57 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 0A41741B63; Fri, 16 Jan 2026 20:39:48 -0500 (EST) Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010059.outbound.protection.outlook.com [52.101.193.59]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 668B341B8E for ; Fri, 16 Jan 2026 20:39:44 -0500 (EST) Received: from DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) by LV2PR12MB999097.namprd12.prod.outlook.com (2603:10b6:408:353::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.6; Sat, 17 Jan 2026 01:39:41 +0000 Received: from DS2PR12MB9567.namprd12.prod.outlook.com ([fe80::636:1b52:24ca:d7e5]) by DS2PR12MB9567.namprd12.prod.outlook.com ([fe80::636:1b52:24ca:d7e5%3]) with mapi id 15.20.9520.005; Sat, 17 Jan 2026 01:39:41 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_INVALID,DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LBa8LtP3yxejWOYfpi4l4Bnm9Ip0ceNrFeBbgY5HtC1hgS/5fE1Yhm1Q/Rd0/LY3Abp3bxIBwFDYem4Scxgkw8hm+dVvaCFt3v028c+QSuHs7vJ5urBM9mQx7oNS5G2SL2gQ34BB8x7R66jnm8wTbBvV8vzdRyhOYRlI1UQlU3qIGFyQF96nkh3s3INieQrh9rdQYQY8W5sSHgTOd091uMIEjA9KT6m81DO3QrWN4v71OIIPpMwb+sEc9AvpCCxvtxSrxuggAtGDHXyiAPA/gnri8tW3B0T5QHf98eGOe5GeRmNOyN5i6TPpqTxg/2iHw5IAu5Aw1lmNWbbEc39yvA== 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=uZbghMO9IKLu41pJZeeSZdFKUe6fEXORq0z2qQ6SiO8=; b=FuZs9In+IprTIqLAZJSA6nTGe7FQ+11/vNjW7+5WML0J6Gnv4pujAFgk+SBHApoPhQ5x+GGMAD3xy2HUS00xpImTs1RaiJu1scrLF3nxhvKETyuKyd+p3ZPv5nCYZyiXMeR9DKTyBMOIoEfs87BYaiCqhaJRvn6p0nmMVIEaftltnFKcVjWLcOcIvq1R7gnMECn3z295VjzBBhSKe96epI85Yw7hNYsD/Gt/gCTbwxuhRn+SKv9kBltEikywAkLrSxQgJt4i1FCa66KyDSrVQvsDdevmhbMy19mGJInMbHQV+zU4apxqu9z1X0SWLYPfJ9YxHRbjvDBxQF42g2Wxaw== 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=uZbghMO9IKLu41pJZeeSZdFKUe6fEXORq0z2qQ6SiO8=; b=DHfUUN9Xvb3kHICA4oaTkdnKT9k4uhSmdZ7Z9QE1vQ/Ww3XrtaalvrKSl0YHhPvngjXzLdmt7thJ5hyb0Q4AXYev0K1mzu91wjI/X1rWIlmkNHkDVwwvcrTMWduSvFnmOv2QBIuPxIdV5cyrUWLI+bxrjjZhVVyGtXj1vI6BnfmNsXYuPkuxw295hTOYs1i1kpp0w+iery7fCfWBIIgpLUFu/NriBNo1XqpcWZQ9RW5dFX7wdxBEDagaqbH8mJniYsSj4u2Y7T9IOk5PZmqS5f/Ic0RihFweKHLcWTysXHQwW79GBASLwGqI5c0c2COY5u2oWgddVeImBIGZUEBCoA== 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 v5 2/7] qemu: Introduce privateData for hostdevs Date: Fri, 16 Jan 2026 17:39:32 -0800 Message-ID: <20260117013937.3803457-3-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260117013937.3803457-1-nathanc@nvidia.com> References: <20260117013937.3803457-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR11CA0092.namprd11.prod.outlook.com (2603:10b6:a03:f4::33) To DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PR12MB9567:EE_|LV2PR12MB999097:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ae07c0e-15bb-40af-77dc-08de556948d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?L3NDMlhGeS9SS3ZQc3Q2bHl1ZlRSNzZKNHlxaG1OcW5lZ1prbVkrL2loTVBp?= =?utf-8?B?RHNRYXVkblg5K2gzQVBZMTJPb3c2MFBmN2tvNHovNDh4T1NYY3VTWHpaV1Fo?= =?utf-8?B?TEhFMHV4Wk9OdW5FZXNuT0lFL1B2Sm5aTUoxUDh2RGJkdkVDMlZDZUJRaG84?= =?utf-8?B?cW1VT3J2aG9TSEJJbW1PSXliSkVVRkc5SkZOc1dhMC92b0pEeE1KOHZYK1JO?= =?utf-8?B?bUl3K1ZhRGRpZmQ4SDJZU0Z4MzlCaVFtZmZjTTNXVkJteGd0VmNlZXFiNEo3?= =?utf-8?B?V2k4bEZmajZhNVFvR0VhK2lhQlVQcVJZTEVkRlJ5bEVPSGJXVmNuV25Fa09U?= =?utf-8?B?c1VEUW9weHVWVFkrMEU0MHJBMkwxa0VqVzh3bEFKakRCYS9GalVyZ3ptU0I3?= =?utf-8?B?WGZtRk4rQWh6eG5yWHY4UEJVZklWZ3V2QjdPQStxbjJ0eVJBOVpITHEvMW9h?= =?utf-8?B?dmZoOHp6V2p0bkVhZlZZWGp6emhwVVRMTFlrRmt3cUxXWXViZUtPYW5FMk4y?= =?utf-8?B?UU1Ed1Q0Rmk1UGRPdjN6ZjFlZmV1UlR6SldVMi9Yc2hFalNqcGlJS0c5ajJs?= =?utf-8?B?K1lDTDRubVZKcDA4MmpybXN5aWlRTmNUUzEzR0cyUTU1U01PN3dhYWJKRi80?= =?utf-8?B?cDgzRkdpTHR4MlRsV3R1eDVwR2VoVVR2VWw1aHowNkVvenFLaUJjcTd2aElY?= =?utf-8?B?Vml4aklkM3BXN3JYOHdIZ1JVUkxGekpyWjlVcXcwK2RycTlCa0wyRW91aXgz?= =?utf-8?B?K2dJNDZtR05zUExGUFRKZ0JGZ1ZVMXc3RUtHSGp2U2drS0tRVTVYUGo3Snph?= =?utf-8?B?Z3lxbWVpakxlTnFaQkdoV0hLSWVLY3JsWXVYL3hVV0NXRjZOVXZXM29uT0hl?= =?utf-8?B?YkIxZXE1MXlmOURLVUpPYm9FRitySjFtcHZNNnlwWjBwdzlZYWhkSUxjYlh0?= =?utf-8?B?Q00rT29aeGlsOW5VcE14TXhIU0hzWCtCYkR1cGxobFdEanIvNVlYVlM5Qzlr?= =?utf-8?B?OTRQSEo4Ry85Q25aM3FzTkRxRU5VSTFzVTFkcCt3VThXZFlGa3VSM2RBbHA1?= =?utf-8?B?Q0R1Vit1OUpqVS9xR0wwYy9MZUFqcjlCNXJKREpQdXd1OXRtNnIxSzdqb1FS?= =?utf-8?B?STZrY0dFMzV2a0RZM04xWmp5NXJxTkhrc01VSEZPYXE2ME40YksvMzNCWTZN?= =?utf-8?B?ZjlDZnpBVlZUSmFXTldFWGJZTFhGa1ppRGJCRjRYNEdyTFZ6eEhlSGtTVmVB?= =?utf-8?B?WmZ1WDExMlFNbURmYUM4TnEydTFYb3ljbzRsTTZvVktYK0NPUURWSEEwVDFK?= =?utf-8?B?NXZwRHpPU2xRckR1d08wcHNTR0dVckFzZzFZMm9qNm5FVGtwTWd1STRDL1Bu?= =?utf-8?B?QjEwODVqZDZYQ2tsbi9hdWNUYnE4ejZ0U0dPbStuQWUyUjl5L3lRdm5NT2JQ?= =?utf-8?B?YURCcERncEUwVGhRbCtFSEMvUlRIUWcrb2dvQVdMSkhPTW9OcVA4T0Y4cVF5?= =?utf-8?B?SEtIMVFvUG50bStTeUJ2ZS8zZEg1S2xtR1c5aXRQM1ZOcE5PZGY0ZUFxdG9m?= =?utf-8?B?eXNqcUg1Q0dEYWx6b1RoMEkxRG5aank4WXplYlhsRTUxajFQM2RiSUp0b1ZN?= =?utf-8?B?dFhKWUFjai9rZ3RLamdvRkRJNU1LRVR5VkhmMWhGd05JNmdsNFVyUm1lYjZn?= =?utf-8?B?WThDekNpa1JtUnI0WHBKODVkYkVjUEFIZ2dCUmRYejVha3BTRkRPMUtUdkhB?= =?utf-8?B?Nm1vMStsbGR6VVg4MDh6Szh3b0xxM2dZcTNORElqRU5vY05jWXZFbHk3R0pC?= =?utf-8?B?ZTNyU0d3UVBmYmYzUlh2cHBXNkJlcTA3YWY4NjJzVCt0RHIycUZLajNKaFE1?= =?utf-8?B?Z3cvekZlWjlZNXY5VWdJdkVzTWZQbnpISmt0MG9WcFN4TzV2cEdDeUJpVXNV?= =?utf-8?B?NzdwSmM2cm4rZ3cyRjdnTlBzNEhabVMwUFk4OFBwbjlRdytEeGw1bmJSYnBa?= =?utf-8?B?cTJFSVNoOTNIcVBPZVZrNDNSZzl3S2pxM0RLdldwazRRcEVEUzZjUElHRUVz?= =?utf-8?B?K3BZK2JOeDREVUpVWHJud0lkbjkxUlNFMFQxQ3E5aVltTmNpeHltT29GUUQv?= =?utf-8?Q?91hk=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS2PR12MB9567.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eUw1MlYrQkVRSHVGaE9Rb25FcWprNFBEN1lMRFkvc3g1NGpKRGRrMVEwZWxt?= =?utf-8?B?UEhhaFl2cXhodTJmZ0JBYjZhdzJWeklCUHlDdCtuUnZYZ2laUjB1TzdiK3RL?= =?utf-8?B?SXJOcDRLa3p6dUpwOG95ckRxVktaL2dSMW5pT3Z5ZWc1RHJrTmFYUytsSGY3?= =?utf-8?B?NGZWVDlYbVVmMXJyL3NOekFHY1BOeFMxRUpwc1BNS05qYWpTK3BqS0VJdFY1?= =?utf-8?B?TE5WN2Vid014RGdVcFlXRlFBSXJHd0hHSGo5eXpZQy9ybVlkTlVESFl6eGc3?= =?utf-8?B?TjFheFdUL1ZQaEhRbTMwdHd6M1pzSXRMaXBIc2s1VGEyNC9QVHlnRGt6MzhN?= =?utf-8?B?MitacmFHaXlocGcwQUJPdU96UXlheVJhOW16eWZGL1VxcGhWa25hMTRld0h5?= =?utf-8?B?MTBnbCtBVFVDU3JyRzYrSytPVkp1R0g4QjZicmJKUG1nd2JjWVRwRTlPMitj?= =?utf-8?B?SnRVWFlWQXdwSklNa0lFZk54WGNuZThwZWZ0WWRUa09UenFvQ3hSMUlKRkVB?= =?utf-8?B?Lzd1QS9VN281aklMZlpaTUFOMktaUWVzWWV1Uy9tSHcvWDlEMCtPdE91dytz?= =?utf-8?B?R3BQUGhTc3VaZCs5Q29PVTBMZE9KMzd5am5yWUhyOGtleHlWSS9PbVRLQ2pD?= =?utf-8?B?Rit4Y2FIWlJielV1VTFSaWc4dkVvcldQVFE2ZSt3RmtZV2MzZXl2eUNzMEVK?= =?utf-8?B?dzNIeFVxVytoQWdMeU5OSzFBK2RScnNoeWxYK2psTHN1QWIwTXdaV0Zhbmwz?= =?utf-8?B?NEhQMWY5RTFZcEJKaDZqYVpmNlMzbnduSDJTM0dkZG5CN1hSaldIYzlMUjdI?= =?utf-8?B?WG81cGdzVVYwWC9SMy9uSUNBYXF5QXUvSk5sVmhjejB0eEROWWxidVNpNGtl?= =?utf-8?B?WWhjcENGNGxaOU9BMXRCNnpQbDBJajVuazZQTVdLZHQvZTR2UVZmZFp4cS9t?= =?utf-8?B?anZZSThaZExmVUkxb2FWcEVlcUVyMHFNUnJadUo4TUJuS2ZDdFJjdEljak5H?= =?utf-8?B?SGlSMlN3OTkrakdBOU5WaUY2VEFwa3ZyTTYwRC8ycTZmSk1xa0oyc0RsM1NO?= =?utf-8?B?b3pYcGlPM2ZXa211ZUFpL1RjMnk3aUFNem15SXNNZDV2TzRrMW1aTVNmL3pN?= =?utf-8?B?MWhuSkEzZ09xOXVmSUUyaGoweWRuYklFNlA5dW0rZ25SZmhTc2RLQTlENkxZ?= =?utf-8?B?dXhrYWNmUXkya3VwbzlVeDYzdXdHaENrNlN6SWtmTjYvQTVDUkNoWU5Qb1hD?= =?utf-8?B?ZzBjampsdW5idFR1bXFyOG45NDkyTVMvcW1vb01TRmI3RjVicGhiTEt6aGY5?= =?utf-8?B?TDVOOGYzOHhKcnQ3SkxVTjZNbUtxWmNFdXlnSnVvbHl0M3FBT294djhoWWVY?= =?utf-8?B?QmNscVJXcUJlMXduUlkvZzlCTXhHbnd1aWxiMC9ubmR2YzNYNnpCN2MxRjVB?= =?utf-8?B?N0JCYU1hMktLOWpsdHhCc2FVeVp2SFlhY1FnanprZzNtZEsxa1ByTWRmZlpx?= =?utf-8?B?cCtFTFJvSGVHNldNLzVsNHVleXNMNGpQMHRZTk04cU9EQUkwRUs5ZEc4S3dt?= =?utf-8?B?LzR1V1JuS0FqdERXQ1V1ckE4dm8rVGk4d0ZrY2h2dkhJZ3RXdk1Nanh5akFI?= =?utf-8?B?OGdFdGNWb2luUFM3NzhuTjJISHA2QlE0WVdLYkgvVXN6MVlGT0VOQ2lqZTl6?= =?utf-8?B?T2NRTVphVXNaZEt1cHN3ZG9pWGE1em9pcHFpaC8zUWRKa0MrMXNtWkwwZ1pW?= =?utf-8?B?cU0zMSsxQnpiSjhNVkUxM0lOaVhJY2pCVTN3SVc4YWNhWDdJNGoydVJYR0xv?= =?utf-8?B?YjlGWjJZQlFRVUZQay81QnM3bEx4UEd0a0hSTEd2eStyZ3VQZ0lBeFpDZGdh?= =?utf-8?B?aGN4UXIzWUdjbGVweHFGelg3bE42cmVQWWJPcHVGdUM0WENTWEVHOE9TMDR4?= =?utf-8?B?bVp1ajhaREE4SmUzbEdUN3B5d01vUEVzaEgvenBkeTdZWFIrNTdGUTYyV3JV?= =?utf-8?B?WThRRldkZEZJam0vNmdyMHF1UTJhNFNFQ1VTcHRhWG1CSE9XSVlDRzY5cmFI?= =?utf-8?B?SDg5VllXbE5PVlBJUWdFZlJlTDBqdElvbUJTdFdUdDhtTlo3WDRSY1FKU1Y2?= =?utf-8?B?Q3U1NExsUTBHZDQ0L1h6clJadjBvaWRpbzNnY05DdENISmNpTWZGL0ZBb1p2?= =?utf-8?B?QmhSSGRVZkpNZDJpMXhjOXNQNGJUU0s1VG1QQjFYN1F3U0EwdXJDQ0tYWlUx?= =?utf-8?B?R25qektmQW9Rek1jOUYwUDdyRkNIcXhYTFF6bm9vSmVWbzZFeksvSzVGK2Mv?= =?utf-8?B?TjBtaU9HcUxXVWJ0SFloY2F5ZjI3VkRzcERDeUFOZUttdXMrQWRMZz09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ae07c0e-15bb-40af-77dc-08de556948d4 X-MS-Exchange-CrossTenant-AuthSource: DS2PR12MB9567.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2026 01:39:41.6078 (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: zox9qYbDWFPnDWI1yhnbT8Ias+Z2cbaNnrDiPv13MrKrqA9NRjQT3vetKX+RwTBuFnBLYqhxmofSOSdAEoQzmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB999097 Message-ID-Hash: JUOBHATX3XOXH7OQ5YEJVAILQB5EYO6I X-Message-ID-Hash: JUOBHATX3XOXH7OQ5YEJVAILQB5EYO6I X-MailFrom: nathanc@nvidia.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: skolothumtho@nvidia.com, nicolinc@nvidia.com, nathanc@nvidia.com, mochs@nvidia.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Nathan Chen via Devel Reply-To: Nathan Chen X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1768614199140158501 From: Nathan Chen Introduce private data for hostdevs and allocate hostdev private data by default. Signed-off-by: J=C3=A1n Tomko Signed-off-by: Nathan Chen --- src/bhyve/bhyve_parse_command.c | 2 +- src/conf/domain_conf.c | 13 +++++++++-- src/conf/domain_conf.h | 5 ++++- src/libxl/xen_common.c | 2 +- src/libxl/xen_xl.c | 2 +- src/lxc/lxc_native.c | 2 +- src/qemu/qemu_domain.c | 40 +++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 15 +++++++++++++ src/vbox/vbox_common.c | 2 +- tests/virhostdevtest.c | 2 +- 10 files changed, 76 insertions(+), 9 deletions(-) diff --git a/src/bhyve/bhyve_parse_command.c b/src/bhyve/bhyve_parse_comman= d.c index d62ea64beb..8b405206bd 100644 --- a/src/bhyve/bhyve_parse_command.c +++ b/src/bhyve/bhyve_parse_command.c @@ -687,7 +687,7 @@ bhyveParsePassthru(virDomainDef *def G_GNUC_UNUSED, return -1; } =20 - hostdev =3D virDomainHostdevDefNew(); + hostdev =3D virDomainHostdevDefNew(NULL); hostdev->mode =3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; hostdev->source.subsys.type =3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI; =20 diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d00a43e969..17cad7e8b0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2733,6 +2733,8 @@ virDomainHostdevDefClear(virDomainHostdevDef *def) case VIR_DOMAIN_HOSTDEV_MODE_LAST: break; } + + g_clear_pointer(&def->privateData, virObjectUnref); } =20 =20 @@ -3483,7 +3485,7 @@ void virDomainVideoDefFree(virDomainVideoDef *def) =20 =20 virDomainHostdevDef * -virDomainHostdevDefNew(void) +virDomainHostdevDefNew(virDomainXMLOption *xmlopt) { virDomainHostdevDef *def; =20 @@ -3491,6 +3493,13 @@ virDomainHostdevDefNew(void) =20 def->info =3D g_new0(virDomainDeviceInfo, 1); =20 + if (xmlopt && xmlopt->privateData.hostdevNew && + !(def->privateData =3D xmlopt->privateData.hostdevNew())) { + VIR_FREE(def->info); + VIR_FREE(def); + return NULL; + } + return def; } =20 @@ -13681,7 +13690,7 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xml= opt, =20 ctxt->node =3D node; =20 - def =3D virDomainHostdevDefNew(); + def =3D virDomainHostdevDefNew(xmlopt); =20 if (virXMLPropEnumDefault(node, "mode", virDomainHostdevModeTypeFromSt= ring, VIR_XML_PROP_NONE, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 83d49969d3..dee1e85a35 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -364,6 +364,8 @@ struct _virDomainHostdevDef { */ virDomainNetDef *parentnet; =20 + virObject *privateData; + virDomainHostdevMode mode; virDomainStartupPolicy startupPolicy; bool managed; @@ -3588,6 +3590,7 @@ struct _virDomainXMLPrivateDataCallbacks { virDomainXMLPrivateDataNewFunc vsockNew; virDomainXMLPrivateDataNewFunc cryptoNew; virDomainXMLPrivateDataNewFunc graphicsNew; + virDomainXMLPrivateDataNewFunc hostdevNew; virDomainXMLPrivateDataNewFunc networkNew; virDomainXMLPrivateDataNetParseFunc networkParse; virDomainXMLPrivateDataNetFormatFunc networkFormat; @@ -3797,7 +3800,7 @@ virDomainVideoDef *virDomainVideoDefNew(virDomainXMLO= ption *xmlopt); void virDomainVideoDefFree(virDomainVideoDef *def); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVideoDef, virDomainVideoDefFree); void virDomainVideoDefClear(virDomainVideoDef *def); -virDomainHostdevDef *virDomainHostdevDefNew(void); +virDomainHostdevDef *virDomainHostdevDefNew(virDomainXMLOption *xmlopt); void virDomainHostdevDefFree(virDomainHostdevDef *def); void virDomainHubDefFree(virDomainHubDef *def); void virDomainRedirdevDefFree(virDomainRedirdevDef *def); diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c index 890ef11723..e6a372e078 100644 --- a/src/libxl/xen_common.c +++ b/src/libxl/xen_common.c @@ -445,7 +445,7 @@ xenParsePCI(char *entry) } } =20 - hostdev =3D virDomainHostdevDefNew(); + hostdev =3D virDomainHostdevDefNew(NULL); hostdev->managed =3D false; hostdev->writeFiltering =3D filtered; hostdev->source.subsys.type =3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI; diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c index e72e7d7f44..42e1408cf3 100644 --- a/src/libxl/xen_xl.c +++ b/src/libxl/xen_xl.c @@ -930,7 +930,7 @@ xenParseXLUSB(virConf *conf, virDomainDef *def) key =3D nextkey; } =20 - hostdev =3D virDomainHostdevDefNew(); + hostdev =3D virDomainHostdevDefNew(NULL); hostdev->managed =3D false; hostdev->source.subsys.type =3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE= _USB; hostdev->source.subsys.u.usb.bus =3D busNum; diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c index 7700804429..a94427b027 100644 --- a/src/lxc/lxc_native.c +++ b/src/lxc/lxc_native.c @@ -376,7 +376,7 @@ lxcCreateNetDef(const char *type, static virDomainHostdevDef * lxcCreateHostdevDef(const char *data) { - virDomainHostdevDef *hostdev =3D virDomainHostdevDefNew(); + virDomainHostdevDef *hostdev =3D virDomainHostdevDefNew(NULL); hostdev->mode =3D VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES; hostdev->source.caps.type =3D VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET; hostdev->source.caps.u.net.ifname =3D g_strdup(data); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index ac56fc7cb4..85eea1801f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1238,6 +1238,45 @@ qemuDomainNetworkPrivateFormat(const virDomainNetDef= *net, } =20 =20 +static virClass *qemuDomainHostdevPrivateClass; + +static void +qemuDomainHostdevPrivateDispose(void *obj) +{ + qemuDomainHostdevPrivate *priv =3D obj; + + VIR_FORCE_CLOSE(priv->vfioDeviceFd); +} + + +static int +qemuDomainHostdevPrivateOnceInit(void) +{ + if (!VIR_CLASS_NEW(qemuDomainHostdevPrivate, virClassForObject())) + return -1; + + return 0; +} + +VIR_ONCE_GLOBAL_INIT(qemuDomainHostdevPrivate); + +virObject * +qemuDomainHostdevPrivateNew(void) +{ + qemuDomainHostdevPrivate *priv; + + if (qemuDomainHostdevPrivateInitialize() < 0) + return NULL; + + if (!(priv =3D virObjectNew(qemuDomainHostdevPrivateClass))) + return NULL; + + priv->vfioDeviceFd =3D -1; + + return (virObject *) priv; +} + + /* qemuDomainSecretInfoSetup: * @priv: pointer to domain private object * @alias: alias of the secret @@ -3563,6 +3602,7 @@ virDomainXMLPrivateDataCallbacks virQEMUDriverPrivate= DataCallbacks =3D { .chrSourceNew =3D qemuDomainChrSourcePrivateNew, .vsockNew =3D qemuDomainVsockPrivateNew, .graphicsNew =3D qemuDomainGraphicsPrivateNew, + .hostdevNew =3D qemuDomainHostdevPrivateNew, .networkNew =3D qemuDomainNetworkPrivateNew, .networkParse =3D qemuDomainNetworkPrivateParse, .networkFormat =3D qemuDomainNetworkPrivateFormat, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 3396f929fd..3aac743875 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -461,6 +461,18 @@ struct _qemuDomainTPMPrivate { }; =20 =20 +#define QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev) \ + ((qemuDomainHostdevPrivate *) (hostdev)->privateData) + +typedef struct _qemuDomainHostdevPrivate qemuDomainHostdevPrivate; +struct _qemuDomainHostdevPrivate { + virObject parent; + + /* VFIO device file descriptor for iommufd passthrough */ + int vfioDeviceFd; +}; + + void qemuDomainNetworkPrivateClearFDs(qemuDomainNetworkPrivate *priv); =20 @@ -1174,3 +1186,6 @@ qemuDomainCheckCPU(virArch arch, bool qemuDomainMachineSupportsFloppy(const char *machine, virQEMUCaps *qemuCaps); + +virObject * +qemuDomainHostdevPrivateNew(void); diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 26c5fdfef6..d2a8cf8da4 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -3090,7 +3090,7 @@ vboxHostDeviceGetXMLDesc(struct _vboxDriver *data, vi= rDomainDef *def, IMachine * def->hostdevs =3D g_new0(virDomainHostdevDef *, def->nhostdevs); =20 for (i =3D 0; i < def->nhostdevs; i++) - def->hostdevs[i] =3D virDomainHostdevDefNew(); + def->hostdevs[i] =3D virDomainHostdevDefNew(NULL); =20 for (i =3D 0; i < deviceFilters.count; i++) { PRBool active =3D PR_FALSE; diff --git a/tests/virhostdevtest.c b/tests/virhostdevtest.c index aec474a148..a35c1d9402 100644 --- a/tests/virhostdevtest.c +++ b/tests/virhostdevtest.c @@ -124,7 +124,7 @@ myInit(void) =20 for (i =3D 0; i < nhostdevs; i++) { virDomainHostdevSubsys *subsys; - hostdevs[i] =3D virDomainHostdevDefNew(); + hostdevs[i] =3D virDomainHostdevDefNew(NULL); if (!hostdevs[i]) goto cleanup; hostdevs[i]->mode =3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; --=20 2.43.0