From nobody Sun Apr 12 04:22:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1771342295; cv=pass; d=zohomail.com; s=zohoarc; b=BfVstYeojyzFql/ceCaj3WEd9CPoBjC/5FXvMfgxNV3OuYGTQ/CMqOhBldnIIAhCEYYgGVZ5znhSX8/0lbNUJ1IwpRex8vCpQIb7ZfeRLnzaRsjYt4DGA4RyWmkCO1+HvMu98aSaUvQ6bbW6NWXtYRrazv1phsyzcvFTSGuZ/1A= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771342295; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TuyBaWoelCVx18qm29+HVbKaglucZ6HTet0RqaDEb/4=; b=EMIYQmWEe/9oC7s19SCK5M7Umf2YAO8IDTMpMqfsooxYcZ8w6b7SnByaQ2Xa9yk2TU4SX27dq4EdjNGk9/arKTkA3JM7EFDa6q6htPtxsU1b1LLc9nIr6g0qnuYStsnEIULkCsy1cMnSdloG6SVpAfFS3PX89TtvrEkVhxkHkY4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771342295036184.74746075565633; Tue, 17 Feb 2026 07:31:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vsN2k-0005na-ME; Tue, 17 Feb 2026 10:31:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vsN2X-0005hO-TF for qemu-devel@nongnu.org; Tue, 17 Feb 2026 10:31:11 -0500 Received: from mail-northcentralusazlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c105::1] helo=CH1PR05CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vsN2L-00077H-Gh for qemu-devel@nongnu.org; Tue, 17 Feb 2026 10:30:58 -0500 Received: from MN2PR18CA0004.namprd18.prod.outlook.com (2603:10b6:208:23c::9) by CH8PR12MB9837.namprd12.prod.outlook.com (2603:10b6:610:2b4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 15:30:41 +0000 Received: from BN3PEPF0000B373.namprd21.prod.outlook.com (2603:10b6:208:23c:cafe::f3) by MN2PR18CA0004.outlook.office365.com (2603:10b6:208:23c::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.16 via Frontend Transport; Tue, 17 Feb 2026 15:30:35 +0000 Received: from mail.nvidia.com (216.228.117.160) by BN3PEPF0000B373.mail.protection.outlook.com (10.167.243.170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.0 via Frontend Transport; Tue, 17 Feb 2026 15:30:41 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb 2026 07:30:12 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb 2026 07:30:12 -0800 Received: from localhost.nvidia.com (10.127.8.12) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Tue, 17 Feb 2026 07:30:11 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hyA7Ljb82lz9lJIClAjK5KHq8nQ6OnRVv0JAjIU3OSN2FjXviWSwJXn88Zy9EfJNYb9DxGsauQNpFeo+zVaC+dc136qGhWq+DuntbEA4kTo+9BE7Tt65kazg/K1itvtn0uuchIWioFRSihJPRkTQmB1EIYd5dsIu0G+10NG8aQvm3dnYIfQs4o8/vUWAzQm+BbcLgxWQXyjK6S9i2AvU8Td09yWZ6w21WuubGbyY3X1LZsozda9+mByKVopQ3xCuOMxEVVyIwTy1XfWO/nbJS32f0Qkr0mqvXVFS/ZRkjzLA8Pc4tQWt3hpv2dGv+qEx/SB7zpS1cIilKvhRKsAnRQ== 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=TuyBaWoelCVx18qm29+HVbKaglucZ6HTet0RqaDEb/4=; b=julPst6sX/LVrG5wLsi0F1hzxGf5wDS58ZRw/iIg+uvZ0MRXfDPnuwYQnqxckD/uCSgUWCKjy+nBJge1u2CjAv3IXb9v9tEThcS4TKZizB56Dtw/kddb5E8OrFZEEgYVdYeOE++f4iAUgwObmp3PAi18njV5yZSncQXNWv/tXB8LsnlYw9PmQz8R3K0IVlkqAPnp8p9vUEScG6Q+9nYI6+7JSkmGnLiKy0k83dCYgp8Qp6+dDCPGU6l+UMsB9PggYA+PnrfgI2IZ508blhXEenSxquHK2DDIYCg567Pg6CCNEXd3BHDKcP+pBzaGcxW71uS2N0SiWuP2dx4p6p+hqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=shazbot.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=TuyBaWoelCVx18qm29+HVbKaglucZ6HTet0RqaDEb/4=; b=S0WC6Q8oMWAxQ5lgIBGYfTd3pG3yGSFNlND64AyH8y/CLw58+HluRNAhGQsLya88gus7N/zhRSoD3ujbQGSm8HnjErz0n2dQpbZ/omip63i/69zvURZUxPgEOtmkGEpG/+nLtyQby2ReGui1yftRh9e+dgHAVr80w+ygotpdqcIIcM1eyAlmwIij/P15rdpgnkNvmUZ5DP5zD9xmM1a7nSoA/qyaoL+8skCXZd+KKFektGxBuIt8/zGqhwgJkgvj+Se3lqID5n+GtjTGqTyrdVzAyzkgBJ24eDcQsXCqpZYtUkMH3Wg7BGgANoI5yJ7hIIL74Slx8vr5vd3km5Gh+w== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: To: , , , , , CC: , , , , , , , Subject: [PATCH v4 1/3] hw/vfio: sort and validate sparse mmap regions by offset Date: Tue, 17 Feb 2026 15:30:08 +0000 Message-ID: <20260217153010.408739-2-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260217153010.408739-1-ankita@nvidia.com> References: <20260217153010.408739-1-ankita@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B373:EE_|CH8PR12MB9837:EE_ X-MS-Office365-Filtering-Correlation-Id: b52db2f2-3377-4afc-6061-08de6e398267 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|82310400026|36860700013|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?3NDSMjlxu4pfdnrSKSmDREuk4w+sSLP6e2A8xjRGi05iDb2Zr9u2RI4826fI?= =?us-ascii?Q?ZbT3Kzb/xyf+M7Nm7yBKailh801AGiM7Etwp8qeMm5tnl7MhzoPjNp1R0hUA?= =?us-ascii?Q?auXCEjXDTg2zGQ0EZ6CnJPSNlJptW7Ma8Z3ZjcGrMa1z/GlNgtWnyBB3Ul2Z?= =?us-ascii?Q?Z54EDhWcRBb+QP9Z8GeNavNIv/6G5Mx6Y73N7OQ6rnBzmFNR77X0sCEWj966?= =?us-ascii?Q?1Rq2ttD5m4ECH665FKcTRzhcW+kRM7R0uXUuCXyeQAgTQRuyrqi9XK3ei9gt?= =?us-ascii?Q?68AatwUQo6hhmszI7NqoY3b8RHtJly6k3Xq4UsMreaOlW4W/zPJSmbYKWBpC?= =?us-ascii?Q?q60e2LSSqt28LjOaz0TbtJ/t61UHGb5bCsNHvgHfnubTYtSrB4/owT/FFCEi?= =?us-ascii?Q?YfLHppks2DM9ie2dQQ3VAYccgKu5xf6KgE6KSZnEjGJcJzb2CtxyWoi7TOQH?= =?us-ascii?Q?Q1z7wJfXIorsaR37aiEmODzNHhuzvvgLzuXKMYirWJ7DZ+iNqtcrNz64oLcm?= =?us-ascii?Q?ub4JDN+oe+2WlSwsRl+Feoy6RksoYv/OuodMufYFiOY0a2DRmQBQD9o6f1iU?= =?us-ascii?Q?z7g4AQOIsqHX4hThf07Xwm1Do7VzcwZkjgTZBe8MQbHvrbJopFueLlE3Cj7K?= =?us-ascii?Q?DXh5dXED5xEOpovybQsGb6nlcUuXm8dyLdGt5LLzMelHCS/Aoo04UKTdeOSc?= =?us-ascii?Q?J4WrHEwETa/z7ZGhNSYhN27H/IDMtjSBXL7M3KeMkXxTS904N+HfJVO8soWl?= =?us-ascii?Q?2TRTT4E4Y3HorRuhrV5v6QTVMe9DeoumlcNf0716YemmXrzIVsBjHCCULj4r?= =?us-ascii?Q?YqUZI/G/avzee4ERrsoA77b7IvjzTe/YKAsGsqqAF6M6qVxPOY3CkgUbifP0?= =?us-ascii?Q?ZKpOE492Mw0RmBFBaPXWAuXkx32w9qD8EtOKq5Mv9FfQMcA65TM5yooGcCKr?= =?us-ascii?Q?4iQ+Fcm2u/YPqltKNwg/omnEen8OlYi1qb+DJgPJTPCpPYOS/bTYgQ9JaF3P?= =?us-ascii?Q?syXBXNXn8LNaq9ElS5Z4TI5+c2e5f0OLI11/hg3b/7jienHowSjC4j9OzDbY?= =?us-ascii?Q?NIVKageQfymrJL0DX5Y+gCnq9ASpkIruqZCnNK+sO/O7OdBOcWmPewhg1RZk?= =?us-ascii?Q?7oYMzN6imszkkWvuUMbbfXeiHvRXkILifFFnRY78fZydBoTaL9aVmjX1qgkP?= =?us-ascii?Q?6pZFiHumNP7694Q0aLAaSABTslslGXcS+zmlXOWFfzmGHnbwcnykakTep4kR?= =?us-ascii?Q?RXgIHPmKjHY5Jchoh6v+aRkLgsUz8ooeNA9K3BbLaJnG2bEde/Xc88X379Rt?= =?us-ascii?Q?fepDpPRgO+jGyllJlgFFYIdKRJ34kok5yu1SU9s3pCd3JorYlMqyGOUlB7+u?= =?us-ascii?Q?932sVGlpZre7nnay13TJ/dLRT5nOiv1XTgSRflsIO5OjqX+u04RCRUkVkiiJ?= =?us-ascii?Q?/6LsV8mA6Q0H6DRidRsgIgtcHyVJp94VRnppTM9BmC1pCnU5N6ZUQ8EIQ55f?= =?us-ascii?Q?FoEJUTPEvkI8zcL0ECHwhy/cHXMNBWtTtxu3dQ4hHF0T1iJ5psrbzTmRr/yN?= =?us-ascii?Q?5pe50sxxZu8Rm2RRVqklZkDvEeHSx+f0UX46pCt3c+gZH8e5aTD8kp2zXDJ/?= =?us-ascii?Q?SVgew3sn1c2vWS+TNJHhPp1nHAmjDombS1qHZvVen8YKpypMilathSmz2b4D?= =?us-ascii?Q?kuw50Q=3D=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: l9NnRZTJLTqrhKwpBYnVIdzeD/hh/QvWsKZun7EQgU0O0+grwrqL6buA895cPFNP42SQrNGrTTkQzOXUDA/XVk0IbqFIeNqxx/6LAcJRXsR6LGWveJSSFJ9fJPbtY+r6pOduYZ2ycwL11P6u8S5qh/l5yQsepVdF7spaqxi62cF+d2gVz8VpxHtWnOHAwpN576k5B1prszanh6+8hd3tzhr31Q140srBDhOLvkCd0Dl7eiFzR2DEBYPVZt6cuYwJuim5mSyW0VjadWOSQJ5JYAmaM0p/KjzOT85IHHU+8f8b4O6Chbe2N56UuqMKW5F8hJI25BBf2Cxs4urKB/JFLZfKTuuW3aFmQquDUiNIJEy3HAS/FGMLIpgnNbygUZrckEFzHZoDRPcR7UeGRQlkvAE6kMs3cRVfi7dP7XNM9lxHUD+mXa3BNb60a8usxi1i X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 15:30:41.1256 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b52db2f2-3377-4afc-6061-08de6e398267 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B373.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH8PR12MB9837 Received-SPF: permerror client-ip=2a01:111:f403:c105::1; envelope-from=ankita@nvidia.com; helo=CH1PR05CU001.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.043, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1771342298344154100 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Sort sparse mmap regions by offset during region setup to ensure predictable mapping order, avoid overlaps and a proper handling of the gaps between sub-regions. Add validation to detect overlapping sparse regions early during setup before any mapping operations begin. The sorting is performed on the subregions ranges during vfio_setup_region_sparse_mmaps(). This also ensures that subsequent mapping code can rely on subregions being in ascending offset order. This is preparatory work for alignment adjustments needed to support hugepfnmap on systems where device memory (e.g., Grace-based systems) may have non-power-of-2 sizes. cc: Alex Williamson Reviewed-by: Alex Williamson Reviewed-by: Shameer Kolothum Signed-off-by: Ankit Agrawal Reviewed-by: C=C3=A9dric Le Goater --- hw/vfio/region.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/hw/vfio/region.c b/hw/vfio/region.c index ab39d77574..8fbc98918f 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -149,6 +149,19 @@ static const MemoryRegionOps vfio_region_ops =3D { }, }; =20 +static int vfio_mmap_compare_offset(const void *a, const void *b) +{ + const VFIOMmap *mmap_a =3D a; + const VFIOMmap *mmap_b =3D b; + + if (mmap_a->offset < mmap_b->offset) { + return -1; + } else if (mmap_a->offset > mmap_b->offset) { + return 1; + } + return 0; +} + static int vfio_setup_region_sparse_mmaps(VFIORegion *region, struct vfio_region_info *info) { @@ -182,6 +195,35 @@ static int vfio_setup_region_sparse_mmaps(VFIORegion *= region, region->nr_mmaps =3D j; region->mmaps =3D g_realloc(region->mmaps, j * sizeof(VFIOMmap)); =20 + /* + * Sort sparse mmaps by offset to ensure proper handling of gaps + * and predictable mapping order in vfio_region_mmap(). + */ + if (region->nr_mmaps > 1) { + qsort(region->mmaps, region->nr_mmaps, sizeof(VFIOMmap), + vfio_mmap_compare_offset); + + /* + * Validate that sparse regions don't overlap after sorting. + */ + for (i =3D 1; i < region->nr_mmaps; i++) { + off_t prev_end =3D region->mmaps[i - 1].offset + + region->mmaps[i - 1].size; + if (prev_end > region->mmaps[i].offset) { + error_report("%s: overlapping sparse mmap regions detected= " + "in region %d: [0x%"PRIx64"-0x%"PRIx64"] over= laps " + "with [0x%"PRIx64"-0x%"PRIx64"]", + __func__, region->nr, region->mmaps[i - 1].of= fset, + prev_end - 1, region->mmaps[i].offset, + region->mmaps[i].offset + region->mmaps[i].si= ze - 1); + g_free(region->mmaps); + region->mmaps =3D NULL; + region->nr_mmaps =3D 0; + return -EINVAL; + } + } + } + return 0; } =20 @@ -213,11 +255,13 @@ int vfio_region_setup(Object *obj, VFIODevice *vbased= ev, VFIORegion *region, =20 ret =3D vfio_setup_region_sparse_mmaps(region, info); =20 - if (ret) { + if (ret =3D=3D -ENODEV) { region->nr_mmaps =3D 1; region->mmaps =3D g_new0(VFIOMmap, region->nr_mmaps); region->mmaps[0].offset =3D 0; region->mmaps[0].size =3D region->size; + } else if (ret) { + return ret; } } } --=20 2.34.1 From nobody Sun Apr 12 04:22:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1771342289; cv=pass; d=zohomail.com; s=zohoarc; b=aAHsYF4j0yhhEP4XXpeEDMnttlz4fv3MbALYHDaQdKPsu2+Ov+cyihcOL8ogkgtjUNUBRJ+SY0NZq/UPCIlDHi6HjqTkT+OIPKvyPW/XacIjKCFbLvQZiP8WOdeEfTGpijqMjhdccvu4+5qLbOxT3q8gf3Lt3acmWR3yQnH0BRA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771342289; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MDqQBjjl33lfr86RHxlEYIwhIrv/kGfk84dVRYtf68M=; b=A3Z8f18JwMDXyYTo8mgof8ff4j93VEnmA/uamULmNGf+RQDOA5I2PyAphjYoMgxTtauCZzcWIGfUr1CpAevQ5b9WWzbhwqQGO6Uw8G6XTl7/vEKXl1GuLlnFgIIEJclSio4xfrw2ZlLsoRwf+Ykll3RIi3iHKhFDrxevdh3UN4c= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771342289325613.528419028279; Tue, 17 Feb 2026 07:31:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vsN2l-0005o0-6F; Tue, 17 Feb 2026 10:31:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vsN2X-0005hP-TX for qemu-devel@nongnu.org; Tue, 17 Feb 2026 10:31:10 -0500 Received: from mail-centralusazlp170110009.outbound.protection.outlook.com ([2a01:111:f403:c111::9] helo=DM5PR21CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vsN2K-0006x2-Mh for qemu-devel@nongnu.org; Tue, 17 Feb 2026 10:30:55 -0500 Received: from CH0PR03CA0367.namprd03.prod.outlook.com (2603:10b6:610:119::24) by PH7PR12MB7353.namprd12.prod.outlook.com (2603:10b6:510:20c::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 15:30:36 +0000 Received: from CH1PEPF0000A348.namprd04.prod.outlook.com (2603:10b6:610:119:cafe::b7) by CH0PR03CA0367.outlook.office365.com (2603:10b6:610:119::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 15:30:36 +0000 Received: from mail.nvidia.com (216.228.117.161) by CH1PEPF0000A348.mail.protection.outlook.com (10.167.244.4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 17 Feb 2026 15:30:36 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb 2026 07:30:13 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb 2026 07:30:13 -0800 Received: from localhost.nvidia.com (10.127.8.12) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Tue, 17 Feb 2026 07:30:12 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=h0jJ5N/nQHo2XrzpScs+2BzfQeL2pe2ISacImIeCARevzQOg+abSD9WlKI5FzF6SbFGEUxBObEt4c2+QuvS4UoqC46i8LBiz4MfkjeeXiJtw02tCk3TljUVOpoLII99MjdXDbTIsBfJxBlrVXr0MJlh8hzvYa3NcxDphSHHpSV37BvJQb3/+eVaxQEpCEebFfGEnN8ppkNhzZ5YZPli5KspPE7QkR9xXxTn94D7H6v91a0jIDyhw/V+MK7ycVcLoyfOeZvRAf63tndwsOxjLoCr4i7nFmVdIkp15EbnWHh4A2tUXqLl9GxMSMfa60vVj2Mv58YrDUftU+VI0YmR8Ug== 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=MDqQBjjl33lfr86RHxlEYIwhIrv/kGfk84dVRYtf68M=; b=J4Fd1XI8tq2pQPbFntUUyYSqO+XpROmT0OASweF5liUgRg2WyrofpRsZxf5pEMvLD1Q5V5bdvbNjd7hAkj9Vw9g6FnMKi5VoWawN3xBDXJWZnpuxTGzeSszAUAe4wjLSdFqzQ3+Px5SsNC3tqNe6OJb6rLFp/CvUgam9/bu7MqDKh63FgefdBF7zo8tNdIYK6he/vK8e8fDTkNeHNh37fQMdghenFoLrotR3C9PQshGmq6BCGM7nBM8oWCl2gghYyfB5jx+N9svMKeSfzcafBRPfZ1pR/88GU4ysDWFw+MPDE6WjXDwpeblvq0XHR4qsPI0QgP0g+NdpoVfbPBeNqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=shazbot.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=MDqQBjjl33lfr86RHxlEYIwhIrv/kGfk84dVRYtf68M=; b=hdKOVpcL3FN34815hJa/FcKCl//vui6w4YTwKBwoo5BhWQic5lTSrw06FaZnbQSzm1NxSFyGs+se2cgaz1FeEvm3sfIN6GTPOLlMmC6SPdqzWsi/1MpfEd778JC7xwXqfO8mGGeVjuvhM9m1kYRPsBy6POJCBMdyEOX3NrJ4EtPWIm2EOwW/X+2VMMTCzpM9CDZszaWYPIfJze4X8pivvhWyXAGbdEsLwpOFWG3YWSE4XVBA9hi6xvCFnnEJVtSyzh8bm12yUJNeuQQdzLYpTGc5VIGcbA5DX85RBxkFct5TRiL4oOgN5AcXqoK5k/qDqpCMuuyJnUb9VvbzbrEdHQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C From: To: , , , , , CC: , , , , , , , Subject: [PATCH v4 2/3] vfio: Add Error ** parameter to vfio_region_setup() Date: Tue, 17 Feb 2026 15:30:09 +0000 Message-ID: <20260217153010.408739-3-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260217153010.408739-1-ankita@nvidia.com> References: <20260217153010.408739-1-ankita@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH1PEPF0000A348:EE_|PH7PR12MB7353:EE_ X-MS-Office365-Filtering-Correlation-Id: 901112f4-e204-41cf-bdcc-08de6e397f58 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?q082Cmjj9Q012QlUZctg6Zoa2uamCP46QAmmj42cFCZ0jg9f4N0JUSgcAyyE?= =?us-ascii?Q?zBw4wz2BHFHF+378HpyklTr1FqbRLB66b/sjib2+K4rZ5t3tVxDhz+ou4Fm4?= =?us-ascii?Q?eJWSmpsNjiUUjc/STbj/XKKZjvmtR+jhxhh7OvKI0Sp8C08peosF9iA9PSsS?= =?us-ascii?Q?FSkcAezjZu6iitZzMYaT30V4LxNj6TzNm/mPLKXsTbkWbz5Yz5hIzPIihk2F?= =?us-ascii?Q?gvMPG/arV+JINGreNHiM+mht6z/76/rxSMomdfq07Z4dIlmw40ldeJKxyuFb?= =?us-ascii?Q?9ybS4ZuidHvmANckbWfshD1Wg6R0+lsqeN1wLg6s78jJabNrpDP/GchOCY44?= =?us-ascii?Q?zCRAGt3TYj4DL5mrB3mhaAz7Aj+d4IX+M31yoeQEpLLGdDEkmmd+N+24Uw1R?= =?us-ascii?Q?AOVRlVXxeCIIWvtSXtrFv4lqJRIkI+1juH8CnF0T8/uRCegVwnDPm6JwKqeX?= =?us-ascii?Q?NsAEmf8C8R9LwtNSkPd3fxC5eVr2ufksFE9aIxbwxLDEcWdD0FyOLFULmS6p?= =?us-ascii?Q?rW8g/w1P7fcW+0L7czENzgyQqdfIlxLeCaVsEsC6tg4rZOCF5vrsM2WIUjiA?= =?us-ascii?Q?TZJ7UFoSneCZHczk5G2kiZwSNF8fTh+vEWK6JDL/coEQB/WuspWeRzc2ZnWo?= =?us-ascii?Q?OfP9m0i/crYsjIkiDetW7ylR9DVBI8mnj3R1+GvhPkiy9qEgrsIApnDXialF?= =?us-ascii?Q?W2uZKAFneYKpR92he0VLgixUyfUZCmF2OrKh/rNHImQka1y4ha2FwLeAH86M?= =?us-ascii?Q?Z0jWO7cTHD7uRvVpBVdYRaMdZUFOgCJE44YuQ5A9t5zgaoiUe0XQicJEvJbh?= =?us-ascii?Q?x/rYiOSDktWMOEkAd32GN0lD87dwMHxXQdgrDowmbzvW5AzappfE3dmHDfmV?= =?us-ascii?Q?QGKVI2o6Wt235zx7SzT6NklYX10xzYCJJaYaVVk8oeOGGylD5kdk6I8VMFEH?= =?us-ascii?Q?OOvan5AQTVmYZzb23jXm25QvEnJf+WLcxrXbVu6aWxLNGXHBDisaEtUXCXTV?= =?us-ascii?Q?e2SXFFMiIq2sZzSi2SlsOOARIUCddiqX0fOrRl8uK+0MS1+NcaZVmMaVkmam?= =?us-ascii?Q?cy225pvGuPcjYCfTWBkR4KqpVPXCK/TyQhrBieTdo34evHDvbCHhlzRvquAu?= =?us-ascii?Q?fwwDhTd1BrkTo0D0t5piMb5tBPWjvilaTeDem5OrDgz2Jg37xLI7v0Um6z5U?= =?us-ascii?Q?Tz5ceMzK3RiGQ8JRhEoHgY4917Fefc0tJ3jizzPzxuBMS7vHTRePdBiA+w5r?= =?us-ascii?Q?Qw3buUrYkGMAo9eWv7teYHV8GtNYDVYz6wXTNuGvRAUFjTkRdH84KhWEAg/R?= =?us-ascii?Q?6tdfMoEWyCaDIGopIEABjHHTyiw8+RoytswzAO9pQP8pll/XP+2zlcMueU9S?= =?us-ascii?Q?/LKgVZ+6c+FX2h4IFkaaolO/GBkxr8B1lUImhuY4MP+pnflgvsiaemfjldqn?= =?us-ascii?Q?KC7Wm9CEu1d/zCbT+aZJRGJxkq9KGUutIlj/ENAGe1E38BZqKsBpTx2eI5C3?= =?us-ascii?Q?sGI+d+pMKleIx0NDszgbKgtbm7R/pv6uZSDdS0F+5I3d9vOLdrzAqvWZCksF?= =?us-ascii?Q?5eWsgPU/wCHL23x9BpFeJm7sbRkM8yLTfhbd2fYOfGK7K/EDIjbLllBq0SQp?= =?us-ascii?Q?//g1SUB33IMMco8RP3NN840AWHL/eOEvltv1Z+AOYoSW3nXcXuLW1AB6N66g?= =?us-ascii?Q?6Slxfw=3D=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(376014)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: u93vHZOlSjpI6cJSMcuFNcL+2vaK14akW4dysiFWcs++2xmohKAsTlQhHrP1yE3N4psjxlN4vEeU32SQBYZSmKcsWYBXVYr8OehlPAaj+Nhqjolxm0heqt4dldnB9tkvwMUHNCZnDl5SEDBPIAIhLq91eNl+u0vkxDL52DzOtPGzoPcOYlH8wWBhi2mZRpNXj0/AnJVrGOj198vXpx72Kll3qVSqcUzp7bZYhTdMIVn9A0bTL4erGLAnC/xwlgrzrcHhpnuRtIihrgjS3EL3ur0vbYnRPfO7Pf7mly24MsiMbV69SOraKJGHypQhZYH8vLpyQp+QJff6rJ7oPn67iMHLLGQJ3wtOHo7afKKUr1DEzuMhCafegdtNbwvFcvet2HGPSitIfZWyhttaeCq5z13wuQbY8fSNma08g+MvFYG5Wkrgh0R66wKKfNV+Bw2I X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 15:30:36.0282 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 901112f4-e204-41cf-bdcc-08de6e397f58 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH1PEPF0000A348.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7353 Received-SPF: permerror client-ip=2a01:111:f403:c111::9; envelope-from=ankita@nvidia.com; helo=DM5PR21CU001.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.043, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1771342292176154100 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Add an Error **errp parameter to vfio_region_setup() and vfio_setup_region_sparse_mmaps to allow proper error handling instead of just returning error codes. The function sets errors via error_setg() when failure occur. Suggested-by: Cedric Le Goater Signed-off-by: Ankit Agrawal Reviewed-by: C=C3=A9dric Le Goater --- hw/vfio/display.c | 6 +++--- hw/vfio/pci.c | 3 +-- hw/vfio/region.c | 20 +++++++++++--------- hw/vfio/vfio-region.h | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/hw/vfio/display.c b/hw/vfio/display.c index faacd9019a..5a42a6f7a2 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -446,13 +446,13 @@ static void vfio_display_region_update(void *opaque) =20 if (!dpy->region.buffer.size) { /* mmap region */ + Error *error =3D NULL; ret =3D vfio_region_setup(OBJECT(vdev), &vdev->vbasedev, &dpy->region.buffer, plane.region_index, - "display"); + "display", &error); if (ret !=3D 0) { - error_report("%s: vfio_region_setup(%d): %s", - __func__, plane.region_index, strerror(-ret)); + error_report_err(error); goto err; } ret =3D vfio_region_mmap(&dpy->region.buffer); diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 36d8fbe872..c89f3fbea3 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3056,11 +3056,10 @@ bool vfio_pci_populate_device(VFIOPCIDevice *vdev, = Error **errp) char *name =3D g_strdup_printf("%s BAR %d", vbasedev->name, i); =20 ret =3D vfio_region_setup(OBJECT(vdev), vbasedev, - &vdev->bars[i].region, i, name); + &vdev->bars[i].region, i, name, errp); g_free(name); =20 if (ret) { - error_setg_errno(errp, -ret, "failed to get region %d info", i= ); return false; } =20 diff --git a/hw/vfio/region.c b/hw/vfio/region.c index 8fbc98918f..d464eadf9c 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -163,7 +163,8 @@ static int vfio_mmap_compare_offset(const void *a, cons= t void *b) } =20 static int vfio_setup_region_sparse_mmaps(VFIORegion *region, - struct vfio_region_info *info) + struct vfio_region_info *info, + Error **errp) { struct vfio_info_cap_header *hdr; struct vfio_region_info_cap_sparse_mmap *sparse; @@ -210,12 +211,12 @@ static int vfio_setup_region_sparse_mmaps(VFIORegion = *region, off_t prev_end =3D region->mmaps[i - 1].offset + region->mmaps[i - 1].size; if (prev_end > region->mmaps[i].offset) { - error_report("%s: overlapping sparse mmap regions detected= " - "in region %d: [0x%"PRIx64"-0x%"PRIx64"] over= laps " - "with [0x%"PRIx64"-0x%"PRIx64"]", - __func__, region->nr, region->mmaps[i - 1].of= fset, - prev_end - 1, region->mmaps[i].offset, - region->mmaps[i].offset + region->mmaps[i].si= ze - 1); + error_setg(errp, "%s: overlapping sparse mmap regions dete= cted " + "in region %d: [0x%"PRIx64"-0x%"PRIx64"] overla= ps " + "with [0x%"PRIx64"-0x%"PRIx64"]", + __func__, region->nr, region->mmaps[i - 1].offs= et, + prev_end - 1, region->mmaps[i].offset, + region->mmaps[i].offset + region->mmaps[i].size= - 1); g_free(region->mmaps); region->mmaps =3D NULL; region->nr_mmaps =3D 0; @@ -228,13 +229,14 @@ static int vfio_setup_region_sparse_mmaps(VFIORegion = *region, } =20 int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *regio= n, - int index, const char *name) + int index, const char *name, Error **errp) { struct vfio_region_info *info =3D NULL; int ret; =20 ret =3D vfio_device_get_region_info(vbasedev, index, &info); if (ret) { + error_setg_errno(errp, -ret, "failed to get region %d info", index= ); return ret; } =20 @@ -253,7 +255,7 @@ int vfio_region_setup(Object *obj, VFIODevice *vbasedev= , VFIORegion *region, if (!vbasedev->no_mmap && region->flags & VFIO_REGION_INFO_FLAG_MMAP) { =20 - ret =3D vfio_setup_region_sparse_mmaps(region, info); + ret =3D vfio_setup_region_sparse_mmaps(region, info, errp); =20 if (ret =3D=3D -ENODEV) { region->nr_mmaps =3D 1; diff --git a/hw/vfio/vfio-region.h b/hw/vfio/vfio-region.h index ede6e0c8f9..9b21d4ee5b 100644 --- a/hw/vfio/vfio-region.h +++ b/hw/vfio/vfio-region.h @@ -38,7 +38,7 @@ void vfio_region_write(void *opaque, hwaddr addr, uint64_t vfio_region_read(void *opaque, hwaddr addr, unsigned size); int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *regio= n, - int index, const char *name); + int index, const char *name, Error **errp); int vfio_region_mmap(VFIORegion *region); void vfio_region_mmaps_set_enabled(VFIORegion *region, bool enabled); void vfio_region_unmap(VFIORegion *region); --=20 2.34.1 From nobody Sun Apr 12 04:22:57 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass(p=reject dis=none) header.from=nvidia.com ARC-Seal: i=2; a=rsa-sha256; t=1771342301; cv=pass; d=zohomail.com; s=zohoarc; b=ZfSwBHDw0kPBd7sg8HMNR+5lgMLCMNntqtMJbsWJxtF9xTWs9CXUPJ2H8GGipbtNCrk138sAcpwm6nHge3WsVprAGMbHsoXIKg92KQExE3z6rNG3WF5Ame1e6DS1ElLrs3XqVZ3oaJG5tU9HOYJgLZoZzSaU+3HPSvyXk98TXrk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771342301; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4HlRL3suLBLieIKap3hOgr63dNO8djVLJXac0h9mTY4=; b=WZDoi4/XK9pss1cLmBSVVEivf/5Y1QXy8EWzagTRcyl47JsrGGvCivN5uxoLqF8ExjTQxWSrIz0p+TNpECqiRdW4F3jSid8DSOXTrg1EtvJbIjhwV+bP+AHGa6gkiB9I8rINKi+FdxrhSnP+xma4TOcg2uO1/PpNQMiiRkRZJDA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=nvidia.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771342301906225.90264888425145; Tue, 17 Feb 2026 07:31:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vsN2m-0005pP-Da; Tue, 17 Feb 2026 10:31:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vsN2f-0005i2-Ro for qemu-devel@nongnu.org; Tue, 17 Feb 2026 10:31:14 -0500 Received: from mail-eastusazlp17011000f.outbound.protection.outlook.com ([2a01:111:f403:c100::f] helo=BL2PR02CU003.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vsN2P-0007CQ-Rs for qemu-devel@nongnu.org; Tue, 17 Feb 2026 10:31:10 -0500 Received: from BLAPR03CA0127.namprd03.prod.outlook.com (2603:10b6:208:32e::12) by SA1PR12MB8945.namprd12.prod.outlook.com (2603:10b6:806:375::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Tue, 17 Feb 2026 15:30:45 +0000 Received: from BN3PEPF0000B372.namprd21.prod.outlook.com (2603:10b6:208:32e:cafe::40) by BLAPR03CA0127.outlook.office365.com (2603:10b6:208:32e::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.16 via Frontend Transport; Tue, 17 Feb 2026 15:30:43 +0000 Received: from mail.nvidia.com (216.228.117.160) by BN3PEPF0000B372.mail.protection.outlook.com (10.167.243.169) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.0 via Frontend Transport; Tue, 17 Feb 2026 15:30:43 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb 2026 07:30:14 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb 2026 07:30:14 -0800 Received: from localhost.nvidia.com (10.127.8.12) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Tue, 17 Feb 2026 07:30:13 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WwJjHv0Km7Q1CYroI+/UNPQ8rpkUIbT//z+JFDH/hSQhTb2qhdtP1NPcYtx7dqiPheEGQ078ax76MBXPhoFbFFY8IhH9hdKQiOMPy1xsCZNSItSj4ZHbcNwEiQQ/Gh9fh/Kh0v5BZSZQJOr/FiA3e327L/e9UeoEOKKfaEkJBdLDRdRFQpYRWR7t7AVstAF4PRPJBsWsCk6Xnhuo4DcYNUs7EDhGLvcznjnaExCf47Wh6ejsZgyJvLvOdzVvzHiYWYEk9JFhlUtaRQzfZhNFQJ5MOQdnX9tzwR+6RZj1X/rkYlqZMAPLqTW2HSfEBy3O6cM7NhlyEXR/KS8pwNPVQg== 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=4HlRL3suLBLieIKap3hOgr63dNO8djVLJXac0h9mTY4=; b=MFQfCeU+edTtXdR3gFSrExRXUFDVZRXwyUqLfdD3B3edDctlj/PMrjQwnMu2B+KLI9vK7WVnkETh5kFFLqGy3edEU6jaZ3Of4Zw3uY5i2wDoddifpMsn/dxUplr4Py9r4ECYkSyBYUia3rfRyj5qNx754ZJRmmXUen+SWqMhznaN84456ci6tIhDf2pOaWnzQ/jfMhmC76G5VF/NFNBFXoSgV8nQ4dpuZHmhX3bPwHVSI6x9wy80u6WdHlLtKVmuXD3clQ8DiRQR0GxV978Pfzs+K/8nf818QLJ3zoKqOL5k29BvUtCvEdN8FNIvdVYM9OZkAcRFSNusPcht+B4i0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=shazbot.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=4HlRL3suLBLieIKap3hOgr63dNO8djVLJXac0h9mTY4=; b=YSkWWvEiDH2zmHxEuSL1JXMyMPmGjnRt2dTkG97ow1uFTRPPATZoPWRD0mSTRF8oP8WhoKnp8iM2JW6XPGh8Rxq4rOhiU8T8sUJLAj/DgH2vTzDRsVug3a7bh4NBMI25OUfIHuY3nZnyGDbfWYOsyZl8/315/BPVIyYdGViueICitJj860v8vl79FFJFmMUvIMNpXL52KerIx9FUsLmf/tRbQxYYSF+5K6iO4vecG0wQVBY5VnjYFan1JEvzeEu1bcJIeq50sg/jeoTjgDZL4UddGRVzpC7JTSdruxtQcWCI3Pdw73xxJz9SZgP4li7Vu0Y6/BSbpPWkqOf9onGAbw== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C From: To: , , , , , CC: , , , , , , , Subject: [PATCH v4 3/3] hw/vfio: align mmap to power-of-2 of region size for hugepfnmap Date: Tue, 17 Feb 2026 15:30:10 +0000 Message-ID: <20260217153010.408739-4-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260217153010.408739-1-ankita@nvidia.com> References: <20260217153010.408739-1-ankita@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B372:EE_|SA1PR12MB8945:EE_ X-MS-Office365-Filtering-Correlation-Id: 01fdb252-d158-47c4-0073-08de6e3983bd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|36860700013|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?R7jVD28kXacMJ6x1lJHBy/5jWSNK+733eJchgHR/BdGFULFpquazn3i/s5Zj?= =?us-ascii?Q?1eAr1yygKQToa/PhwZIS24kOfFiSj4O836KnoXoHFii8dLaXP3zRgEdRVfqR?= =?us-ascii?Q?Ghzl9fCAr6w3IcPCOH6f2SXJgsKYN6w4ThUO3X0mXNGvE4JyRw2Y150V8vpZ?= =?us-ascii?Q?i/KaUIPpY4npzme07lMIPFGlAdjDgDAT/yFGd+7pGu2ih2Jx2Y2nXqGflVuq?= =?us-ascii?Q?zBUafEzsYtB4VJ995KjAkUAcyhxsNilIX6yh93SOVs+lzu2ElM6bzhsHGq4S?= =?us-ascii?Q?wIZ7Q6dg4HDoXPVVRV1zl0MeTTxF0VucZBEG9rsbi25it/0Ct7H2AKhdzr9+?= =?us-ascii?Q?miYIkPWo7cjrDZ/o2PvfuNyp7I5MJWE6dCmdWqXuezLYy0sUwCT0GTcFX4Mk?= =?us-ascii?Q?a86d2mkv18CpQ2RoXFpxyGxFUKBdQvGctG4/KnyqMYTmPioi2WfZq/RA7Hgi?= =?us-ascii?Q?Y2sp9kwuka3i22GWc2MZ667gdrquPvvRK6UolOQN84aOeD6ZoZCPG9a40Dky?= =?us-ascii?Q?FKQ0o8o4PfPd5lh04J65xRPHywQeHhjEZz224bveqBBAdl+4o5fuYJUvMXeJ?= =?us-ascii?Q?/bdCLJneW3BOZXufzGhIaVBFYOwZQVp3ZS/iqyh6zfub4pMHOAoHTqxfn723?= =?us-ascii?Q?cVya94hFNrXoGkf6AYt+PZnutTTNSjjveY2/rFd1BJJD2zBsCcTCXzZmcwF2?= =?us-ascii?Q?GU8e2JCIbbspvjwwfikq3Y5cLkAORZdUnpD5AR9IpbdINj75C6vIBWsNP2RI?= =?us-ascii?Q?1e7t40tZAee02cjQTtvFvArvijpyh4LAGqttOTJPgvduxs8TLNwWmYD5JU8M?= =?us-ascii?Q?DD2I7Gzhg8gD3oXn6MFZ1wucrDGIZvt0LcU+QIOFkSQHE0I+1Cfrk0D9vRib?= =?us-ascii?Q?3zNTOmV2H1Jl8fzV6PZVUcdJPxkGYLzE7EfZB9HQxXOV2xiiE5PN7wgNwVhE?= =?us-ascii?Q?2pP5WVOTBun0ruafnOiAToiQQ4Wc96N/LAKN/THnWFViBgBngGbaYD9tSdcr?= =?us-ascii?Q?FbI3w0ex5+bn+Xa5SXI10TWaELhl1pSbnhCQl4QekFWpNKIq9J459zfgZDxt?= =?us-ascii?Q?vFCh+XnV6YzK5snQWAdCzLBhJKjA5V2JADmi6o4Lp2ymt/5Ls0eKuqZI33z1?= =?us-ascii?Q?9bofniaC0zIVObFmiXyucGqANkRQgAptvte+XeioPLPmETpmIG4XmzFeQIu6?= =?us-ascii?Q?RAdNujTQXkIg77eY9admyH9WR/FSLYhNZokpPlqh9Yqomczr1NZYDjFQo9CE?= =?us-ascii?Q?aioOPu/lTIXd15r9aZfMIN7eNT7JN5iwiSYEUdK69IkN8RVCWMtksNpX1YHS?= =?us-ascii?Q?Pgua36OHQTU1zHcftHDW7ZA0OgD+GoOUw0Y/MMEeyZ9qu+yun68fCeRZ5MWM?= =?us-ascii?Q?tDhD/lngN5J4krL2vDr9aAkLF9vQLLE/3Eu0m1eAKNfTx/wjlstqaebb+4Xm?= =?us-ascii?Q?7xt8lPh4q2EFCJpf1vkzM8GfOR0C2Gu5SmPxFRcnK29vLky3V1l4xFQk5yAf?= =?us-ascii?Q?TRUtejOoYk3ap1qvEf2TCVhI1fnSLwFY8FRmVxfDorzriXJUvKBxpMp8cvDG?= =?us-ascii?Q?VzM3CDymNtNauG52N3hKpVbJLzD6QXrX+XCPGxlo7w66xTmGqTeqFkm5jkjg?= =?us-ascii?Q?+fbSM8DpRTh3MJR0Ny2/wL+IzrJk1p7eIQRL1P7y9VM9zERfWvYu+Cjckujc?= =?us-ascii?Q?6yq30g=3D=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(36860700013)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /1rIosDGlYOQ7K4iuLTqx95S1WcaLCCxwnABmEndeJ7d1DU4lLnMZ6FtHUonycE3hmMxRHdEFWCBplGuCUGGEXkRfBAN1t+KmOV/Btg+YFVoNNGOXgln8sHDN18tcsSa3ATXR4HLNSEgw4f3kY/mILUXqKva+FnDCvQb9jYoXBjMZ8uhJoCIgTkLAMZSGwwtzK8hV9ucNb7k3h2HKfp+ieHQu00EKYUatwJ+7qpNECsjMtsb9QxiizseJWVYvEg/8pUsNI4ZjCBxpusW252brA4GhcFwH4JpGwSbYbFtg0oZctTxCi5mDL2nzCJDafVQ9hEvAQnLFGAx4zcQDkWVkw3YTV/nu67MqDk25Pz8+PBflnjJ3x/hu3KJcu2wt05uGK/jYGPhUKkhtV4GyQ+5JMXr0ibd1+uU5i4pZ9ZNyFUPV3ZsPuVyqhEv3lGqok6k X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 15:30:43.3796 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 01fdb252-d158-47c4-0073-08de6e3983bd X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B372.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8945 Received-SPF: permerror client-ip=2a01:111:f403:c100::f; envelope-from=ankita@nvidia.com; helo=BL2PR02CU003.outbound.protection.outlook.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.043, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FORGED_SPF_HELO=1, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @Nvidia.com) X-ZM-MESSAGEID: 1771342302919158500 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal On Grace-based systems such as GB200, device memory is exposed as a BAR but the actual mappable size is not power-of-2 aligned. The previous algorithm aligned each sparse mmap area based on its individual size using ctz64() which prevented efficient huge page usage by the kernel. Adjust VFIO region mapping alignment to use the next power-of-2 of the total region size and place the sparse subregions at their appropriate offset. This provides better opportunities to get huge alignment allowing the kernel to use larger page sizes for the VMA. This enables the use of PMD-level huge pages which can significantly improve memory access performance and reduce TLB pressure for large device memory regions. With this change: - Create a single aligned base mapping for the entire region - Change Alignment to be based on pow2ceil(region->size), capped at 1GiB - Unmap gaps between sparse regions - Use MAP_FIXED to overlay sparse mmap areas at their offsets Example VMA for device memory of size 0x2F00F00000 on GB200: Before (misaligned, no hugepfnmap): ff88ff000000-ffb7fff00000 rw-s 400000000000 00:06 727 /d= ev/vfio/devices/vfio1 After (aligned to 1GiB boundary, hugepfnmap enabled): ff8ac0000000-ffb9c0f00000 rw-s 400000000000 00:06 727 /d= ev/vfio/devices/vfio1 Requires sparse regions to be sorted by offset (done in previous patch) to correctly identify and handle gaps. cc: Alex Williamson Reviewed-by: Alex Williamson Reviewed-by: Shameer Kolothum Suggested-by: Jason Gunthorpe Signed-off-by: Ankit Agrawal Reviewed-by: C=C3=A9dric Le Goater --- hw/vfio/region.c | 86 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 27 deletions(-) diff --git a/hw/vfio/region.c b/hw/vfio/region.c index d464eadf9c..47fdc2df34 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -344,8 +344,11 @@ static bool vfio_region_create_dma_buf(VFIORegion *reg= ion, Error **errp) =20 int vfio_region_mmap(VFIORegion *region) { - int i, ret, prot =3D 0; + void *map_base, *map_align; Error *local_err =3D NULL; + int i, ret, prot =3D 0; + off_t map_offset =3D 0; + size_t align; char *name; int fd; =20 @@ -356,41 +359,61 @@ int vfio_region_mmap(VFIORegion *region) prot |=3D region->flags & VFIO_REGION_INFO_FLAG_READ ? PROT_READ : 0; prot |=3D region->flags & VFIO_REGION_INFO_FLAG_WRITE ? PROT_WRITE : 0; =20 - for (i =3D 0; i < region->nr_mmaps; i++) { - size_t align =3D MIN(1ULL << ctz64(region->mmaps[i].size), 1 * GiB= ); - void *map_base, *map_align; + /* + * Align the mmap for more efficient mapping in the kernel. Ideally + * we'd know the PMD and PUD mapping sizes to use as discrete alignment + * intervals, but we don't. As of Linux v6.19, the largest PUD size + * supporting huge pfnmap is 1GiB (ARCH_SUPPORTS_PUD_PFNMAP is only set + * on x86_64). + * + * Align by power-of-two of the size of the entire region - capped + * by 1G - and place the sparse subregions at their appropriate offset. + * This will get maximum alignment. + * + * NB. qemu_memalign() and friends actually allocate memory, whereas + * the region size here can exceed host memory, therefore we manually + * create an oversized anonymous mapping and clean it up for alignment. + */ =20 - /* - * Align the mmap for more efficient mapping in the kernel. Ideal= ly - * we'd know the PMD and PUD mapping sizes to use as discrete alig= nment - * intervals, but we don't. As of Linux v6.12, the largest PUD si= ze - * supporting huge pfnmap is 1GiB (ARCH_SUPPORTS_PUD_PFNMAP is onl= y set - * on x86_64). Align by power-of-two size, capped at 1GiB. - * - * NB. qemu_memalign() and friends actually allocate memory, where= as - * the region size here can exceed host memory, therefore we manua= lly - * create an oversized anonymous mapping and clean it up for align= ment. - */ - map_base =3D mmap(0, region->mmaps[i].size + align, PROT_NONE, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - if (map_base =3D=3D MAP_FAILED) { - ret =3D -errno; - goto no_mmap; - } + align =3D MIN(pow2ceil(region->size), 1 * GiB); =20 - fd =3D vfio_device_get_region_fd(region->vbasedev, region->nr); + map_base =3D mmap(0, region->size + align, PROT_NONE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (map_base =3D=3D MAP_FAILED) { + ret =3D -errno; + trace_vfio_region_mmap_fault(memory_region_name(region->mem), -1, + region->fd_offset, + region->fd_offset + region->size - 1,= ret); + return ret; + } + + fd =3D vfio_device_get_region_fd(region->vbasedev, region->nr); =20 - map_align =3D (void *)ROUND_UP((uintptr_t)map_base, (uintptr_t)ali= gn); - munmap(map_base, map_align - map_base); - munmap(map_align + region->mmaps[i].size, - align - (map_align - map_base)); + map_align =3D (void *)ROUND_UP((uintptr_t)map_base, (uintptr_t)align); + munmap(map_base, map_align - map_base); + munmap(map_align + region->size, + align - (map_align - map_base)); =20 - region->mmaps[i].mmap =3D mmap(map_align, region->mmaps[i].size, p= rot, + /* + * Regions should already be sorted by vfio_setup_region_sparse_mmaps(= ). + * This is critical for the following algorithm which relies on range + * offsets being in ascending order. + */ + for (i =3D 0; i < region->nr_mmaps; i++) { + munmap(map_align + map_offset, region->mmaps[i].offset - map_offse= t); + region->mmaps[i].mmap =3D mmap(map_align + region->mmaps[i].offset, + region->mmaps[i].size, prot, MAP_SHARED | MAP_FIXED, fd, region->fd_offset + region->mmaps[i].offset); if (region->mmaps[i].mmap =3D=3D MAP_FAILED) { ret =3D -errno; + /* + * Only unmap the rest of the region. Any mmaps that were succ= essful + * will be unmapped in no_mmap. + */ + munmap(map_align + region->mmaps[i].offset, + region->size - region->mmaps[i].offset); goto no_mmap; } =20 @@ -408,6 +431,15 @@ int vfio_region_mmap(VFIORegion *region) region->mmaps[i].offset, region->mmaps[i].offset + region->mmaps[i].size - 1); + + map_offset =3D region->mmaps[i].offset + region->mmaps[i].size; + } + + /* + * Unmap the rest of the region not covered by sparse mmap. + */ + if (map_offset < region->size) { + munmap(map_align + map_offset, region->size - map_offset); } =20 if (!vfio_region_create_dma_buf(region, &local_err)) { --=20 2.34.1