From nobody Sat Feb 7 11:27:17 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 1766111086111759.816027201382; Thu, 18 Dec 2025 18:24:46 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 3E4ED418DA; Thu, 18 Dec 2025 21:24:43 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E0F1941BB2; Thu, 18 Dec 2025 21:19:55 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id EC63541848; Thu, 18 Dec 2025 21:19:32 -0500 (EST) Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010028.outbound.protection.outlook.com [52.101.56.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (3072 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 33BF941858 for ; Thu, 18 Dec 2025 21:19:31 -0500 (EST) Received: from SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) by CH1PPFC908D89D1.namprd12.prod.outlook.com (2603:10b6:61f:fc00::623) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.8; Fri, 19 Dec 2025 02:19:29 +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.9434.001; Fri, 19 Dec 2025 02:19:29 +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=RFjCLFFGKt9DC/bZ1P+FJ4PyyeNsMM5HbpP4PbQWKAbZ2uBMPW2zdiKx/CgSGhLtiN+Dvj1I95cNcs8ymn+U+B//BkSQcFzPL4hBFyoOVlkJwu7k6hfBUWeZ0pAdTMcCRswVsRh9t1Ry7FfI5azUI9GdniEVJw4/9/ZM3LtBQoDRhgOkvoZkvVaNmlCZAOeXtJ6IiaooSkH2XURDivK9qbjbyIzTibL48TMgd8JZ+gbL5afgkASwNwqdnvI8iNkadFZ4BtKHrXqtvPKyP7rAh9X+twIc2qm5xSwcoacA4GZhEW+vNP3ACNFejD3lO+WHZgXjINr09Ux+anCbKiaJkQ== 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=ufXzTRPLM7mTzWJSnFe4nxeWN8DHAhZ7pwVr8eEmcmFBxG2prGYiYmVcZbY7B+UAxiuq4aoG5cTipbrU3nqUSGawd7hVbxMI7X+nbgYsHUM/y6HExaMIbg0+ym3F5CFnnFVVKkNLbYCLdy8U2IxVe8UKwg54yCcpG8ESa4DuWOMN63N6M8yIrl++0KGavNSLYU77hY8TIxgUkz6FgL/1GTyI0uiBE2d/n+Frblj0/O2Qloyfcei5jvnc+x9aLBRGzODjs3uFYhND+zh3tnt20Hkvo/4AEkQ7oDpW4MUKVdatmIq30jgqyvddz/GExppp2KXLE3Jx/NCqYADy/wd7Uw== 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=SIG5HyO0E0PUfsolfb0pZyxgV4IAWd4i+YRoUsHUY4Tj73bAOlbkB8bzexbA++KMS2MKYph5W639xfB8KetMnKNxHBPSq5tx3+Y7E2zc0wQWB63kWTFw9r907kSPJwute5PUXNEdJvxij4P44szTZKAO5L3LpDQ9e6fhGTh5yFD7SREDwcewH9CblpVoi9N7Q4chiEDeMAZSB+IXiB9uDyE002dmgatey2Xf+VWJMb4emQCv7W9fmvjtll1mju5iIkniBQzPQaB37zNDFnWD5FoqJoD38SrVDQzef4tXm762FGU8xMx5Ayl18U9rWyfZCxnULsNxWuTSIRuOgHK2yQ== 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 v3 2/7] qemu: Introduce privateData for hostdevs Date: Thu, 18 Dec 2025 18:19:20 -0800 Message-ID: <20251219021925.1864433-3-nathanc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251219021925.1864433-1-nathanc@nvidia.com> References: <20251219021925.1864433-1-nathanc@nvidia.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0281.namprd03.prod.outlook.com (2603:10b6:a03:39e::16) To SN7PR12MB6838.namprd12.prod.outlook.com (2603:10b6:806:266::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB6838:EE_|CH1PPFC908D89D1:EE_ X-MS-Office365-Filtering-Correlation-Id: eac6e7a4-aae0-46fe-bbd2-08de3ea509d4 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: =?utf-8?B?WlVPRUM0c2EwbE1xVmk5VGYxcThDOGNIS0w5ZVVNa09JVXVaMDRoaWVSRHBK?= =?utf-8?B?UnM2VFdQQzNSV21xVUtrbnU4aXZodGgzMTNDTnJnaHVkWi9PaEo2cU5RWHZE?= =?utf-8?B?bWY5ZXB1d2F3VFptbUoyQytQVlV2YXVjUDROKytiemx3OU5RR0tFOWh0ZGhq?= =?utf-8?B?K2QyNkJpbEpsSXhtL0t1SU13Nk1LNVFyTlhncFdBT1g5bnR0T05sYk5BWjYr?= =?utf-8?B?WUlGZUFQUHE4MDJvUFdVTkV0dk1qb0d5ak9Hb2w0WVZwSDlTNXdsQnZkTVMr?= =?utf-8?B?bjJrSUh3NXJtUmtENXQvM0JVWVFCMHNPZHY3UXBNN1lzRy90TEdjREpkVlIr?= =?utf-8?B?MnRMZlVmMzU5N2Z4Ujk4RlV5eEJOL0t3TC83ZVdrZlVSdnBJbjJQdklpOVpl?= =?utf-8?B?QjZIcWJ1MDA3ZTBZTHBYVU1lbllLOU10dnNqSWQrRWM4aEQzVWd1NG1UNloy?= =?utf-8?B?MVJZcFBvWEE4YmFiZUdXVG5GM2FMakNqREN4OCtHWEEzbExrU2FlaC9SWHFq?= =?utf-8?B?dHpZcnVHTVJHV0c4SEx4NWRzOHA2dGpNWlRSRHd4NUJvbUR2b1BnMGV5d0xz?= =?utf-8?B?MmpKZy8zVnhUbm1kWWloZ3N0N2UrdHY4SlM1L0pHS3lEVHJnTWorcmVFUHha?= =?utf-8?B?Y0l2TTJxYktWNStrNjh3NjM3ZjhBZjdZd1FMMEdHS2ZsWVErMjNWWk5YRFVi?= =?utf-8?B?ZG1tai9odkYxaVlCTDhEdzVPTHpXcDArZ0tRVDJhbG1FQlNZY04xWWZObEJ1?= =?utf-8?B?OG05dUVVU0dJTkNiMm9adHVCd2FYWVNUVkFoOFhZSThvOUNQUFZHdW1YeDBo?= =?utf-8?B?QUYvUGYxbWFobEJKV0ZONy9GSG56SFE1MnpxN2dpVmZRQytWNDNrYi80dzVV?= =?utf-8?B?aEFkSkIrRVUwN29RbVBrbkxINVpDSzN3Z3huWXRuN0NuV29XTVJQSGY1MHN2?= =?utf-8?B?bG5Ya1Z2eTgralJ6eVNVYzRMd1IxYTdrN2laR3hRQTZBNmJaQndKcnlycHVP?= =?utf-8?B?VUQ1czB3Qm9GNzZ0ME9YeEM1ejRsWVhyWlhkK09SZDMxS01HcS83S2lUQ0VI?= =?utf-8?B?UG9JQXc2MlNUUFRzYlBqV1RVenBnNnB3T2tTQllmRTZ6VjFqenNDcTl2SnBD?= =?utf-8?B?aGFoUjhTZkJjbjNDQ096NnppNDBYaTFUcEZUR0tmc01xZ3NpbmNSd09kNVhZ?= =?utf-8?B?R1RBT0kwNnRMamsxanZ3S0JCempHQTBxekVVWFN5cm45TlRyQWRjM1ZCL3I5?= =?utf-8?B?OWJHVkUwdWRuMXk3K1ZYTS9mZzZoMjFXTHMyM1ZHditHOUNmb3dsbGJUZFl2?= =?utf-8?B?T0lhMWdOTUdzckkzZW5NdlNySm50SWlPcmU1OTdCanBoc0hsOE8zbGpkUnBN?= =?utf-8?B?czk4UmNhNS9xU3FPbTErRCtyOUxMZTlEdVZuWjBVOUh6QnV4TUgySWpCeEVD?= =?utf-8?B?NWJrZzRkeVphUTJVd21OYmtoNjI3a1J2eCtzQUlKUi9qSWNNTHpLb0loL284?= =?utf-8?B?ZzBZRDNGalh6bVhOTVhxaGdCZ0U3MkVuNnE4eE1yeDNSK3grNm1lZ1cwU3dL?= =?utf-8?B?aTZMUWJDL1JtTm9XSGZ1Z3l3NFVBRjgwMXYrMllEeFRaQ3VDeExMdEVxeGZG?= =?utf-8?B?UStIamEzMUprMjBCcjlvMGE4cmxUbTZGVWRDbklSU3ZHUy9jdFgzVmV0TU0x?= =?utf-8?B?Y05RZURMcWxBbktFbk90bmtHQitlZk5pOFg4eTFlOS9TWDFRTmk0MzhGMjJ2?= =?utf-8?B?QUJwOEdDS0djZG8vc3YwUFU4NjZ2YitOOHIrT0Uzd3VicHZLMHFkaXpNTnBN?= =?utf-8?B?cWpMTEJuV1NWZ1BnRURwUG5RdE5uRldPcGFIb0lSYlo5dlF4MkRUdWhBUmVm?= =?utf-8?B?c0MvQjVNRytuRUt0TmxPaDRKZ3p0Njg0cDZUcnJjSFFhSHYzbWJoZ1NJdis4?= =?utf-8?Q?5l2wCR0z/bR1/zTgYY4p+ox3KUJy6YdS?= 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)(1800799024)(366016)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cit1U2U0eEpnbHh4U3N0ZmpYQ29aWm43cGdJWWJoNWJ4KzQwaS92R084dTlX?= =?utf-8?B?Y0JTRkRJMFN5SXVOL05qMkxabXR2OU1NUVdwSEN3NTIwRGc0Y3NRZ0EyMkFu?= =?utf-8?B?cFljUklsUXBtSVRRcy9Mc3JEMFliQ3dtRjNpS3pNK3NDNXloN3E0R05adDda?= =?utf-8?B?TXFISXFReTQvQmVWUVlNSm1pVWhQdi8zejlRU2ROQU53Z2daQjhsRVNCbHk1?= =?utf-8?B?NU1HaTE3MWRSTGx2N0hPUytXUkllc2dPZ1ZQeUtnVW5TK2hTT2E4Rnd2aTYz?= =?utf-8?B?cFhrcTk5azZXY3B0M2pxU1B0aXo1MkcvTUZ0UG0vM3dqc0o2OEpEYlJiWTRa?= =?utf-8?B?MDM2Ni9wUzNNTW9QYjZPa2hiUDgvY2tyUnc3bldRRHIwVGlVNkF0eHg5eWhI?= =?utf-8?B?QXpsNU5FN2pmeVNPYUw1cXhhdWZ4b0FCQ1pseHB2NW9XNlYrSjJlT1lnN2ls?= =?utf-8?B?WlFQZ01OVFpIMmo5aUpLKytSUkt2clBHVU1uaWRobVVlL3pyY0NhdGNBU3pE?= =?utf-8?B?Y1RQY25tUS9yWXc3TmNCRllLNldUSzU0Vlc3bHdjaTk3UjcwZmgxeG0vVlBN?= =?utf-8?B?UEFYT3ZWVS9WS2RnTmI5cmNSdURrWlJUQ0tWMjRMUStETzlsU2NRdis1Tkxm?= =?utf-8?B?ZzdZNE1GeVNDaVRSQXZnNlNMVDNKdWQ5T1ZIb0xoaEFMUk5ROVR5SUUxSzZC?= =?utf-8?B?S3pSYmM5T09zcTFLaGwwdm5QNG84emMxRnN3RzFzM3RrV3VBMi9HVWxweXc3?= =?utf-8?B?T1lrSGNaalcwaTBnREkzVlZxR28rZkpadit5bDdmbHhoZlduUXhKb0FyN09B?= =?utf-8?B?T3gxeWpaeWZjQncwWHZLc1JYTFpzNWRkc1lsS2RJUWhQUFZsZ2lGaDZCN2Zs?= =?utf-8?B?cEFweWRGTDlOSGVRdG9YczA3TzZPbHZkOUlkUlZWYk1IV3RIRU8rWURZd0FD?= =?utf-8?B?aXlTQjBybUYvL3hOSEhiMjcvVG9FVTR0NTNkQnFmWG9SeXBRd1hsMjBTVUps?= =?utf-8?B?SHpTdVc5Z2F4dkFhNXlSb0pYZEpoT0tiS3MvL0drT0JiMmZvM2J0QitTbU5B?= =?utf-8?B?eGlTRktFSi9MaUdBbzlHWjVvSEpZaTVOcW1PMnhIRHJTdVZCR053ZzN2dit0?= =?utf-8?B?c2lCWkVZcHl3dUs4c0ljYktRUlVmcmQzTGxDMWc2UUZXZkVyRG9EUTRWbUxI?= =?utf-8?B?S2E0MDFSVmhHbVZTUWxTeDBYRGZ0Qkg0dENMV28vL0RWall3eXJVaUJ0MmNp?= =?utf-8?B?VXR5UWpFbWpwcTVxcFFMWlZjZVRSWmd3clVVV0NsMGlZS0hMVWlENGpmUW9U?= =?utf-8?B?WjJEUGZlb2svZHRMT0I0NmlLdEM1NXhvbXkxa2VsMEVpUGRLN2tNOHJMd1Nt?= =?utf-8?B?dDRtL0lGODZBcTBvK1R4cjZ6dVZUeHpyaVV6RlkrRmh0QXpKT083cWNPVXE0?= =?utf-8?B?NGZyNUxNdEgxVG9saGVPWDlPdXk0TWp2V2d2cG9TbjZoSGQ5WmNuczdqNjk0?= =?utf-8?B?b0VTMW1tTWNGVHRvSE9nZktxQjcxSVdpSDdJMlBWWGVVYWhUU2htc2NFNHM2?= =?utf-8?B?UlpyUk5pOGZqZi9OUExZL1FjQjlqOVdEQ2RrOWYreUJodmlZTUlwVHZseUpl?= =?utf-8?B?eUtqeWpqampvUVlrVGVxMkhoMElaZHJQQklYYjhna3pTcGdubkg3UVZzWHBH?= =?utf-8?B?N1lCL2ZQQ1M0TExRTHg4SVpVaVdOUjlvMnc4OVhKczJPOCswdEYycnBSd2Fj?= =?utf-8?B?VGc3TTdka25VYy9ldFN6azlheXB3TndFb3Z2TDJpVjNzQ2JBRnkxbFRuKzdT?= =?utf-8?B?RmF2R0hHWWNPbnFKVVlvNEpVbDgxTnZ2bWdLYi9FUi9ua1E0LytEQ0lnOTlC?= =?utf-8?B?bEs1NldNeExJNzJ1bFpPcFBSc1ZPK1dYa0t5Y1lNL0pQOVdSdW5PN2JKQUtu?= =?utf-8?B?d3RFZ0pPUGtnL0p3S0VRQ2I1NG1XOGNIUEo3NVdabEg2NmQ4ekNjd0l4MTJ2?= =?utf-8?B?MTZhVEo1anNEYitrUGFBOG1BRzZIMFovcHYvbnRjbnRUUmI2OHowcVdRZTJ2?= =?utf-8?B?U0N5TlNiVVV5emFMc1BBUmk4MzZzSDUvcExmOE5iLzVqSE1FVmk3Qms2RHFk?= =?utf-8?Q?VAaJeit8djduEoTmkX5FGYhQg?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: eac6e7a4-aae0-46fe-bbd2-08de3ea509d4 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB6838.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2025 02:19:29.0220 (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: 4fw2jg9p9iL66YDI5LdWFVgsIO84ZuxAZf78QIQTRBzA8HUj9maeBUJBS9S+GNmDhhkD4e3lTCJc5/0kG8/s4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPFC908D89D1 Message-ID-Hash: GP63SBAGTGNI6GMXOZ33DOE3ZRQMHKC5 X-Message-ID-Hash: GP63SBAGTGNI6GMXOZ33DOE3ZRQMHKC5 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: 1766111089315158500 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