From nobody Mon Feb 2 07:28:48 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 1769799717791389.9287195610076; Fri, 30 Jan 2026 11:01:57 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 8ED1E41A0E; Fri, 30 Jan 2026 14:01:57 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id A73AC41B59; Fri, 30 Jan 2026 13:59:37 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 942B23F870; Fri, 30 Jan 2026 13:59:27 -0500 (EST) Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010039.outbound.protection.outlook.com [52.101.56.39]) (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 4C7BA3F878 for ; Fri, 30 Jan 2026 13:59:26 -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:21 +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:21 +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=Z3+uHXoKDXwn3oJOONXvoBXEsjhZihdfNeWBrEO7iTwq6fBiE0wBSZABStxRQnv+2ys2XrfgG4/CvxSS4dLSxUPP9qWCJXl0bMPYJbQavmanyAlTUwpjb67aZMmK9lshnVfwZLCpZXaD9/BFXtur3l4OBWMKrr5HmxEwTdou11EqrOMk0Lb2waM9iBE5HlBPenLUxjtHmeczxBUrQ7sU61q9C0glYojyt52gch7rCca6m31TC1d1cNvWdgfVQKJOfLrvTHwCEVH0eqWY5/D+eclz/Vx1qlsnvuBa7Shc+/ALlPz/8ONscUZI0QzCMajELu8ez5dodpkD/gyClF4Bbg== 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=/75/67k305sTDMgiXMGx+i4LTodbTeFakdaw4ayVrEc=; b=K39uzvVQW65xz77FwjwmHFC0/u3dwXsvamGmwhYouyzenHEs8QWwrBHCRQbbAUBy4xIM0kUPjh100noR5XKzeWa8l6o77oFEjHZeJp1CPlbjmrcMxa0PBP8dOkOL9i+FFIW/8DhyZrIeQPvKz6qEh8RCwUlhO7XVeTW3g9BdMG3v7FftPrRGdOEBwNKtVf1CQIGUL6Z5FWBbLERu3L1pGSFpFJBdz57CkCP9OVCxxGo300cESoze9Tp7J0pXfaXavNKk1jIgMq9OQgtJMU0cj5g/jBOQ++MVAk91Mv0ah0MZeLb5hN7hSoA1CYEKZkrW3VWh/pF8oSdGaL7vf3x3rg== 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=/75/67k305sTDMgiXMGx+i4LTodbTeFakdaw4ayVrEc=; b=UVZE8O64QRPPFRval3GbnO3beqt6hhnNLz7Ko3wSWj2mY742cdRIYyKjS9iEmjuyAsFk7yPMHoBcgp8DwXbpvQb7fsFtnB6/GI8hjAPDpGTG6v5JEbazlmonOkE1E9ByYazFjpwQJQM3WPh4KYNBSLFdwzcMx0Acr9t7NOMPt3WmLHKzbkJkyGJooBySzNd/lKggthXPU1//tCo5hmXbTm3/GjiQZedIvpHxwVfD4/b4o6kv7lG4kPI4WS/Q9jAAsQwIUYUilRM1PlPMor7u5eV15tl1LKQ2fuKTaE2W5QeiaNNu6Ku3+YZIi+UZyEWiT9iu2c9Iv30shsNwx6b3UQ== 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 1/7] qemu: Implement support for associating iommufd to hostdev Date: Fri, 30 Jan 2026 10:59:12 -0800 Message-ID: <20260130185918.4154310-2-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: SJ0PR05CA0066.namprd05.prod.outlook.com (2603:10b6:a03:332::11) 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: fe71bae5-a506-436f-aa43-08de6031ad43 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?VjRWMWU0RFluOTBtM05CKzdsYUdidi8wSlJwcFp4ZlpUbGRWaTF0WnY2OHoz?= =?utf-8?B?QUdxZk5zaTE3MWhKbzBacExSOFZHT25ta0dMVno0NjkvSzd4ZkpHdFFkY25Y?= =?utf-8?B?UzNBV2JVYk1LNnZsWFpITUsyS2hLVlZncjF3ejJWdU5Ha0JJRW9iVnB4SlZj?= =?utf-8?B?K1FxVHphMHVCVHQ4K3ZkLzF4Z1M5RUp0aFk5NUpHbUJrYitqaG1BOGdRdFVO?= =?utf-8?B?eElJOWIwZnFaUVE5OWVtY2NDZDVUNmZPdWhKTmFtaHVHUXhzcEhkQm5WNk1G?= =?utf-8?B?NVROMXJna0YzU21JOXlFMGp0QW9pSXhVb25RRzVzbkZLUElsdHV6ZTFBdkFT?= =?utf-8?B?d2dtRjB2QWZQZTVBOG43d0dEdmRqZzVjemkrV1ZOMnpvekpLNGdKSzUzSFNh?= =?utf-8?B?TzNoRC9Tak9qdXo1a3JwVWRWTWp5K2k4NkRqMXVrS2tNeXBIZ1Q3blQ2QnBC?= =?utf-8?B?YW1TS2ZXa3NCQmVqWm9YMkxVcElYczdLWllFT0tBVHVYMlpaemNXcU9YOXBw?= =?utf-8?B?b3UrWUJ1Znk1bmdhdzZOSmxkVDI0RUpIQkRxSTErVnllMFZwQ1ZwR3hQSVNn?= =?utf-8?B?eVBIODAxdmsyYUYwd29rOW5iRDFybWlIZjRQTWtnRXNzVmtjOWM0aEUrYVdS?= =?utf-8?B?Wk1mK0tFcU11MlkyZDhzY2Qzak9CYVpJZTlWWUoxOW9CL21iZldNQTgyRmlH?= =?utf-8?B?aVExUmg2UEZ3TTVVRzFnaTlHY2ZSdlNkalRpdFlsdzcwamk3Nm5WK0tXWHdG?= =?utf-8?B?TlZUN0Rsb0o1NmdObnBCK3YyY0t4cDgzSHA0LzdPK1NlYmtGU05TVWZJaCt0?= =?utf-8?B?TkFXbGZaVjVYNjJ3SUVWQ2J6R1p4UTRmT1ZSYlJ6OW45UVJJMklVekdnSm8r?= =?utf-8?B?Nnk1ajA4Y0hwaks3elV6UXRqcjNaOElKSlk0NWxIT2t2Y2RWaTUwdUg4dGI4?= =?utf-8?B?ajBwY1R4TFRKbG1CVlkwc293ZnNJYXZWaURwYnl0Q0tVQUdCZlN6SzlKdVZZ?= =?utf-8?B?ODd0NFdxT3BaOVBYYlJSazR2WjdOVWt6dGYxZ0FSZTNmbG0xdCtDbDcxS29E?= =?utf-8?B?dzhzaDRKVWUwWlFSMnNMZ0gwMVJUK3VDOVBVbU1UdTBUZGVxN2w4clhCakFs?= =?utf-8?B?QlRXMjNOeEFQS0pnVmtPY3ltOUFBSkFSTDRrV2hQZ1lOdjE0aUtFakRVdFQz?= =?utf-8?B?d21sUGZaak8xRkljTVZJRndoWG1WcFhsYS8zbmZRUEY5VG45Q2lEY00rQmFm?= =?utf-8?B?TWo1M1NPRnlYZnYreU5xM2VrODZvc0dib1BESEV4M1JGZURnUlljaXhyU3F4?= =?utf-8?B?UjdQYnZyS002eTMrMVQ2U2dlRFZhajNGZTNYb255NTQyWTBuZVRvdm5xc29z?= =?utf-8?B?aXBvcVVOUW4rNHh0VTVXK3ROVWJteFk5cmg5QmxMYmVWbWo1QVd4anZYbGVB?= =?utf-8?B?NUNJZmpCUlhaaW0vcjFIQlNhY2RHQXlQQjhjLzVhNysxVHdEOXZYaDAvZmYr?= =?utf-8?B?bHYxcjZ6d1krcndMdGNSK2wxc290OGtRWmhlZ3JMa05VZ3U1N1lheWdVRWpY?= =?utf-8?B?NGdHU2VzNm1hMENzK1pYY0VveFpRZi9SMVp5NDdvaDl3NGdIaG11Nkk3WWdG?= =?utf-8?B?Sk92K0M0SzZzd1UxODNyT2ZIeDMzeS9CeWdMUDRaTEZYejVpaW5OdE8weTgw?= =?utf-8?B?T0N2cW5NZlBsZkFWOGlqaVVlZ1NyUFJsRzVJQTFTMlpJTWNDSExhSE1US3Zh?= =?utf-8?B?Z2xoYS9lek9mRnVLc0NaTXVmcjFNMHdZSHdlWERJYTY1WFIvTVRoRlJueXJz?= =?utf-8?B?SUY4Q1lMVGovaExWL2UyNG0zQklKUFF3NUt2akVUMGFKVHl3LzBrS3dhcEc2?= =?utf-8?B?Y3Z0NGhPcjdpNi9kMTVwQ1JpcUdQblpjNmg0WDJIMjVtamdmWERvb2pIN1hm?= =?utf-8?B?SkRrVXlwc3BNdWVMZmVYNXBGRkNMdnhXTnhsaWhzTnFvQ3VCUkIrTmpodGN1?= =?utf-8?B?N1pKVFNOR2ZsTWorNHQ5T094emRPUE5KUHpIZVV3dHhLaWhRbVNOazQ1MkVs?= =?utf-8?B?Z0JwdStRZGpuNm9lTk51dFpkcGhScUh5VmEzVkdNQUM4cmUraG9XTW5mYmpl?= =?utf-8?Q?2RHM=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?TGlrRzVoYXVtYSthQmtxSk9uUGtnYnk0WlpyZ1VJQTdyVVRlQnZlcXVWYWtI?= =?utf-8?B?US9aNUZNNjMzY1RzcC9WWEJCQWJ2dG9rTmNmbm9rYUNnNmQza1gvRGw1VmFV?= =?utf-8?B?dlJaNFpYRVphYWlCOEtQWW92dmU3Z05IWWllU0xWSU9UNzRkS2Y5MWdtU09K?= =?utf-8?B?dk1qVDJWUVBxRmhCTlgrYWtGc3ZjSkVlOVNPMzlUSVhKVkxuaWJob1hBOHhJ?= =?utf-8?B?ZDBjaHBlb3RDYklHaWV6Mzl0ZVVaL2t0dC9wczVIOUZ5Q3BCbk4zbElhMXN5?= =?utf-8?B?b2Y5d3FSRjNTYUJBREdZZFh6YXhQaTVaamp2eGtjWDYrNzc1azNOVjR1VVlS?= =?utf-8?B?SXpXandRWmZhYnZNR3l1ZW4rSkNLbTA5VGhPeDMwNVJPZWVtS2pvSGFrYVBW?= =?utf-8?B?UlkxTWhMYXRHeVd6SzNvdDNXNlhSTTNSRFJ4azh0VUhzZ1JQdnZSd013V09z?= =?utf-8?B?d0xBL25KeWIzdFBLbXdyTG5EVzI2VWRZQnJkU3V6cEM1NktrOCtWUTNMTW5q?= =?utf-8?B?RjRVbVE4elBYMjlDNGhscUx6Q0wxN3NDRkZRSEVHZDNrbFU4MGxISm1pYmM4?= =?utf-8?B?NkhJdUVsY2xNRSsxakU3NXFNZHEzdWFwM1dIRVZWUlp3VFIwdEd2ck5UU3du?= =?utf-8?B?dFEvUlN2am80TUxuR1RkSk0vVFVVNTFoaENiWDZzRVpsUVdGUXFhbjkvZGt4?= =?utf-8?B?akZna21sbG44MHhscEdTMlU4R2RLdHg3YURWcjY3ZnMvMHVjaWdGS3NlVkJ2?= =?utf-8?B?dWU2bGJOcG9VZ0dkb2YwdUJGZGgrMDVqZ3pwSEhNWEl4RDhmRUdKYlpMK3Br?= =?utf-8?B?L2YrK2tpWkt2T24vcFRGaXBPajNjUDBBQ3JjaFFXKzhIWWZHOHBYRnVWN3BQ?= =?utf-8?B?NFRhVU13cmhUMVFPTndEby9iU3g3bzBiTTlaSU11ZlEwL3ZPYkNqaHc0WW9B?= =?utf-8?B?T1FkNXdvVm9YblJ1MWh0SW1KZXl4Zm85Mksrd3VLZ0lwbHdKM2lSZkFXYm93?= =?utf-8?B?TXdMM25pZVNGNDJhekNJQ0pOR0ZMZkZESjVGSWRJYUk2NTQvMG85cWZ6RTJX?= =?utf-8?B?Z0pOdHpzMFVHem1QbFNaeXNPYVhpRnp1ckZrUFk3YVpVcFJ4TkJNeGhNYytD?= =?utf-8?B?RjlMeUdiVERFNWF5S2IwYy9SeFBCci9abFpacEtKVjNLUUsvdUY4Z0kzaGty?= =?utf-8?B?Uis3YkpqT2F2SjFWSkJrSU0wVDdkZXVpWHpBZGpXa01UNytWWHdaOStvNEdK?= =?utf-8?B?Vk1tTVkwK0xqQXBId3dXUGNnSjJXd3VQV0tzY3BYMXJqLzRSRkRaOXJzVWVr?= =?utf-8?B?MTlYeG9vVmM4Tk1LY09QV2NhbHVkcHRmajZZZkY5MGx6aVpCcjA2LzBNWlVG?= =?utf-8?B?TDM1bVNsWnFJVk1IS1EvSWl5RVpiRjU4RE85dHBrWE82RklrelhUVU5FY0d1?= =?utf-8?B?QmROT25xMkNKQUg5VFRXOGJoQlVHQVB1N210MlpTUkpGSUNlWjZaRlZkUTAy?= =?utf-8?B?elNNRGhUNUxkaTNXSm5qUElPK1d1RGxtQlA4YVQ4d2NnbnJuVHBaZjFuRU9n?= =?utf-8?B?cHNVd1hqeHNnbEdHUUd4M0pVSHNhS2NHUHI1czJVVzh0Y2V2Q3RlSmVZM3pS?= =?utf-8?B?MmxSb3lDSURIR3VYYkxDeGF3cGlMaXlUV3hRM1BMZkZvUFByNndSMmdtdmZt?= =?utf-8?B?dWVZOXpZNHlVOFZza3ZpbkkzWGdlNkZyV2dpMEc3ekN3d3M0OHpYUllwZFFX?= =?utf-8?B?TlI0UmVVU1BEN1lMQjRmUUNiZmdXQzFSaTFETTV1S1NXNEhCL1Q4NFYrNE0y?= =?utf-8?B?SnRYQmU2a0c3bDA3YUpnV1dMTFd6YitOYkRQVGR2bWZ4aWc2aE41Rkk3S3hL?= =?utf-8?B?YzEyRU00Yi80MFdqV1dkZmVUOXFKLzFkUnFGQU10eE1RVVVBUm9CWmhnMTdl?= =?utf-8?B?SzhKYy9RczdaRCs1YStmV3FKSGdiWWxVRm1kZ3NGSFlsNnJxN3ZSTU5zSmtj?= =?utf-8?B?cWJHdW44ekJNMElGeGo1YmtMR0greDNzbk1DaTUvdG40T1RlbUFHM3VDNXVG?= =?utf-8?B?bFpPMXBXN2NkSi90Nnk4Vi9rcHRSdWVISTZERFZZRFR3aEUxZitadDZYZlpM?= =?utf-8?B?cFY3WXlocVd4c2JCNnhCbTZrMWxocVRVa090RmRaU1IwL0NwditESGhPRmJK?= =?utf-8?B?YXRVeGxJUS9FdTBDdWdGZVhKdjZ4c21yaWJsVVZ1VjRSVy94aWNGc21jZEpz?= =?utf-8?B?cHowbzY3V1haYWlpQ1hJeUNkSWhaaENEWVpoQTBMVUtoL0hseG1lTVNPeUVv?= =?utf-8?B?L2tMVEUvNVJxakpUclJ0b0dJR05aaUFodTlabXQ1N2lVVVBrWUdjZz09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe71bae5-a506-436f-aa43-08de6031ad43 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:21.0621 (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: ddDvR+BhnKsWARmPfYp+wQUOYFC6uMRZwGpmScB+ruy3ScqmfgJ+9NIpPFq3h4XXzVJ0DXHj3DKl2eEtlcrGIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7106 Message-ID-Hash: JGJHQV4G4YH2TCGIK6FSLYTIWDW5LCCP X-Message-ID-Hash: JGJHQV4G4YH2TCGIK6FSLYTIWDW5LCCP 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: 1769799719630158500 From: Nathan Chen Implement a new iommufd attribute under hostdevs' PCI subsystem driver that can be used to specify associated iommufd object when launching a qemu VM. Signed-off-by: J=C3=A1n Tomko Signed-off-by: Nathan Chen --- docs/formatdomain.rst | 6 +++++ src/conf/device_conf.c | 11 ++++++++ src/conf/device_conf.h | 1 + src/conf/schemas/basictypes.rng | 5 ++++ src/qemu/qemu_command.c | 46 +++++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 04ef319a73..f85a113344 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4920,6 +4920,12 @@ or: found is "problematic" in some way, the generic vfio-pci driver similarly be forced. =20 + :since:`Since 12.1.0 (QEMU and KVM only)`, the ``iommufd`` element + can be used to enable IOMMUFD backend for VFIO device. This + provides an interface to propagate DMA mappings to kernel for + assigned devices. Libvirt will open the /dev/iommu and VFIO device + cdev and pass associated file descriptors to QEMU. + (Note: :since:`Since 1.0.5`, the ``name`` attribute has been described to be used to select the type of PCI device assignment ("vfio", "kvm", or "xen"), but those values have been mostly diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index c278b81652..d68232a4f4 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -67,6 +67,11 @@ virDeviceHostdevPCIDriverInfoParseXML(xmlNodePtr node, return -1; } =20 + if (virXMLPropTristateBool(node, "iommufd", + VIR_XML_PROP_NONE, + &driver->iommufd) < 0) + return -1; + driver->model =3D virXMLPropString(node, "model"); return 0; } @@ -93,6 +98,12 @@ virDeviceHostdevPCIDriverInfoFormat(virBuffer *buf, =20 virBufferEscapeString(&driverAttrBuf, " model=3D'%s'", driver->model); =20 + if (driver->iommufd =3D=3D VIR_TRISTATE_BOOL_YES) { + virBufferAddLit(&driverAttrBuf, " iommufd=3D'yes'"); + } else if (driver->iommufd =3D=3D VIR_TRISTATE_BOOL_NO) { + virBufferAddLit(&driverAttrBuf, " iommufd=3D'no'"); + } + virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL); return 0; } diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index e570f51824..116b959143 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -47,6 +47,7 @@ VIR_ENUM_DECL(virDeviceHostdevPCIDriverName); struct _virDeviceHostdevPCIDriverInfo { virDeviceHostdevPCIDriverName name; char *model; + virTristateBool iommufd; }; =20 typedef enum { diff --git a/src/conf/schemas/basictypes.rng b/src/conf/schemas/basictypes.= rng index 5689170fad..381e0ac24f 100644 --- a/src/conf/schemas/basictypes.rng +++ b/src/conf/schemas/basictypes.rng @@ -673,6 +673,11 @@ + + + + + diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index e81efdfde7..fb09c678f3 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4761,6 +4761,7 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, g_autofree char *host =3D virPCIDeviceAddressAsString(&pcisrc->addr); const char *failover_pair_id =3D NULL; const char *driver =3D NULL; + const char *iommufdId =3D NULL; /* 'ramfb' property must be omitted unless it's to be enabled */ bool ramfb =3D pcisrc->ramfb =3D=3D VIR_TRISTATE_SWITCH_ON; =20 @@ -4794,6 +4795,9 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, teaming->persistent) failover_pair_id =3D teaming->persistent; =20 + if (pcisrc->driver.iommufd =3D=3D VIR_TRISTATE_BOOL_YES) + iommufdId =3D "iommufd0"; + if (virJSONValueObjectAdd(&props, "s:driver", driver, "s:host", host, @@ -4802,6 +4806,7 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def, "S:failover_pair_id", failover_pair_id, "S:display", qemuOnOffAuto(pcisrc->display), "B:ramfb", ramfb, + "S:iommufd", iommufdId, NULL) < 0) return NULL; =20 @@ -5321,6 +5326,44 @@ qemuBuildHostdevCommandLine(virCommand *cmd, } =20 =20 +static int +qemuBuildIOMMUFDCommandLine(virCommand *cmd, + const virDomainDef *def) +{ + size_t i; + + for (i =3D 0; i < def->nhostdevs; i++) { + virDomainHostdevDef *hostdev =3D def->hostdevs[i]; + virDomainHostdevSubsys *subsys =3D &hostdev->source.subsys; + g_autoptr(virJSONValue) props =3D NULL; + + if (hostdev->mode !=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + continue; + + if (subsys->type !=3D VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) + continue; + + if (hostdev->info->type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNAS= SIGNED) + continue; + + if (subsys->u.pci.driver.iommufd !=3D VIR_TRISTATE_BOOL_YES) + continue; + + if (qemuMonitorCreateObjectProps(&props, "iommufd", + "iommufd0", + NULL) < 0) + return -1; + + if (qemuBuildObjectCommandlineFromJSON(cmd, props) < 0) + return -1; + + break; + } + + return 0; +} + + static int qemuBuildMonitorCommandLine(virCommand *cmd, qemuDomainObjPrivate *priv) @@ -10933,6 +10976,9 @@ qemuBuildCommandLine(virDomainObj *vm, if (qemuBuildRedirdevCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 + if (qemuBuildIOMMUFDCommandLine(cmd, def) < 0) + return NULL; + if (qemuBuildHostdevCommandLine(cmd, def, qemuCaps) < 0) return NULL; =20 --=20 2.43.0