From nobody Fri Jan 9 23:46:12 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 1767754721950607.2236795071381; Tue, 6 Jan 2026 18:58:41 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 0BCE941BCF; Tue, 6 Jan 2026 21:58:41 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 4B91343E30; Tue, 6 Jan 2026 21:50:41 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 8850E41B9E; Tue, 6 Jan 2026 21:49:52 -0500 (EST) Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012048.outbound.protection.outlook.com [40.93.195.48]) (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 0A12C41B94 for ; Tue, 6 Jan 2026 21:49:44 -0500 (EST) Received: from SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) by SN7PR12MB7977.namprd12.prod.outlook.com (2603:10b6:806:340::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 7 Jan 2026 02:49:41 +0000 Received: from SN7PR12MB6838.namprd12.prod.outlook.com ([fe80::69ae:2df4:372b:6fbc]) by SN7PR12MB6838.namprd12.prod.outlook.com ([fe80::69ae:2df4:372b:6fbc%7]) with mapi id 15.20.9499.002; Wed, 7 Jan 2026 02:49: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=-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=poLwZlbI5jvOlGFb068AppJwRzizSHk451dNkBjgfpjt0dJJkoo3/awgggIGFGgl3QoPVL0tKNZPhrRDBSuFTOSdinAJcw0PEnd29F8n4NWKzb+udcI8UmAruWghNw+gwhDH/QPZVcfqofd6tWUG7YyvecTNLol4H62+jZu74BSGp1fT6Jgw2wavHibphQdQSjExXqNsbB/0UzIkhGJXob2AVdwzLevYxMWWecQqkC0hcV3t+TZt8C5qNf8UhqiZHsj8UcEqDOusEZloQU/8/CXwW/I90Zsx75PxYF1EXLrvFwHVcyVvHeWRXpj3WumKdfa4Culbz+gzW2zrAsDacA== 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=SAIH0Nmq5K6feJcqqiwS2Bnpqa77YbaWLWgLPH0dipE=; b=RNtdX6sckDh27PEEcqJ0nvtJd0cY/cHujsg7+07yRpEk7rxqYf4gIA9IX67HW2dMORo3GwSW+nT9G2VUSb5/fsU5Lbs/oVumd2qOeqFAYlNJKwQ6Dc4SREYPEsyxpFUAHjlsLmXam1g7JDpKi+ld2JXPb80cgoxDPpqcXd5+S38NVaqwawRFhcCauz5NY2UNFNBBmCOYf3uDDWbc9DUYZ3uS4em+3wn3u1s/KKxgg4sHTGbgNuwJNTPtAfzmYZ3Iaa/e+dJT3gHB5y+bWwmAqOvIJ+3lhU2X7MPgE90lgbD7tL6j8EMjPRUMDtJzHm83/A/xkc8VrdKSZdbp1D40Xw== 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=SAIH0Nmq5K6feJcqqiwS2Bnpqa77YbaWLWgLPH0dipE=; b=GC01q7963Mb2F7LKVku9xD/EamvVuOeSdnf5Yq96zFkQTobNwdEdrtW1p96M6Jgz/n2aHwUhsOTAe8touo2ts1BG55hIBsapsZ9yimFxm7ja881ksC3w6yRGA2o3btj5DGu4PQ16Dz0hgZDalj9uWKoPY8COyQi0D+rtMQweKzsrIYa/Z+tqdXM6CgFdbMSi4SHMAY6S2fL98KXl6Wq8TkK7f88Cre0uHfAPEswet3GrGsR/4+X+8z4DNwc4lAZdbfYufCjA3xbBJUqZ8AvXDN+50gTt8SRCaDHm/Yp1oLuWEe061XgtDGWSaavK3TziGsce1WncGWtK4I0UcP97Sw== 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 v4 2/7] qemu: Introduce privateData for hostdevs Date: Tue, 6 Jan 2026 18:49:33 -0800 Message-ID: <20260107024938.461794-3-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260107024938.461794-1-nathanc@nvidia.com> References: <20260107024938.461794-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY3PR03CA0023.namprd03.prod.outlook.com (2603:10b6:a03:39a::28) To SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB6838:EE_|SN7PR12MB7977:EE_ X-MS-Office365-Filtering-Correlation-Id: 11c33a7d-8bf8-4bf6-7c0f-08de4d9767e4 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?K2hJUDBaYkJmVlNlRXMxR1VsdngzZDYzWE95ak1xOFA5cXlaWFh3NExmd0Zu?= =?utf-8?B?K2xnZnFKZlRzVXRKOEE4SXh1bjVWZE9Yd1BsbW5acWs4MU1rR3hHU3JtNXJk?= =?utf-8?B?c3ptYzJFYW1MUE42eE5aR0c3TjY5ZTNROW9ZaGZWclp6TDdTVjVSZTVSellk?= =?utf-8?B?QWxZYm9NbXRiWWpVM2dGUzFPY0xjM1BidU1BTkYxQWovbjdadHlTWWlGLzhP?= =?utf-8?B?T1JKOHE4Q0pZdDUyYTZwL3BhTkQ5MFBVQVRKcmxIVFBhTENkNTBnT29SM0Zv?= =?utf-8?B?ZXBJWGN6ZUhKZm15L3plR0hZcXFtK3N2OXJHb0ppM0ZWMSs5M1crUWJrNWNN?= =?utf-8?B?cjlaNXUvdWtOWWdVaVJTSmlpTzBIMVF1UzVQeENRSE1jUVlLMGgvSkhPeUtY?= =?utf-8?B?TFBrbGhYbGJhRmNyYTZXTU9hK2lYS0pMY0dia252TkhadjRRa2NoQTEvZjFV?= =?utf-8?B?VlFMM2UvWXk2NDdMVGR6VHNDSHZSQzVVRUUxN2RuRU9vUGxueEx0VjU2MklJ?= =?utf-8?B?bmcrU1ZteXNmRjlzeFUvUHNjb0FieHJ2ZEFKRGZnYVgzblFwaWN5VGozckVz?= =?utf-8?B?ak1iREhFS2I3SUV5eFBFcHBONmV0dklzOHE0eWIvZlZDZm1Ucy9OeUJpSXht?= =?utf-8?B?RnpQR3gzekZLbDFBZFZsVm5hQUdLaUNTU1paeEVlT2ZncTljR1JrTTM5WTZI?= =?utf-8?B?V3NLZ0t4TTgwdEJlbFBsbXI4Sndic0x6SWRnOGFhZVIrV21UUTVFNmtrakZn?= =?utf-8?B?UlN5RUF0ekpaQlgxbjhqTCtoZXA1dU9BblVVdEtQcHhxVjFtYTF5TXFhK0RJ?= =?utf-8?B?VFhzYkU2RGQ2RjZtUG9WWTQ3cFNpaHF2VmVManFhdWZBeFVvN1A1OHNtU0d3?= =?utf-8?B?d1lTUDNNTWVBSlMvc0hReEpocEdmRU4rZWNZb2FvRW9YZzg1QmVEN01aVlEz?= =?utf-8?B?MFNBc2pId09SakNrNjkwamx1STA2cVMxVkhYVXBqRzJGSDU3blJtQlFPM29r?= =?utf-8?B?Z3hDTG1uN1RJQVB1VDZBOFpVQTlRanRpeWNmS01sVkJlWkt3Yy9sclFQSXh3?= =?utf-8?B?cnhkK25rRG0ySVY2RlM0YnZGQ1lrZGQzc0tSVGgyL3BJbThUTG9CS1RWeCtC?= =?utf-8?B?NytnUzVjUHZDTFY3WlArMEVUbDlPZm1BbmVzbmZGME4xcVUxMjVnc3NPdDVQ?= =?utf-8?B?d1h1bWVXK2JVV1h3aEcrajhiUUxBTWw1TlF5eEVUQk5kRUJPRDB2UXRJUUZO?= =?utf-8?B?YVpzV2tnZ3p0S2g0NFdMZVJQZ2dBMFAyb004S0dMcE9ON3dDNkJTc09JVERU?= =?utf-8?B?VERHZVJySVhDZlhRdU4wN0dzd1FIc1UrNlZ0a21sM053SGtvc0VnRFlRUUFJ?= =?utf-8?B?cXA4TGlFNGtBeDIyK05pMmdNTHZZaUx6aWdEeGorZ3lrQ20rKy9zUy9Fd1JX?= =?utf-8?B?cUMvNHlqYjZoSzdWMjhhMlorRmovdTRHMFBlUHAzbVkxU0tMb1NtZndicHl4?= =?utf-8?B?YlUwWkJXM1IvY0RDRlExZHFVekNxdU5nR3I4T0c0V2QwVGRKNGNmYzBGakc2?= =?utf-8?B?V0EvZ1ZDUEhZaUtvQXhsVjM5TWlZUUhXRmh5TDVCbVZFWE1OZzlNSUZQbE0x?= =?utf-8?B?M2g1bEg3U2dKdm1GNnFiTjc5MWlnVk13aTFKU0w0YTdyTE1SUzJGSkJKK3VH?= =?utf-8?B?SFNDRm5yaGMzNEc0QmdRckNwNUdrcHYrSUllQmUxOWM0cVUzaFlDWlJRTjdC?= =?utf-8?B?ekk4TlRYSmoybWpINFFMbXlZNnFOSXh2bnY4MTB3NEFRd0lpYXZyZUdLVXJD?= =?utf-8?B?UVZ0bXFETm9RK01SL0ZsSFhYem1tRXRIS3VlSGtTdDAwdDhaTHpHSnFGa2tq?= =?utf-8?B?SGs3Sk9aSGYrVjJFT3pLVm85MHM3NXBoRW4xTG8rTk8xbWNLR1VWdUxma2F4?= =?utf-8?Q?RQnsoVqjDkviO+eX9tw4IifWh05FG3oS?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB6838.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?N3JrVi9pMVpWdUpIL2tGOHp1MFdUQUtBeGhhNi85V0pYUTVwZjlMUkg1ajZB?= =?utf-8?B?SmpSa3g1SEdDNUwzK0NjVEhRK1owL3RON2thcHpILzVJY2J2djRZTGJkVjhU?= =?utf-8?B?d3F0SzRUNGJXSnQzNDdCQ0dmZnFpMitiZTFoUUYyYU5vakVYcDR6UWE3SE50?= =?utf-8?B?VDFDS2V1eC9rMkpVazU2RkVGZWZEZ0ZWRGV4VWEvWUZuR0xLbllQVkhlV2RI?= =?utf-8?B?N0lpbWFnRDd6ckJ5UTNRRi85Y1RPK05nanFObHpVVU5mRXZLOTlDd2Z1ZjEv?= =?utf-8?B?Qk9WQ0ExNUpOcGRnbEEvZWlQcTlYSjdxNXJuTjZZU2xYTVpGb3RNNVcxSGVp?= =?utf-8?B?QVVMUnc5bUlhRHNkclFpUnR5WHJsdFFjbnBhY2hvd1ZKd1lncTV6cVhuS2ZM?= =?utf-8?B?ZGZIQ1JsM3c0UmlBQUJXUXpOaFFSbXhhRFQrM2NNQS9UdEdZRjRzU0pBaTJS?= =?utf-8?B?SDhlUnFQRFEvS0dRSVRIanJPTlNmNmU5MCtDR0hMcjNzRmFEd1BPbVRGcjQw?= =?utf-8?B?a0hMSHVJNlJteUUxcVpVOU9OZlNqK3Y5M2FsWFFnVEhVckZQVEhpTzBKZHVU?= =?utf-8?B?OEREYlJLTmFsL1JtSkJUU05PNmtVVHRkR3pET3dPMVpRUkhSTytFVHd5Wmly?= =?utf-8?B?c0xjSkVmaWJnbWcvTmdTL0VrQnJMcmd3ZnhzckdqZGNzUEt5aENTZUdjUUp2?= =?utf-8?B?UklUVUwreHZEOC9oOGtIUTdDcC9ZOWU2OUtvcy95WkxjeWd3cXYxUExjSmZj?= =?utf-8?B?SENXRDlCcG1oR3ZLZHdLYXNGNk5wNDlMQ3FrY291cVVwek9XSEVqTHJ4czhJ?= =?utf-8?B?SFh0L0NSUkhHeFYxa21UU0ZaSTRpU0svdXNVWC9EK214RXMvVDlUQzBkYXJ0?= =?utf-8?B?dTFJUlZRRGF5a3lWb1hUOTYzMS8zKzdDWTVMai8xZ2R3RURlbGZDb3RqWVli?= =?utf-8?B?aVNVanYxTHNOb0tNOUROVXgwMGNDMkM4SGlydkoxNTNnWGpOemc5YTE3bnlk?= =?utf-8?B?aGpCaTdyeVBnVENPZEQzTlZyRmpwUnF1MXBqZit3YUplclpSNDBnQzRCcjZR?= =?utf-8?B?SU5RcEhMUklPOVlibzI1ak90UFdSZG01MkJTZHNGMkhiSG5GaVEvU2I5OUZJ?= =?utf-8?B?ZFRabkcramJ1eXJUZ3c5KzdjRHEvQ3Z6OU5sWkppY2lkNmJOTzVwV3RzUEt3?= =?utf-8?B?aVBpcEtQeG1hZXVzR2JCejdzSEl1dk9OQnlCajNiZ3lXTUdRekEyRGxVbHJ6?= =?utf-8?B?S0UxRkNlbHhKUUw5TVNxSlNEUkFtU0YzRWdFNFZCUEFMWU5hY3l0M3dIck91?= =?utf-8?B?OTlyYkZXTzg0dDlGSkIxWEJJb0locHFSZXhVUmc4Qy9lTFowNld0OHpXNmNQ?= =?utf-8?B?VjArSlF5OHM2Tloxb0ZCS0VndTZISm5GTzV3SFV6VnZHb0hPdytBQlV6dUFI?= =?utf-8?B?eUlKeWhLQ0tEd2JnMUVxbm44eTVKb3RESTFVUUptV0VqWEg4b3oyTW1JeWs5?= =?utf-8?B?ODc1SkxpTHZGUEk5RDhIMmtnTHNiYlZJL2hGY0gzQTcwNkM5VStTb08yWXEx?= =?utf-8?B?aWdDWnZrUzZaWDlEQXk0LzM5amlBMDF2N05pQVpZWWtvVS91OW5jbVc1MUNQ?= =?utf-8?B?ODFaeWw5Vkw1b1VRQUloWjNBRDh2TzNMWFZGcHVGSjlVSHpPZzZYTkdvQVIv?= =?utf-8?B?ZlM5ekd0dnIzY1dDM25UaUQyUUljMUYrMEpHaHZ2VE04VzdLN0NiUFpBWVJ5?= =?utf-8?B?bm5xd0NVTEttM3phRTZIczhISVlmUnRIaUNzVGMrbGdoS3F5N3JxYm0yVVBZ?= =?utf-8?B?a2xIWm02alJwOCtQTGV0ZGVRVkc2clVuM0d0MjdGRkg0UW5XOEZzYm5wQ2FZ?= =?utf-8?B?Q3JRYkQwYm0wMG5VMWNob2M4SXB5ZXVrYTN5bkh6VXhLSm12Nm94VENGckVB?= =?utf-8?B?VWNlMG5QaGM2a2d0M1p1b1lhdWgxek4rN0FVelBWQUpvYXZTVm9hVnZoYk5S?= =?utf-8?B?ZlE5Z29ZQUJncVJLdlRQbDlSK3MySFFDNVl0eEZrOHMrZWR1ODlROGNIUUFs?= =?utf-8?B?c21RRkwxWUdmRjdOeFQwNklPNzg0Q2hkNGE3bnRDQ3FmYlZyYU1PdzZ0YWdP?= =?utf-8?B?SUE3a0xSQzVJUFVLV3RBbS81Ly9ReW9ydmNkeWtmZTV3ZXl5eDdwbnJFVlFP?= =?utf-8?B?c3pycGdydnI4d2JsTFNwek9ESGsyRFA3T0RLckdSYXh6RUJjVjJERVV1dVNH?= =?utf-8?B?Tkl6dTRMV3VBNjIydGhGRlZ3NGdSU01uWDd1ejFWdUJTYU1sT1dXelFvT0xa?= =?utf-8?B?NDRHL1pUUUxoanBScVg4QWVQMk5QM2h3SVVZL0VLTWVHYm9hejltZz09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11c33a7d-8bf8-4bf6-7c0f-08de4d9767e4 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB6838.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 02:49:41.2549 (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: 8tzQZR45035UyZk3vJ0pd3oDvnHVW92jfZYY8R4kK0Knk0bZRNMl0SAuqOZ2WPL4+yQhgubYGMIN+u1QlM3AkQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7977 Message-ID-Hash: KQTO4KH2HFRFR6SJGGSCI3LOXJ5YYIV3 X-Message-ID-Hash: KQTO4KH2HFRFR6SJGGSCI3LOXJ5YYIV3 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: 1767754724756158500 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 | 18 +++++++++++++++ src/vbox/vbox_common.c | 2 +- tests/virhostdevtest.c | 2 +- 10 files changed, 79 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 541dad5bdc..f950f7c75d 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 @@ -13678,7 +13687,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 cb35ff06bd..8f53ed96c0 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 b2ff0edcf2..e62302736b 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..e91435c062 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,9 @@ qemuDomainCheckCPU(virArch arch, bool qemuDomainMachineSupportsFloppy(const char *machine, virQEMUCaps *qemuCaps); + +virObject * +qemuDomainHostdevPrivateNew(void); + +int +qemuProcessOpenVfioFds(virDomainObj *vm); 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