From nobody Fri Jan 9 23:48: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 1767754415516782.072154510277; Tue, 6 Jan 2026 18:53:35 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 228E643E36; Tue, 6 Jan 2026 21:53:33 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id EA52843DEF; Tue, 6 Jan 2026 21:50:11 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 36E5641B4C; Tue, 6 Jan 2026 21:49:48 -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 D063941B68 for ; Tue, 6 Jan 2026 21:49:43 -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:40 +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:40 +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=BUiRJSQvO9e/PA4/Y96jeUPUpmQRvMK8O2APjPdETQQI/JCigobHCgXozBYAP43y6F9vm/h6+jCD4Z+db+rqk0iWlLSd4wbT5r4IJk2MhTpD90gCBD/kV/j9LpiI8/9qwMI5e9jl4XDO6e5HMuHZWp39j9FKfWBlebFt5VAryI1EtMVSZ3CxpFliUDn+INdcWIwN5fKS+WKoJdUJPonGoI6i6DfLBGr+hmns4YN2xKnzmOU3gcTYj+SetKO/PVsdFgLJyuLL6Pn93MJm0crpg2SwOd9Ct6Wc+i2r87dCEmAsSIp7+VSIdF3aputE9HOoixV8SAMcAMJyYr4yOJyY5Q== 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=3wTtO2ZA/pOH9zJ39JBubt/USt+35sAkxzBAJQmccJQ=; b=lLxMv0hazrupcx3lC+lamHz7LaVdJcbwHWt8vcs5kst0UDPmO5d1XRNtd0VLmuxj9UiieXNw1CwUr2ZKqKyq5btOPlmlNT7a9AOwe8/gU40avQBcpKAgTk3jkOQ63PhhTsphwmQGtSdanZ8jjnTYkfT5gMbaZJkZolvn74lLuqAh8iU17pI3JsJ96GYJZjf+xEG9cGVulCOA4GWvHP7NT4USWfP91Llov9n1EVeToo9HEVSsY+Q6tnaYRRPzL1cgX6QHVrZNY1CRPVkP+DpkxmYXkNnXyq7OxXe+ryjEhliCkq5taigJb1shdLi3D2uqpuw96HZfpIcYrmErXMjeoQ== 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=3wTtO2ZA/pOH9zJ39JBubt/USt+35sAkxzBAJQmccJQ=; b=PNzOhLQ11Py6rtxeNY/XcjAb7B7KEwfnPkTWjXRMLBrTASpDRQC6eJZZYbpycCRn6ryqVGICqy0sWpPXFjpw0lXwBNq6y84FUoELVKDdsejFPaBKaoziDm5a/E0VQIegcNyj82vypHNjKV4u0dV5C4cp4eZSh5cYCTXC/4r26BGMtYhyY9we7rOFhrkHztX7aEFTalShD695MMgpJ+r+8L4GmDCij2wn1x1UKVFo4WdMny3tdrQVaiioan4EzaJExbol2jSqhLINjXyR5XKyRP0l4TRnbvtwOtN8qjhkP9WtbLuaMwbMDGlloSbygVOgVnB+SXQMzaD8Q4eRIrBRoA== 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 1/7] qemu: Implement support for associating iommufd to hostdev Date: Tue, 6 Jan 2026 18:49:32 -0800 Message-ID: <20260107024938.461794-2-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: BY3PR03CA0014.namprd03.prod.outlook.com (2603:10b6:a03:39a::19) 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: 364dc6e4-fbb7-4ec1-9e8e-08de4d97674c 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?aTVtWklaYzFEbmZLUnN1N1dvYTRheEhYT2I3cG5XcllvL3hlbWdYRUlPSFpT?= =?utf-8?B?VXh2ejdHOWpFVWZ3dlhoTTNvOWJHa2lWSnd6NU10a3ZSNG9TRGtIN1lkU3Ir?= =?utf-8?B?SHZCS3lhUFgwaHpBVzJDMllWMGtkVVBWRUhXeUtoOUNKSisxT3lZR1J3MlI3?= =?utf-8?B?REdZWWV1V1lVekpDVHIzak1VaE5taE9yZjVQNmNTTTI1QlZteC8va2JveFNl?= =?utf-8?B?dXJiRWhTaFNuYTNpMTh1ZnY3eHU2Q25LZHpPOExBK0RlaEhHMDRhcjBtcS85?= =?utf-8?B?bjVxU0l0d2pIaUNnZEYyLzdzV3JQTEVvOE12VlQwZVZNdFhLN1pEMlBwMVVF?= =?utf-8?B?SEJYL3gxSjBVNmk3ajlrSzBKanRKcGtIWS9yQzB2cys2eUh0RTFoODRycUEx?= =?utf-8?B?ejFEZmZGdFF1bWRNc0grYmFzUlJUZ2J6L2o1VitCbW9ZMFlzSEhvVThiV09h?= =?utf-8?B?cVJmV2RDR2xvSEFyUnhtWEVwczAxY0lMeDJvUS8vNFZZV2V0NnNkVHpkWXdK?= =?utf-8?B?b2VreC9LWi8wNWUzZmRXRG4rSHVIMjFsUkliN3k5S3Y2TmpFYVJvVXlKVlFX?= =?utf-8?B?RW5pTGJteVpCdUNGbGZGaExHUE1tS2ZlRVpVb3ZiQnE0N05XcnpuWnNKL3Vr?= =?utf-8?B?TEJHS1N4TkY2L1ZQZEVHS3ZTOWRTUmZYVndzOE16d3QrMlVSRk96d0t0emU0?= =?utf-8?B?UStLSWJ4MmtldjRtNFlhRWZXL3ZGMlRwWFUyZEhhRmFJa1A4N0dWOHNtRXdB?= =?utf-8?B?T1NFUHBJSGdQdnRLbEFJRzllaUxET1FOemw0SXFzbkhXZXY0WGR4NGVQVEYr?= =?utf-8?B?WGw2bHgzMWxicW11bE85WjFMandIS1V0emMwM1ZtSHRyY3lDWnJPNHp3MTNF?= =?utf-8?B?YjlUR24yVk9DN3FibExzWk90VjNORCsvM0VZZnNRYTV6MUgvNTVIM0dzQlNo?= =?utf-8?B?NjJvNzNMU05YS0xKdnJFYWo1SUJyOWNsU3RqUkNwekg0WjRFazk5YmZUQUts?= =?utf-8?B?Y3JDYWVVTU5QTTZMY0RVNnd6b1ZNMXNYV1hmMzBpdjVHTkEybGNKQWdFUVZY?= =?utf-8?B?VzJGNHB6TDEzY2k5dDVwbkZOeE1yRHg0bEFpUG9Ib08rSWhEVHBqQXh6T1J6?= =?utf-8?B?UzdsL1JlRElwK2hZRVVnMk8rVkx3dE5EYzdkWldXUDJXaUIwK1RiRVpkRFlI?= =?utf-8?B?bGJLK0N2VDZSa25pb1BCNjJRbXUxNnNHN3BsNFFPbVMrZGZlUlo5NVhtd0J3?= =?utf-8?B?NXhBbmZRSVJ6ZmtjZG5lQ0dxNWVDRzhmY1dDMjgwK2FqeVh6Y2JvUFJpRUk5?= =?utf-8?B?a0w4N2F4MzFkVzdqQXBra1NUNjdTWnIvUHBiT0xOUklzUW9LbFI4SlVCbXVX?= =?utf-8?B?ekhXVHZPZG5sa2I3cU05NEJNMnphck15OXdPbCtuVGJYSDNMS3ZDa3EyZElV?= =?utf-8?B?WWNkdXFmek9mTW4ybmcyaHhsYTUwTGFwQWxFamFXWU9QSnZpNzJZelBkbkY0?= =?utf-8?B?L0ZHYUsrK2dSQVFQU0tGZ2dyS05FYjFRTGw0aU4xMFdET1V1ZG1KeTlYQnlq?= =?utf-8?B?ZHhxYkFHWERiTC9QRmQ5R3ppVDllVVJBaGFDeTFsQmxjQ25KNk94MyswY1VY?= =?utf-8?B?VXFXODluaFpNWDZoSlhrdzBIQlFKR0taMjRIdUdVeWprbTMxMjUzdlJTcll5?= =?utf-8?B?L2RkTUZzWnRhTThOSmw0TUNSM2Vmd0ZmcUMrMHpYWnJSVzFteDQza0NIbUhV?= =?utf-8?B?TFNBeWJKWVNQKzQ2RTQ5aVlBRmxCdTAzYUNEZ0ZIaFFuQ1ZyaGF2LzJWMU9F?= =?utf-8?B?WVFzY01MWlF1bkFQaWJCWklkQkt6ZFdpQ2lTd2wwUXZNa0VXWWFsd1NOdmNi?= =?utf-8?B?U09UZURCT1d2cmRha3VzdHdPSlRjSmJCLzdMdTdhUnN2M1VIK1h3QjIyeWEw?= =?utf-8?Q?xpvsqwBMGQcY8c58IaM/L+ioJnVxTgFl?= 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?ajgwdEs3RkdQU3pyMEdyWHNKTzF5RncwWEh1RlZYNThlcTVVdnZHaTFGT1ky?= =?utf-8?B?SnRQQlRxVkFCTzRVeXcwQTdnQlF4MTRSMzZNNWZDRk5qWDQ3UE9LQjRRNTFy?= =?utf-8?B?a1hCNmRCeE5GOWtVWGFZZ2I3M0hHT1FEZFNtQ1RuTEZFMFdlZi92WEhXZmpP?= =?utf-8?B?ZTRja1YrQ3dGN2RUUlJET3BxMGdrUnhLa21QUnEra3VwbWZIRXUwVk9OeEQ2?= =?utf-8?B?ZytCY1l2eFlkaDE1M0hGUnJ4ajBmUnFkN1J3UDVQRTdVWlV4TEhMcVhueEhT?= =?utf-8?B?MGJKR2VqemVZczlxZW93bW9haldlSkIrdjNqUFlvczAxbUw1cVdGT2E2Lzkx?= =?utf-8?B?RHd2UmR1SHdmU2NUdzJtRThBdVc4UTZhUWlTT0xxM25BamxseTJoYnZ2L2No?= =?utf-8?B?NG5ld3FoMkNGYlk2ZVIwSkwxM3VEUDRJNGhHQ0xoOU9JR2RPckhvaVlyNUhV?= =?utf-8?B?ZHBaWStEMHY1Vm9VM2c5ZzY2MG1vYW1pTXBBQm1SMWdHcHVlVThxU1R1UGFh?= =?utf-8?B?ZW9hUjVvbEZvZjBRV1FDaDNrYzRZQVBURTB5MzJyS0R5OFZ1UkhtUWpnVmhq?= =?utf-8?B?dEVQNWQ2enNIRTZtTEl4YU95K0NZelZ6MUpFQ1BEejR4Y0lFWnc5ejlxb3lv?= =?utf-8?B?UGVnZjJJeUExY1dNQWZYdEFDSERkcElYcWlJa05nSXZQWkN4Q0RraDRFNjIz?= =?utf-8?B?RG43VVVpRUtZZkpSanBsNWp5SlQ3emExNGowK2lYMkxZWFlRelNRRW1DUUpu?= =?utf-8?B?dCtVbXdLRUt1OFpSZU8yMWpIb1FVMVo2YkpaMjVMeGliUHB6dE51cUQva1gy?= =?utf-8?B?YUVhS3M3S3lrUjZ0aWwzVVcvdjdaRGwvblB1M0o2MS85Sm9oTnRkK2JYTitO?= =?utf-8?B?M2dURktYR0xtbkZkOW5nRTNqRmNVeXk0bWlaU0YxVk5TWnlzTWNJTk5rUzM5?= =?utf-8?B?LzBEclYzelJlSFc4Ky8zSERDaElBNWxYQ3ZlRlIxWWdXUnZBbk1BQmVJMTJL?= =?utf-8?B?bjkxSzd4ZEVhT1dFSzMrZWwvZEFRaDRXdE5ld2hhU0laQTExRllxdlVqd1gy?= =?utf-8?B?OHZqalhwMUtzM0VUREo0UDUyLzVRWUFRUlQ4RUEwVWlpc0NjTWpwK1p4dGo1?= =?utf-8?B?Y284d3FnVzFuREN6dVBCR2V2dllJRkxwS3luNEpZNzhtZndnak5EUkV2UzVX?= =?utf-8?B?WS9uOCtmOU54TWQ0RTgwY0ZXaHNLdG5JSHFpanI4eWJzVldlYVk3SWsybng0?= =?utf-8?B?VUF0TDd1TUNYdjJNVzRST29kNm5YTVI5VytZM3QvY05jT01DOXBDZERlaHly?= =?utf-8?B?aHRPdFVDMURpeTZQVDFkcXo3cEJSdDc0NVhrNEJmY0dnM2tWUmlIdjU0SHlC?= =?utf-8?B?L1lHejNHTkZ1N1RMb1Y5eU53djdkQit3eiszTWptT0NITFhoYnp1V2c1UGI5?= =?utf-8?B?MTVib1NDRzl4R2pDSHhOODNheko1MmVOSFVRV09WMVNJUWtxMmZJTU1WVU4r?= =?utf-8?B?WjJTUGVFYVRmOHRhRjU4ZHlITElUWWxla3pMOUMzaVZkbU9xUVBoOHZNSitm?= =?utf-8?B?N2J6UTExN0ZJVEdFMThId1hXQ09Xc3FTa0hLMmZwT3Y2aHFEWkpsRXlhYWZi?= =?utf-8?B?SUZGRG5XS0NJNFZqTXVwK0w1NFIyclJhWmpyZlVHbVI1TFBIeWhSbGRVWEZX?= =?utf-8?B?bDM2dXZnME5pM2xrRjB3ZTVia0ZrcjNjVTJrclJjY2RqWG9uaExweURlZzls?= =?utf-8?B?dzRMSk1YR3NzT3o3cm9jenc3M01zWU00cnUvbzFxdytHQldCUGpOL3BiTTRz?= =?utf-8?B?RzZGZTZVRm1VcFBYa2lTSldlMGlUc084alI3Sm5mL2tMYXdNZHFGNlNyRVAv?= =?utf-8?B?Ym1scEd2ZmJ4TkpCaE85dWdobkFzc0ZkaUpzeDR5bnFwNGovTGIrN3FUdHJ6?= =?utf-8?B?U1Y0YTk4U1JNQ1B6N1hQRWNMMVFGL0d2QlVvcDhvRFRXS0RIV0tpdzJaRWgr?= =?utf-8?B?RjVQcEcwL0JLaTZCSWJUSlRtaHBTOE1wTXZSR3VpUWRaMTNzZzFsbStwUVlz?= =?utf-8?B?N0pQVld1SkI0QXVDT25nQkpuNUVNVDB0NFFvUTFrRmpMSzIyUktSK3dnK2tZ?= =?utf-8?B?TE8wWHp1ODA2dkpWSlRqbGJLbHhvdkl0S3loM2U4UmxOSjIzbVRveXdySVVI?= =?utf-8?B?ZngrUzNVUU1kaVdyK28xZjNMcFFPZkhRTDliTHQ4cTFCWFJya0VCYVk3djRx?= =?utf-8?B?cnlUOTROY2d2OW0vblp0TjNHdm9zYmlMQ0pRSDJpL3ZsYTAvdnUyN1VoWEdr?= =?utf-8?B?UkJnQVA1dnBJQm9yK0JVRXJUVS9hTW9zSFJ5eHlOcTJGQWVzTWRpUT09?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 364dc6e4-fbb7-4ec1-9e8e-08de4d97674c 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:40.2516 (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: bQ2s/Svm45koql1KXX0ycfKaG6RptWXvMoL2LlQsFA9ueeKaMmsJWReq3+HzaKS1bBZ9mUUw+UBdJqji2KPIOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7977 Message-ID-Hash: I3W5XKZCVTP7PSESUR2UTX2QSS2IDBQL X-Message-ID-Hash: I3W5XKZCVTP7PSESUR2UTX2QSS2IDBQL 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: 1767754417774158500 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 | 7 +++++ 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, 70 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 1467fc7e10..c8f827d460 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -4907,6 +4907,13 @@ or: found is "problematic" in some way, the generic vfio-pci driver similarly be forced. =20 + The ```` element's ``iommufd`` attribute is used to specify + using the iommufd interface to propagate DMA mappings to the kernel, + instead of VFIO alone. When the attribute is present, an iommufd + object will be created by the resulting qemu command. Libvirt will + open the /dev/iommu and VFIO device cdev, passing the associated + file descriptor numbers to the qemu command. + (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 98229d7cf9..98e4469c25 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4760,6 +4760,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 @@ -4793,6 +4794,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, @@ -4801,6 +4805,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 @@ -5320,6 +5325,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) @@ -10932,6 +10975,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