From nobody Mon Feb 2 07:28:47 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; 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 1769799776600510.6076904743778; Fri, 30 Jan 2026 11:02:56 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id B69B741A35; Fri, 30 Jan 2026 14:02:55 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id A8C0A41BE0; Fri, 30 Jan 2026 13:59:39 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 3A94E41802; Fri, 30 Jan 2026 13:59:29 -0500 (EST) Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012032.outbound.protection.outlook.com [52.101.48.32]) (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 4332C3F878 for ; Fri, 30 Jan 2026 13:59:28 -0500 (EST) Received: from DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) by SN7PR12MB7106.namprd12.prod.outlook.com (2603:10b6:806:2a1::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Fri, 30 Jan 2026 18:59:24 +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.9564.008; Fri, 30 Jan 2026 18:59:22 +0000 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_INVALID,DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, 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=tfYKsZEF+9UxRqhICO/MI3jqfVOcBr1lZrXsbe/S0OPpVx/Cv5lfBiwh/IKKjq14YFbUw75ziGjmrqodns1CNzvjGTAp/UmsOwYpAuRrOb1tethKzkHBqlPvnq1qb6m1rJ8byzptsuVNilZjMrws/lKVh61s2dIhM/2J18lPZMMtRFSimCcTfboDQ6U05ruoe6o9qM+5fCEN79lptVpApYWfV7dv1c0KNCwOKHomwI3yUxTPdo9lNy/JXJ43MgSf+bK2tHJ42fQNEw6ArRfxncVnk4Hu8VCoys81NsOk6HxQo4mY27QEfBxsA8PJn7jaxONl1tI/CcnvMrPyzATTyg== 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=s9Kkx3CRDKf7HFPgOoCuiDHQoes90ZzmiKWSoyjF3Do=; b=UcX7qO86meJQzQMKk6qQCAJXsGCN1fq23dEbkguz1JA3v00yvRIDEbQ1CrHaTWx/DsgCulfRwx8DzfUYm/jd9CZLaVRB0lCT9KtTZ5Wq0UftoblEPUAb7E0cGAF7+tfhiRBhrTf3CYr+j/vjJj03CTsu/vTVp/AwjWQJhLhZI8WOxaereYJEjiBmbMcXw9LYBpRgq+Uo6uUGlNnpu/ItAkUyl6MrNgRKd1lpPVmVuP/16zjZJiIuaW/odn8Ge6FGq6o0uYv//PWbvpFHFQQHI0LyXcN8xGW6iTPG9YxecRJtfRpUOgnc5tv6IJMDrxaNXxnpQzD6OFYYWpP5dlZRYQ== 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=s9Kkx3CRDKf7HFPgOoCuiDHQoes90ZzmiKWSoyjF3Do=; b=EoQiSteJIhIVJfJrQoIiZRfVgbHDbnYOov+9oT2x9oihCt/CLCEte3RgyYXa6k9VQufODWOwfjqDJnQTJ2UNH5Uz/atliOysFioLY+MrgHOxhWkpy2svVSM7JfI4AQ2Ia1leQLhpmh/S9kyqEdtKb8i3cKLvdGuRxOuJdq8fQwb/RnTBZOGaIqh+Df1tvWNCWIgGpxMIso9xDZltvOhQf5w0x4+T+viuR39ShJGFVC+jRcGfeidjV0i08NmnTzMsvDcol+c+BYgkKeQGuOzAyyFI5A+z1S7txsmZGNsrUUYG9diZ8A/xwsUFUnPbOb7BWzOwClEjNB8+urdW0eNSQQ== 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 v6 2/7] qemu: Introduce privateData for hostdevs Date: Fri, 30 Jan 2026 10:59:13 -0800 Message-ID: <20260130185918.4154310-3-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260130185918.4154310-1-nathanc@nvidia.com> References: <20260130185918.4154310-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0074.namprd13.prod.outlook.com (2603:10b6:a03:2c4::19) To DS2PR12MB9567.namprd12.prod.outlook.com (2603:10b6:8:27c::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PR12MB9567:EE_|SN7PR12MB7106:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ed7b742-8679-4aa0-ec3a-08de6031adf2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?d3dHK2JHK3RweHJSTEFxZWErTTI3aCtEVE9MNTZEMlVqdkRLWUdzMkdJVnZi?= =?utf-8?B?WEV3eHFjdE9RODdSU0RqRWdJVUZLMEl5bGg5VFlaNHpJVVZkUHJ5NlR2aGdk?= =?utf-8?B?STF0eStJaVd6K2M1TmR6WVcvMmhyMFdRSUsvUitlcVZQVDVlVHVxRkluK0Zs?= =?utf-8?B?VmNXUlFtMGQ1NzRKemJIUXpjZk84aHkzbVU3VjV1MlpxMjdWNXVWM25uaVVZ?= =?utf-8?B?RStLNEErZXR6Sks2NG9hN2RLZ0tORzVHcGhldVZodDNDRHF0Q0hrQ3ZHN0xs?= =?utf-8?B?b0RvU0ozZGhjRkVaK0hSMnFqRFc5UWNMT3dKQ2NQbVF2cFFuRTVIb2F5Rjhj?= =?utf-8?B?MmlEWUF4bU9nNzRJQmY5WHVLZWxBY3orKzNCd1kwSWttNjI0Rkh6aFVLTm5y?= =?utf-8?B?QzJCSExjY2ZzaW90b2RTY0RmTUw1cktLQTVWWjBIS2NDbGZDeTloc2RxS3Ay?= =?utf-8?B?K0lNWi9DbDdSY3Juby8wRlZSR05OVWhlQXd5SExtQmxlQ01WMHNHU0M1U0tl?= =?utf-8?B?blZneU10b0tHeXJjSGR6TURNa2JQZEFmQXRTcndKdFJON3VSbjlLRVZxNlVk?= =?utf-8?B?Z0k4bHRocmJxMVJOeUdOTnVKd2sxOGRJMFNvdkwzTE5YRXMzVExCb2YyZjJ4?= =?utf-8?B?b1hOdVZlWGxNQytReE55TUhweEp2QlZKQm1PUk9vN2F3MnFtYUc1UFZvTVVT?= =?utf-8?B?ZlZhSkswdHQzSkFoZGRvcGlVaXE2QzZQN2ZBbEhSSXdTNEgzbVVFdFFaT2ZD?= =?utf-8?B?RjVpRXRsWlhVMnhka1pzZWJ1T25vNituOUFTQVNQK3h0WTZMUVJPUUEyUU9Q?= =?utf-8?B?QUJjZ3RwaUNEL2FqeHF2RXh1NjNlTTFBLzVua1BVd1hHZTlHVFIzK0VwUXZh?= =?utf-8?B?ZTVOSFMrcWZuM0kyc0RJL1c2UXRtcDJrcCtFanVFWHowb3pqRTBrSzZQR1o4?= =?utf-8?B?QVJORVN5S0VSVmVweEYwamQvK0dQek1VZnZ4NXA1ak1SbzRleURlSUJyYytH?= =?utf-8?B?WDRvY1pQSkUvV0hYdCt3REwvQytXb3FzZDlvRk15eGpkL21aNnZmak0wTGgy?= =?utf-8?B?RnBCNmV6T1hkTDgrazhtL1FXcWs3a1Jlb21ja1JvNkJnK20wcVptVEFwV1d4?= =?utf-8?B?RGdWOEY1YXBHdHMvTVFsUVR1TFZpSW9RRFdaM3RUYTZoMXlFSCtMdkR4cVo0?= =?utf-8?B?bm0xRHVQOEdoRmxGR1RkZ3htei93VXNUQTVhbk1QbXZNWStSd2x5ZkdDWlB6?= =?utf-8?B?U0FHaHFucTIwWGQyc0FlTHlvdnFIZWx2b0VTZWtjYTNYYW9NRHd3MGdXZTlk?= =?utf-8?B?WlRsRHJINlQ4TTdPQ3ZNY3dkYlB3dG1makhmUUlWOXNVUFJhK0pyTTRNeEJ6?= =?utf-8?B?VmxMaDc5dTRZbGtacDRJSGxhdXVNdUlPSHJCVHpNTkNKZ2hsRlFCMURST2Nn?= =?utf-8?B?aE1JcDhjY2pmUEtoQ1E2dHlPNzd4QUtVWjV0enZwYW9ObVpSNUdJcmNZTkhN?= =?utf-8?B?QzJWKy9QY0pneUdiOGJFR3N0UTNxT0dTYUxsZEFGRVpSVFlobzVFQUwrN21O?= =?utf-8?B?YU4rWm9oVldXTE5Cc1NLZm1qMkxkRnd6OFN6OFIzTTZ3enNSQmpGcEhhUlND?= =?utf-8?B?UjBNa0lNbUx4dFdPelduYmVhWGt0b3ZmZklKL0p6djdBS2Y5OWR4YzVESGNN?= =?utf-8?B?QnhlUEZBb0loU3d2L1NJUlBpUGhXVUwyRTlTUGFnNHJGNFprK1lKYmJhQWZV?= =?utf-8?B?UWFsak9OQ2ZTOTNsYVBFME5JUDN6YnRCN01JMGJYU0VsYWVWN3g3N3RiNW5V?= =?utf-8?B?SUFHN1FBUDhzRXJKaHpYZ2hWSEpsano0cEUvb1lzOE9oVCtRRE1DSFR4eHQ5?= =?utf-8?B?Z21naGVKRjl1Q3NkT1RGR25SbHZsR3N4YmVFZVBwVWxJZkI0SkNmVThpcjQx?= =?utf-8?B?L2xZSkNHVkVpM2ZVOHNpRWxkSVNaYUJSaW1oN1IwNGZwa25paW5ScGdVeDF0?= =?utf-8?B?VVFFOEhkeUdaZjZLTHZCcU10Q0ptRk14ejVpRmFZUjVGM0J4ODNsdyt1aE1U?= =?utf-8?B?cWtzbURqbXYybkRZdE9qb2lRUHh0SThWallWbkVSajhzL3BMVmVCNmtaNU5n?= =?utf-8?Q?evK4=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)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VzdiSmQvZVROdzZ6a3p5ZmZ1NnJKTVl5bGU0bi9raStFZlk2Mkxra3h3YW91?= =?utf-8?B?QlY2a29UREhXQUh2N1NPd1lhT1piQk5QeGZPdno4UXJNZklqVDVHUGZhRkJC?= =?utf-8?B?MmpwazBlVnpCeEc0UkFhNllsYk1DbGJlSVJwOThxU2sxalh5Wk5TNzVOV3ln?= =?utf-8?B?cDZheTFNU0kyUGhDYldDYmo2Z3AveWsrU2RmeW4vT1lEWlhyMWJNc0dLaVdQ?= =?utf-8?B?Z0lRZGg2STdtQlRVbEZ0MjRLb0RGcGV1OVR4M3ZRRGEzM1RzTEJkbTFJaEpv?= =?utf-8?B?NElBRW5QOVo2Z1BYVWtBbFdKTWtUeTlUeW5ienBWNU9yRFo4c3RGTlBCenNH?= =?utf-8?B?N3h1NS84MFZpcEFRTW9xaml3b2JwZm9wZE5JVkNFYk13WmRVaXlqYTZ1N0g3?= =?utf-8?B?cG9VL0JQS3hVQzk4dHZ2aU1LYUZsMlhlUlg1SDlmM1B6d1ZVaUw4dEtzbDUy?= =?utf-8?B?amNEOE9GNWkzMi9TbFhKMDFQMXM1VE5XV2tDRWlIK2gyelFiYzVPYzBuRUlP?= =?utf-8?B?Mnp0RUlza3M4THZIR1hjQTcwR2pEcmEwZ0cyVXNKV3ZKclU4L2dTbVNPYTk0?= =?utf-8?B?WXRMdmRKUldRKzQ0aG1sOE85MkEzTnpYR285aWU5Um52cU10M2Nnek96Ujcy?= =?utf-8?B?NVI5YThGalZTWTNKY3lnckpHQzdueTduSGcxOThuVjdVMnRZNk1Wa2hVL0tl?= =?utf-8?B?STVqNG4wWDF2czc0ZTZHWC9JVE9RbGloWU9PVlpwUHlNOTZ4OTc1V2lQZ2N3?= =?utf-8?B?TUQ3MFRCRlArTVFSYU1waU5FeThlMGJjbjFpQ3pRZndrcFdvRFpaS1UyTmk5?= =?utf-8?B?TTFjUDlNN0JzRE5wSWxEUC9nZG5QbFgyNnFVbFVTaVpVeDZ2V3pWbU96QU5n?= =?utf-8?B?cEtTSWNIMEpwMmNNWTJrTitDbkF3RmpxeldHSmVpdXhQTndpVVFEZHB2UXlH?= =?utf-8?B?NHBFa01yTEJiaG1VZEZSZUlsYjBlWHYxZ09NMUdsRFNLRVF1bEw4K2NFalNY?= =?utf-8?B?SFA4eEpwMkQyem0vZW5NdkpaL2l2dkVaaXVxMkQrdTRJK3VRdVBzZURzTDBY?= =?utf-8?B?b2NZb0M5bForU3g4L0tvVnMxQW5FV21nSm1uSWhxWkZLbXRXbDRQcFpvVEtn?= =?utf-8?B?LzRsTHhUY3NMVmxXekFibmVLTjM0TWZqdWRiRVZoaEdXRXViMlIyNmlsemt0?= =?utf-8?B?VG1KS0IyUEVRMElVeU9zOE9jYlhmSXJwL0tOWTlDaWJMVVh6SnRCNDBWalVj?= =?utf-8?B?QlpmVUM0RDNxSlRwOVFZNC80ajk5TmZGNURHd1k2ZUVUYnBCR0VjMmpPdmxi?= =?utf-8?B?dC9PSG4yUW5HbURtTU1kVHF3Tk83NzFMUmdzSXhrQ3Y4bFhyK3I5Z0V5RzBL?= =?utf-8?B?WTRJMHd2dHVDdTQvWlJxOG10d0hnV1k1OUp4cng1S3lPQzNqWFIybmVSMkhx?= =?utf-8?B?QnpSZWEyY0ZzMk1SUVYzRUFMeGxJWTlsWDJNcFVmQ1lmNmNGSnRXenZ4NnRX?= =?utf-8?B?dTIyWFJuTmQyNjJZZU9OMWNXdXQyOC9Ncll5RyszSnhqMGdNMTBVM2h5TXlR?= =?utf-8?B?MnFjVG9vQWFtREZzUUpyMVRycE9UanluOXNOaXNQZE04ZGFTQ2pXZy9ybWth?= =?utf-8?B?N09PWGhzUUVPMnNiM0JZQ2VOWUdFcmhzcmNhd3hYblJGT3p3azI1MGg0RUdQ?= =?utf-8?B?S28yTU8zT3M5ZzA2UjZxNVBiMkM5cGViektyZ3JENHJldklGWml2Y3hEWEd4?= =?utf-8?B?bmoyRGJ1WVY1ampmdm9GOUp5WkY5SUZpUWtLZjFDRlEza2YyY0s2ejB1NjVV?= =?utf-8?B?U2dWQTdSNkdNOUw2Tmk1YzUxS2tya2xqcXNVZXY4RzVkNlJwNW1meEUrNE9B?= =?utf-8?B?bUdob3pnL3VCTjJqVHRaR2VyRmlkbGlXVzlKMnlxbTh5N1MrbHBXTGhwVXZT?= =?utf-8?B?c0U3bzRBNFQ5OHJvZHZ2MjdQeE1wMzJ2bWgxYmhMMElhaFJjeVgvbzZEdTRu?= =?utf-8?B?emUxRWwxRlZoV2c2dUpnQlN2UEo5SThGYnNHOHVyeWN3dDYyb3JrZDdkeUQ4?= =?utf-8?B?RGJrZkhXYW5sbVB6alFmRHZnZG11THlQM1Ira1lKbzRLMlcvM0pQdmN5WlR4?= =?utf-8?B?T1ZheXFFQVpnNzM2S01iTWx0U2lMUFp0OGdZOWpaUHZ6ZjNrU3A4Rk5lVHpI?= =?utf-8?B?bGphNnZHZkdkdFVVTGlrVzJQaEtiY0VVNHU4dUxNTXlEbXcvOERnYmZ6UHVk?= =?utf-8?B?ZjM0N3ZjampZWU5qemlsZU5tb1owUVdwQld1aTF1cGUvSEx6MTBQN0hKSFdH?= =?utf-8?B?VTJ0VXNiRndBeG14QU0vanFhQjZpNDJJZlRNT1RLZDh5L3FyOEtEQT09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ed7b742-8679-4aa0-ec3a-08de6031adf2 X-MS-Exchange-CrossTenant-AuthSource: DS2PR12MB9567.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2026 18:59:22.2277 (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: eSz9RbMr6Hf+BNHnVP6kvTTrrCfcncM/6VfZ3zezzplvgzH9L7qtnPIz8m8jum1mZc01g7hk4W1rWue8WiwUQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7106 Message-ID-Hash: 4WG46FQKYPKFFDRLMY373YCJ4R7EWLCR X-Message-ID-Hash: 4WG46FQKYPKFFDRLMY373YCJ4R7EWLCR 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: 1769799778218158500 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 9672168df9..10425b2cb1 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 486a0e7913..3366214677 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 b9bb338682..88c8416aa4 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 @@ -1175,3 +1187,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