From nobody Fri Jan 9 08:28:53 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 1766111331066262.0704636208179; Thu, 18 Dec 2025 18:28:51 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id A7EB041927; Thu, 18 Dec 2025 21:28:49 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id F2C7243E90; Thu, 18 Dec 2025 21:20:07 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id A04B441A9F; Thu, 18 Dec 2025 21:19:44 -0500 (EST) Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010067.outbound.protection.outlook.com [52.101.193.67]) (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 2018141870 for ; Thu, 18 Dec 2025 21:19:36 -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:32 +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:32 +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=T7TqyPyw3H/Pv4btVQCFdZEQQd3HMxiAVpVlNXLLLnXf5ZF9Psg/Wj8SS+UhwVjImEdx6zbm+E9KE46+Oi8Y1GSgZ9dFVJOUk17SjZO9g/MgGIjdd3jHjm7u7VYWfSh2Lwwa9Fy8xX7QPBsjKP9SfsFcLla/af+KjKpjNbbxeXU+CHM57f3O4OLiJhfpzw/r/U65Kx5xXxGyQiAjkujiOaJZWD7LKBGKuj3MNtvCK5XmLJOo9Wc/+2o3ViC7ld5Gxh0XxqJ7TTKxe/Esl/DHEX/XNxqpJf6J3+MiLznitSCeDUCeArKvuoLl8MXMtmNiva9MIz18zDRcQ2Qv3aQGbA== 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=qnTi6MvRHgc2ISHP4A48Sy7w0jCDd7VTo9aHEala0VU=; b=VNaWhBwl429USz4q/zOp/2pK2psOGbG9lch9ad32uZc5qwv4LONGVXLM86XK+rJ/WHwT6BN3IMZDGFD8DM7HiC9bqzRJsrFoyWUjfy05WaoG8NZXC0m3/xMUqplJ9H6/SxIUN0A9VqwYfUgsvWrmMEns6qh2jCGKCqZmlvakIDp5MAQNEgAh0Qkbnhkemc6ITQP2TjUBwyRC8l3Cr5zdTAr8G8aiEo1gGnZLBZaOhQlpyUG7u5SdT+ViqFTzO64IK/DIpkPKjJ5tqCWijl3NBCZ3QKRV/onebV9C8ZujZLo3EvXXnSFFKkrs8B1MXKa1aG0SdphKZKH2WisqZo3pag== 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=qnTi6MvRHgc2ISHP4A48Sy7w0jCDd7VTo9aHEala0VU=; b=Rnb+CfDoxpx916Jg0281ehK3fnttdEQ5CUtWbdraPJpMmUopc25rN9B/TaNcRPYJjdW38VHRdOI506JQtCcWgRQjcp+iTPnTENXywN4q0CKmiuhvRnvauI9qTkMEf2PuwtTiTXnTiVVJWk95Yz11GCu1CfIImow8cUJWjEVOf8cQzMLEV62gijO/qDyVJqfcdZgOM4xDxzTr5PvHNGlFHiWJeaxQwp+ZQTYkqJgF/3Sjo1MtVxo48ucXbJhO+5/y+Sr0Fn8RWawxZYdEXUGrbjfeNJTLUxH8m8slHFkedR0yPoRHHReysNkvrEKI7NzKn2WLgOoquKJxfMHrSdiIkQ== 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 5/7] qemu: Set per-process memory accounting for iommufd Date: Thu, 18 Dec 2025 18:19:23 -0800 Message-ID: <20251219021925.1864433-6-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-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BY5PR16CA0030.namprd16.prod.outlook.com (2603:10b6:a03:1a0::43) 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: 910c1591-413e-4fda-8604-08de3ea50baf 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: =?us-ascii?Q?hP4EypuGhOuumk9TWqMhRDcUMCjiLDE66VSuaeHRHIzUlWjceBSF63X1dJuj?= =?us-ascii?Q?bDoASFQq0Itw8E1MmaXaqvPu9B6HCy0wzjYb0iittw9/KogbirvYw2+IuUDW?= =?us-ascii?Q?kAVEDZcMRwJZNbGENQiwRAfw86DYQzLtl9zcqBeX8dYUWIbJld/ZFmjwq2sX?= =?us-ascii?Q?pH4+T6S1hzkGycOoqUVn26KPRtbucM06VJTO9BbAdICXQOG1f6rY6JpHdU0b?= =?us-ascii?Q?l8KQiaxuItirPpZZzzPZfJUmG8ZCoR4OXJAty2jFoi3Rkhd7x640HGKSJx69?= =?us-ascii?Q?2XnJWEVI+/zOn37QaLINeW40zOWtk21k2HqUuWjn1uKMaxpnlPx2MmxvH9bY?= =?us-ascii?Q?L9plqz8f/6ghsOUxG1vysFLIpou9X/yrYv4W27vMcJ7S6xQAlmJb+UO1dPvo?= =?us-ascii?Q?dH0/2rHSDxIK3ccyNILrAESta6hoBCZJ1gdiJnX6xO0Giz/OoBxX7pBuRNyu?= =?us-ascii?Q?Jss8bQlXEsFoqQk9IgvygBIZkO/VXVZlh9wzLKWdRb2fHZYWsFZ/DaA1B0RS?= =?us-ascii?Q?B4CUcq9qAl+Kb42v/A8mGHgJhJTp9lEiDGsLygoRLg5I/YrvzsXa1yvDC6Zu?= =?us-ascii?Q?kV0PeG+jMCVPYwlznTbrdqjnzLqx031ApVZb9wguDiTZcplcPUEOUFpWv8Oi?= =?us-ascii?Q?39orVFn8u3CpCJKfs7yUrodmiYEDuvM5rF8iUO7GgtvVkZAg5FQ7t6Yq9id9?= =?us-ascii?Q?lZu8LDnYHyySqsKBPFZZXtozyN1BqN6CDzwh0JyqDiVUkUhtyH/Cs4fZGIxG?= =?us-ascii?Q?DF3Pdnbv685h9ikxj44v6WdQkbHFqlbWGrEQvtwH4yIHS6tUIS0SCNMXXjX3?= =?us-ascii?Q?uul/yuilBQcktG7UNnepOpF4jMv5mSxMRxfvTQcrFKXkkHeDMpPhujPz81AC?= =?us-ascii?Q?SgJUdF286lMKHWr9rlYYaOBi1woK24+KOlOC94+YuDwp15bfUsNd7S1mjW8K?= =?us-ascii?Q?LuH67yY3K5w2d+C+rzmNikfwdF3oY2WnvpwjZIsBbgRgLE7Q5TH6J1+RTcNL?= =?us-ascii?Q?ZA0jHHd+B6f4xXcvEGReSwOmPFp+Z8C3F5QXb/yPOxpgJ6wiGmna6NbP5svz?= =?us-ascii?Q?lP+2zyb8tUrWfIaopO3MlvwzW5GOkVb5vj15Ud2Yep1wvemt0H6B+cJwmXlp?= =?us-ascii?Q?qqiBxHdiBnARcp/Psld5uEkrk5s9UTyaNjd7yxi1pqHTd+BtOvhKtLyHbL68?= =?us-ascii?Q?0m1c9114wtnxnuMkZl/tQmNEseSJxTWcq7NyR950ecDmG7aiSiSuT780ib9x?= =?us-ascii?Q?CXnYP13RKfsxnmac4xFMneploqw6kml10OsgcyJj90Tj+vHkHsAAdRdqIykF?= =?us-ascii?Q?tn1XQfYItcC1+6mu3hMCj08r4tK3k5oof9hrrmib8ALAWha2A++Sie2S/FA1?= =?us-ascii?Q?0vD6mzrPaf3k077qeU/0W1bMvrpAY3FQPEjd9NIZgcErd6O8OebPZ8jvI3eZ?= =?us-ascii?Q?qg6TImqcVGfIliAJzJEM8metHTfgdfec1zirkGnGoUwvXgDgzD0Tbg=3D=3D?= 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: =?us-ascii?Q?hcQdOqghG0UIWLuuNcTWVtob/eKIagobTvRAT6rZ7ZvZu5tnGF79sw5oAL2U?= =?us-ascii?Q?r5snH9NbENDC6ivUJCNbre3N/7Pqfldn6Kwp6J2fB6ngf/K6jkZJe7hhL2qQ?= =?us-ascii?Q?ZLAaK5J1E9TzIASjVVXzVSP0+KNwigJUkK5rzvqpzNXORBQ36MZL4XdO7Vbd?= =?us-ascii?Q?I4Vqouyh1pqGdq2te71HKtpuMC9WKiQU5CdbTYIUj2uP1Cu4Ifg6sAYD6wsP?= =?us-ascii?Q?MFOlqJ/YfEYPxG4O3CoBFdBe7sryRwLCZQenc2E4OKNgGcO5PsoJQJSoeD2M?= =?us-ascii?Q?JEqNngeEg2NJbL8/SaJ6KboMjtIeH/Gy47cY2zLYWloaZ4OAEx8g2aM8nQd2?= =?us-ascii?Q?WuI1AnBh/u+PJg9n9Bl4xM2PVMn5sh6JOFHtDnHMlUAnh8aNUT3ewLmtR6hf?= =?us-ascii?Q?64AfEXyPNyDyEe/QZ2XXPwhQNxaI8gfbLCntDS/bwD6TBSWwbad11gJNyTk8?= =?us-ascii?Q?Ro9TReMkp+bKyXvRqY/wE9xrKf6CkPgn6IshrwFj3dGajUTN/XMYtV559v94?= =?us-ascii?Q?pTMlAMY3dBMZf5r6iodHBKlwZ5xOVu32Xae3dA90LJxISevaX86RzsRsZiHg?= =?us-ascii?Q?QAxR5AMD7qZtYOYVbifSqbKRotFyBWT1JmA7A8Imfc8pMFN3UpsAgZ/bV4f5?= =?us-ascii?Q?s5mv4imVRr0brZXyVtBk22gBZdp/3jtHrzkCQUF7BD2MQCcd+kNS+QW79X+y?= =?us-ascii?Q?rjrk+kfGx3hPeaYYhM8lyqj9dMmbf4VjAluJ1FVcNfR/M/7HHN05zU57evQd?= =?us-ascii?Q?yQJqQw4YVmSH1Rk0+Ub/ggVesssP1Ezwu4Rv/9NVKIjTwWhfGJjHYGo9XEpa?= =?us-ascii?Q?q7PRa1kfkI51QhvTXUXdnfIgCkvW6uvs493dhGCxE7UyqaFm4cSH4apLzuzE?= =?us-ascii?Q?TIbfWk7zI6g2zAN0WRzS+lQbU8aFo2AQ7LZJWrmxeU+H+j5LjzCy4gYXpwAZ?= =?us-ascii?Q?oXCFKK8e5dtHJ0JGg0JuoQd2t1wbA3XPdvB47Bes9s4QAkbJxbjED34VjyBF?= =?us-ascii?Q?h79ekKFKe9P3Rkp8IgymdZu8ykNOcjUsqlL6fl6tuYatxh+6WXTAq07Q2Iw7?= =?us-ascii?Q?I+gwfNVImUHCEn5hwQcQhXJYIFaqvUw7f2733ovX5/ILfj0jKx2HRn1ddvyW?= =?us-ascii?Q?HwumdZresCQSbFWGGk95G8KvKIO4cwapHUU+XIjUDsvag8OWqvBf2NFhua5Z?= =?us-ascii?Q?1gTX/zGuzlb5/CfmoOAH5SUyaIPiLEto7kuOrDUK5kEck0VkN74WtFB2EUUH?= =?us-ascii?Q?xwd9Acc0bgnjBGzIEI5yWUhuBf3dE4VB+Cz3Pk7z4PP6y5LG4pQWvVMjohzc?= =?us-ascii?Q?AnWOl+62iA1/6Lk1g8HyypL9OEVo6bYF7BcjA3+oD71uAiu6IpiTTt/EsPje?= =?us-ascii?Q?HJF8q0ZNYbiR3drpW/WqjwRblV3pjI9V0C21luEXvse1IOPCRf3NjhgYDdJ5?= =?us-ascii?Q?hLoIvZwCbgt0ZtF0mA2zebnjPprrtc57nxxPqpPtSsFd6HoK/ofcBpVW8zww?= =?us-ascii?Q?BZmCHCKIdzkqR6cueqJBYt9wsW1839cgBK5f/tOikBMkU+fUASvv9nELS5ye?= =?us-ascii?Q?/tfGMSWn3V+gId4LTk0JCjjkyJ2vtlCNE1ZQi/f/?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 910c1591-413e-4fda-8604-08de3ea50baf 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:32.0696 (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: Q0AMs8hVMcnXhkeOd0NujOC5Y2MjfHSNw/posr1WwfnVKPZm19JJ+Yufsx0ownboETERFMNMfmkAzr1zGEN1KQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPFC908D89D1 Message-ID-Hash: VHZFLNNRXVEWPOY33ISU463A4LAD5TSP X-Message-ID-Hash: VHZFLNNRXVEWPOY33ISU463A4LAD5TSP 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: 1766111332016158500 Content-Type: text/plain; charset="utf-8" From: Nathan Chen Integrate and use the IOMMU_OPTION_RLIMIT_MODE ioctl to set per-process memory accounting for iommufd. This prevents ENOMEM errors from the default per-user memory accounting when multiple VMs under the libvirt-qemu user have their pinned memory summed and checked against a per-process RLIMIT_MEMLOCK limit. Signed-off-by: Nathan Chen --- po/POTFILES | 1 + src/libvirt_private.syms | 3 ++ src/qemu/qemu_process.c | 7 ++++ src/util/meson.build | 1 + src/util/viriommufd.c | 89 ++++++++++++++++++++++++++++++++++++++++ src/util/viriommufd.h | 23 +++++++++++ 6 files changed, 124 insertions(+) create mode 100644 src/util/viriommufd.c create mode 100644 src/util/viriommufd.h diff --git a/po/POTFILES b/po/POTFILES index f0aad35c8c..c78d2b8000 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -303,6 +303,7 @@ src/util/virhostuptime.c src/util/viridentity.c src/util/virinhibitor.c src/util/virinitctl.c +src/util/viriommufd.c src/util/viriscsi.c src/util/virjson.c src/util/virlease.c diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ed2b0d381e..e2a7a16347 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2652,6 +2652,9 @@ virInhibitorRelease; virInitctlFifos; virInitctlSetRunLevel; =20 +# util/viriommufd.h +virIOMMUFDSetRLimitMode; + # util/viriscsi.h virISCSIConnectionLogin; virISCSIConnectionLogout; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 8863be2cb6..db56720f3d 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -104,6 +104,7 @@ #include "backup_conf.h" #include "storage_file_probe.h" #include "virpci.h" +#include "viriommufd.h" =20 #include "logging/log_manager.h" #include "logging/log_protocol.h" @@ -10392,6 +10393,12 @@ qemuProcessOpenIommuFd(virDomainObj *vm) return -1; } =20 + /* Set per-process memory accounting */ + if (virIOMMUFDSetRLimitMode(fd, true) < 0) { + VIR_FORCE_CLOSE(fd); + return -1; + } + VIR_DEBUG("Opened IOMMU FD %d for domain %s", fd, vm->def->name); return fd; } diff --git a/src/util/meson.build b/src/util/meson.build index 4950a795cc..9fb0aa0fe7 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -46,6 +46,7 @@ util_sources =3D [ 'viridentity.c', 'virinhibitor.c', 'virinitctl.c', + 'viriommufd.c', 'viriscsi.c', 'virjson.c', 'virkeycode.c', diff --git a/src/util/viriommufd.c b/src/util/viriommufd.c new file mode 100644 index 0000000000..163ac632ba --- /dev/null +++ b/src/util/viriommufd.c @@ -0,0 +1,89 @@ +#include + +#include "viriommufd.h" +#include "virlog.h" +#include "virerror.h" + +#include +#include + +#define VIR_FROM_THIS VIR_FROM_NONE + +#define IOMMUFD_TYPE (';') + +#ifndef IOMMUFD_CMD_OPTION +# define IOMMUFD_CMD_OPTION 0x87 +#endif + +#ifndef IOMMU_OPTION +# define IOMMU_OPTION _IO(IOMMUFD_TYPE, IOMMUFD_CMD_OPTION) +#endif + +VIR_LOG_INIT("util.iommufd"); + +enum iommufd_option { + IOMMU_OPTION_RLIMIT_MODE =3D 0, + IOMMU_OPTION_HUGE_PAGES =3D 1, +}; + +enum iommufd_option_ops { + IOMMU_OPTION_OP_SET =3D 0, + IOMMU_OPTION_OP_GET =3D 1, +}; + +struct iommu_option { + __u32 size; + __u32 option_id; + __u16 op; + __u16 __reserved; + __u32 object_id; + __aligned_u64 val64; +}; + +/** + * virIOMMUFDSetRLimitMode: + * @fd: iommufd file descriptor + * @processAccounting: true for per-process, false for per-user + * + * Set RLIMIT_MEMLOCK accounting mode for the iommufd. + * + * Returns: 0 on success, -1 on error + */ +int +virIOMMUFDSetRLimitMode(int fd, bool processAccounting) +{ + struct iommu_option option =3D { + .size =3D sizeof(struct iommu_option), + .option_id =3D IOMMU_OPTION_RLIMIT_MODE, + .op =3D IOMMU_OPTION_OP_SET, + .__reserved =3D 0, + .object_id =3D 0, + .val64 =3D processAccounting ? 1 : 0, + }; + + if (ioctl(fd, IOMMU_OPTION, &option) < 0) { + switch (errno) { + case ENOTTY: + VIR_WARN("IOMMU_OPTION ioctl not supported"); + return 0; + + case EOPNOTSUPP: + VIR_WARN("IOMMU_OPTION_RLIMIT_MODE not supported by kernel= "); + return 0; + + case EINVAL: + virReportSystemError(errno, "%s", + _("invalid iommufd option parameters")= ); + return -1; + + default: + virReportSystemError(errno, "%s", + _("failed to set iommufd option")); + return -1; + } + } + + VIR_DEBUG("Set iommufd rlimit mode to %s-based accounting", + processAccounting ? "process" : "user"); + return 0; +} diff --git a/src/util/viriommufd.h b/src/util/viriommufd.h new file mode 100644 index 0000000000..1a7c7c94d0 --- /dev/null +++ b/src/util/viriommufd.h @@ -0,0 +1,23 @@ +/* + * viriommufd.h: iommufd helpers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#pragma once + +#include "internal.h" + +int virIOMMUFDSetRLimitMode(int fd, bool processAccounting); --=20 2.43.0