From nobody Sun Apr 12 04:22:14 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=1770779249; cv=pass; d=zohomail.com; s=zohoarc; b=mzOte87s/03cbPDunYBGEWLMuwFvEp2p7wCeG1wq+blWC0fNN5gXq8ZwKnzjSdsTqU7D2CYSzo3WVC5WekPUuY1Yt0V3dwxkztgBgiZ9vV0aKbv+W2aDs7VnkfH8fictTj6We9HD2IVtmzG80eJLJWaG2dH3p6xmAIlV7uxujFA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770779249; 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=opOlXl9Jtzv/LIxeQsJ76iIHrq/JKxqomzYHxMl20Ro=; b=TFdbO5Y5s59Q2rvQZb6rzjj+/EBoKIQlJW8TW4XqGfFTJVse72jKDgPMwsqoglIIzuMDjL6VwA0M/aGjDofbNPYQPfIjTgHEKYe2qa5TyA0EAj8/sFRsxx9bJ3+bhEuiwfeGK+yg/RsKKsFLELg4n96H+Q4AEUCNkLh596RTt80= 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 1770779249442763.2341235473576; Tue, 10 Feb 2026 19:07:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vq0Z1-0003u7-3o; Tue, 10 Feb 2026 22:06:51 -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 1vq0Yz-0003tq-8W for qemu-devel@nongnu.org; Tue, 10 Feb 2026 22:06:49 -0500 Received: from mail-eastusazlp170120007.outbound.protection.outlook.com ([2a01:111:f403:c101::7] helo=BL0PR03CU003.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 1vq0Yv-0004FG-Kd for qemu-devel@nongnu.org; Tue, 10 Feb 2026 22:06:47 -0500 Received: from CH0PR03CA0084.namprd03.prod.outlook.com (2603:10b6:610:cc::29) by LV2PR12MB5725.namprd12.prod.outlook.com (2603:10b6:408:14c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.14; Wed, 11 Feb 2026 03:06:37 +0000 Received: from DS2PEPF00003445.namprd04.prod.outlook.com (2603:10b6:610:cc:cafe::fe) by CH0PR03CA0084.outlook.office365.com (2603:10b6:610:cc::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.8 via Frontend Transport; Wed, 11 Feb 2026 03:06:33 +0000 Received: from mail.nvidia.com (216.228.117.161) by DS2PEPF00003445.mail.protection.outlook.com (10.167.17.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.8 via Frontend Transport; Wed, 11 Feb 2026 03:06:36 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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, 10 Feb 2026 19:06:17 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 10 Feb 2026 19:06:17 -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, 10 Feb 2026 19:06:16 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OzmUpwL8cEXa/j/t8KN1PhpWJEmL7SgUVhtvcPCRipGgzk+mOWhC15A9Yskb8wg7ZLybtSVS/9nqLbo6ecdPokro/KiSBaIOMEcKOPyIl/3sl2gTwFwvzSY1o0Yh+bTH7Mk0qu0Qz3t6Bfyq8R74U5whhv8iFL5Q3IZQUiYffNX+CfPn9Y1BcU+zPen8NkM8tMyX92aNCiGAa5tCxfcHmsv/gstVwGTj4t/g2NlHbUkISzCGNqjhpwVW+PN/2ZUh8b2KXJuE9qreYJpAsBSMu6WvYP2c2oerFPh3jgCtJSp3VAbO3Btk9WxZfII96wPk4++QL2HlbaCbl6WJty9fmQ== 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=opOlXl9Jtzv/LIxeQsJ76iIHrq/JKxqomzYHxMl20Ro=; b=vTdvekvpBl60GgwDyfBSvqdyHK51QFT/awF7c3NRIfQzFg0NlHI5pttx3Q83CornJ3ztW8+07ZibXByHChRCL5eHhJc+aF4lUTOUBNS0yaT/kb3KJ9oepltDWOrl2PPYLFEo5Ro65BCegpoLsotfCE14esrgqZQpQbsY/Ju0a1bzZzA/azeUznBd+0NkodLHCiZ6/4/CPg4poVNxq7uwDH7c16JEVU1hl2sBFOmTY1nUGeCd8hVRKja2QvR6witXGSacw0Vz1HaQTZUWwbBd+urW45ALvO6t9ZJU80fpaFBnGr3Z7jz+tDsgt4f6ULBDFVshGGHm4iOi/wqfTSCmOw== 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=opOlXl9Jtzv/LIxeQsJ76iIHrq/JKxqomzYHxMl20Ro=; b=F6ERtt/v6+koiXJ5gtknBT1GjBVZmSSoQIxs6P1Kup7NGEL4sPVUv3YUZofLKVvdgodVb81aQ2Gc1HwhzJgXdfijuPLMJTBjUmhZX3uSTDDyJ8CEa431Od7xaFX16KHJFCxh6ghYMrZlf+Xxi84NByAS/pkoNQu/f2GXR/FI75c2jBmCaViHgxF172lZ388J203tpUitCISI/zqW3mKC6CLjtMJEpgtKvOgdA2nKzFHoO2Xvnpzo/BoYheIaD/vI2rZeAB5ZkC50CK1OeAm0wir0SZN3zh/9jra3pQU0R6CFQbQYwqszYD5l1kpO08zLY3D6Wouxq/PyeLgWIek6pQ== 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 v2 1/2] hw/vfio: sort and validate sparse mmap regions by offset Date: Wed, 11 Feb 2026 03:06:14 +0000 Message-ID: <20260211030615.3202-2-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260211030615.3202-1-ankita@nvidia.com> References: <20260211030615.3202-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: DS2PEPF00003445:EE_|LV2PR12MB5725:EE_ X-MS-Office365-Filtering-Correlation-Id: 90f74dce-a66f-42bb-c9d4-08de691a91d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|82310400026|36860700013|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?CE6rp+46wiZXauL9NIbXaPZu50lfMc1fENxctReB1h1bf8yQVepkvgzylX3L?= =?us-ascii?Q?rsbLGLSmY8zdvFzKRxO2z+HpXqP7wXDa7C2FRyJ14Q0rbJ1KxIR3ItYY83pV?= =?us-ascii?Q?rw8tMr9hLlr0nZhw5yui7w5coHlimpWnsNBt3ptdDsxfBvjnxxZd35RO/QVg?= =?us-ascii?Q?snKhiWh74D8DB1Pyy33jdhCyv5oWZtsb0slrlUXawl51EPrE2Wl33HNVlc8f?= =?us-ascii?Q?UL0EKclGrtpSCe7ZXGgWblOF70Hzyo3RRjiw4gPQcAu5mVLv/7aj22ncmJ06?= =?us-ascii?Q?m4E7liAOSQ+XOIW5L704l/Q1WoZmJeLnGNyC32mp+4cf2Q2dfkQ8Y7oYy3cv?= =?us-ascii?Q?o5Wn/9MNofS0TCNo6TujiquiFc/ouGKwr9A07Kjr8z+FVyYD0RbirG+gXOA2?= =?us-ascii?Q?hrXR6iUzG6iaIACW0H+D/iqRSluSQjXB5hC3gr6TaS/QJGdSgAllxqK0ytZ+?= =?us-ascii?Q?Skvmclf7Tx3h0FMJAQmaeJ7QrJl7lE36vQjGStyNjndF3Iqqzb/S/Kh6EJHB?= =?us-ascii?Q?y2igmF4o6RejpuxHOdE5QcPwHrXXGPL6bVRXVHWa2D8CXCIM3KPNUfVS6JeH?= =?us-ascii?Q?FrhQTdzpgWJTRonfQpJcE+nso9R/6NV7SPsHRvUDuWJZzfMvb1PKZKad8Es8?= =?us-ascii?Q?50VjfZroAW+iKR2lLF0UGNyISfbHDhn4sZEkDsLqYLwEOcXJGb5uarpv2J++?= =?us-ascii?Q?cSfk4LoTwZkDQpMJFAaqSL8zDvfPNwKQ52CU16PhDUvbgACCfCI8KfED4sz1?= =?us-ascii?Q?vEA5LnFdGJn29Lyasi3HogEZR/LmoVyRJsY/3PO/zkc6GZjk7h9/vloDs83l?= =?us-ascii?Q?raKPAywx/7IPJ459aU1+Bli0o4JUZrCVl8QtZaLDO4+7uLG+kG35hC0qntdh?= =?us-ascii?Q?JqPC1qpgBVqH5sGxmKYPCjLE6/zMKsfJJppEfU7kuytfa69z55aMmL+8TwO5?= =?us-ascii?Q?s49oBogOUFVb2kAJTQ2WCJGRz6v71P2ov/m/aXwxjgAQi/4Gy/k59WzV5+S7?= =?us-ascii?Q?7F5dq8mVewdy0dDHRsq0GDL520qzEbhatE1wcFhFyzih2KjYSvHr/TyFMRBL?= =?us-ascii?Q?SeCy63ItPElQVDH3XHRbEcpbOp+nmWEIfhcxjaO5UwbF/NhszKE51RVMoWZE?= =?us-ascii?Q?pmJ5j3PhGW2+095ae1FjMrgLTsURU1ay1B6+CaADY0mb8cQZhoVTXzV+TVCM?= =?us-ascii?Q?kuQFVfGsftHZLkPmVNxfsbp+94lpS7ZP8gHZcyzuyGo4h/Ji0YzFuRldN7/i?= =?us-ascii?Q?iY0QPgCw1qG9yF6gyZgM/xsHnJNDnSAdoV4NJXUE59hgoUJ2ZvJYtpzSVrox?= =?us-ascii?Q?5ngFnTtmHfVeHcYiiLTDCKsgM8gD1YI4VZ0LLay7GjmVY7XA5fJiJNutmafm?= =?us-ascii?Q?VKzQRqTpT8FrFe7nkUoIFwGzLIuH+7rIHedT2Oar4Ax91u4CibAGSumyw+hc?= =?us-ascii?Q?v9Ib20RNe61+239lj++a6z2P4y2GqfCSR1PSYuyk3K45bwkqhKG/CRoipNQk?= =?us-ascii?Q?uhUkhZMHrsW6z9z6JPSRl7ofkU5qQAR5sSiRGMPczBH8OiTzl8VcCzJ9LIn2?= =?us-ascii?Q?sCvG/YVDLR2NCjoWSzrhKJYHVgT+lDdJo1xDfQTQ4i28OirGHwVOQlTCWZJh?= =?us-ascii?Q?A5YoU2x3aJO1BmM20CrLg28at2hH4hQfH9RG9jBkX4mWkrtOtJOJamvZJS3H?= =?us-ascii?Q?+NgN+Q=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)(1800799024)(376014)(82310400026)(36860700013)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XFplIeyCfviqqSnDrxtjK9lQaYvc1n0WEm1v0LLAsJLCNCFmYol6n1q1SYsewVrgpguogYJrSpbkzgdz9cqMqFhw8u5se1UP9t4NVnnLE2Ih1mYYvqLstqQx5dBbzxO5pWRibrLkXLtoU2EsfKqMZInCXY/RqIZEXbdQZBJUD7vt1ZBlp2u6t/+M3ob0DceXkhGFGw9k33C4oVb6Ked4sZuUGm1+AIz+06ZJOZ1i3nHY4KPC14nKP6Yk6n2Xd7t/x+ou9oSTMGuW0cKvZFvuAUxhe0+uZKEWrSyAhpGGjJH7tWcwYGwI61wekblWEn9TjKJC8x4HJw3OidK4R8ZLovCnzkgaYII9Ws2RRBdEN4NUsEJwWCZP9IiB+u7w4hHwOb8ZoO/mjs8Yid3jgEly6MI/Pezm2nDK/x30lCQTY2oaIzETFW55zOvpiKcRpUEt X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2026 03:06:36.8369 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 90f74dce-a66f-42bb-c9d4-08de691a91d4 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: DS2PEPF00003445.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5725 Received-SPF: permerror client-ip=2a01:111:f403:c101::7; envelope-from=ankita@nvidia.com; helo=BL0PR03CU003.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham 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: 1770779250980154100 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: Shameer Kolothum Signed-off-by: Ankit Agrawal Reviewed-by: Alex Williamson --- hw/vfio/region.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/hw/vfio/region.c b/hw/vfio/region.c index ab39d77574..177494c379 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,34 @@ 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 dont 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%lx-0x%lx] overlaps with [0= x%lx-0x%lx]", + __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 +254,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:14 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=1770779249; cv=pass; d=zohomail.com; s=zohoarc; b=jbUBRFduYmsqUof6r8vjY1qtqi2OWxb3Xr8CY4pXCeRw/GpF53qy2sK+TuHWBNvxKihbsnxE1RLed67BTiLv9x1Qq9DAgiTx7mTO+t0dGhc5JIN6/wRpzpBbMxubq+qa/NCUXXWNS8LIgDlcCft4bjVP6RP2SNGgIxxDwxjb/Ww= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770779249; 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=95RL3Mh1H1kdrIcjxtOhVXM0T66n0BtN1RVWjon0+L8=; b=b+MB9Ia6B8R3OWUrYbZxGXVGE2zk98ujF0r7QBgN5pZzWPtY2PNHTvFwa3T+ikdOUu68oFXDMAj/2VR2JSRVa12MVgc/K/reMdBhhgNrbyBJOtO7xkmQVjyemhC6yHTYDq4gmUsHcdV9Qctew65PGfXZoVul6/3GS01bxH803hI= 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 1770779249700694.6486916046782; Tue, 10 Feb 2026 19:07:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vq0Z2-0003uh-GK; Tue, 10 Feb 2026 22:06:52 -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 1vq0Yz-0003tp-8U for qemu-devel@nongnu.org; Tue, 10 Feb 2026 22:06:49 -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 1vq0Yu-0004Eo-Vu for qemu-devel@nongnu.org; Tue, 10 Feb 2026 22:06:47 -0500 Received: from DS7PR05CA0029.namprd05.prod.outlook.com (2603:10b6:5:3b9::34) by LV2PR12MB5750.namprd12.prod.outlook.com (2603:10b6:408:17e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.14; Wed, 11 Feb 2026 03:06:38 +0000 Received: from DS2PEPF00003447.namprd04.prod.outlook.com (2603:10b6:5:3b9:cafe::d8) by DS7PR05CA0029.outlook.office365.com (2603:10b6:5:3b9::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.7 via Frontend Transport; Wed, 11 Feb 2026 03:06:37 +0000 Received: from mail.nvidia.com (216.228.117.161) by DS2PEPF00003447.mail.protection.outlook.com (10.167.17.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.8 via Frontend Transport; Wed, 11 Feb 2026 03:06:37 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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, 10 Feb 2026 19:06:18 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 10 Feb 2026 19:06:18 -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, 10 Feb 2026 19:06:17 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gfgwd7M0sbDsDTzNgGZbf9K1/OhKqIgxvb4BzUOZH75LSPPp7zShUk2KYoF0mefHy5BwxBVJIcKW4o4h8ag7i6Cvk8s38D7oemYJA2pPcKU6kteZoHxcR/gGES+zZ/V+vc8b69D6zkhxqZ/jnoDUbrAR8h2wCB52gm/WnW1aA5FfdGUZVZDf7JTVzEdMx9PfuBxxLE5ygAlShk2pjeztJTW1XNKpBsl52HIkxhDFETpZJxwB9iYoqqRY90j1vDq2Hahi0Zk9uShM71cDNUdxY90vB697LBsDsbr0te2xtX1X0HMxG6LGBsInYmRvX0xOLYW56ioaNC3s8XtUfbIx2g== 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=95RL3Mh1H1kdrIcjxtOhVXM0T66n0BtN1RVWjon0+L8=; b=GLA22dSpH0OLX0DVS8ZeGBjwV7YUZaWQxsaiHJLhNsWwJZwPs02FKZIc/dVSDfvqt8FZH8zpsm1muaUIMIZTEHCVxRHM7ovUB36KTg8bn9qBfH+EimyqaJNxA5z6HmSmNYwqazjjQM5vUqnZMPW4VV5tiSbZ+wt57v90vR68D+sJkQ67zHF/07Tjp0bBNgO9Om8kYClduQEKOt+ANF1xuHfnmlIgjw2x5i63hLEQLi56TEl1c1oYL1SeqwAC6yxuaTzaP/erYVdEbwqU/j6eXZUDZBvn8fCQYcAUbtub98HnZzio1iNdli2lc8fAm6Ol8Ke+fBGLjJHIHjr9NAutfQ== 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=95RL3Mh1H1kdrIcjxtOhVXM0T66n0BtN1RVWjon0+L8=; b=c/biyuRjAZRgVEBjJuq7q+Wg6MZsKtIdlg5NRADsUOQHfEQ6Z/Avqh1PshDd5AaICr0XvJ8p4+e5tD66eEtEc2h3TyniF2aBDIVIlQ3jE4YVTSbllzBElj+6vIPjsPp1t8UiIQaGhWUE0w0Tk2BA4q320MRj7/j/v54I2XVPVHeyvON58vWv/adcUWwudz8KFWJp+ReYgqAgGzxnsM8c3yj2+Q0rTj5SQ/eAh7nQDg9mVvr0rivCqUP6G7G1TmrmaGWRGlm63dijA2cN4OzVJubxMz0CJp9thZRng2cWJcsH7kqF3sYIZnhfXIfrro8/SfUPCbcM4wP65vYbV7POoQ== 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 v2 2/2] hw/vfio: align mmap to power-of-2 of region size for hugepfnmap Date: Wed, 11 Feb 2026 03:06:15 +0000 Message-ID: <20260211030615.3202-3-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260211030615.3202-1-ankita@nvidia.com> References: <20260211030615.3202-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: DS2PEPF00003447:EE_|LV2PR12MB5750:EE_ X-MS-Office365-Filtering-Correlation-Id: 49241299-f041-49b6-9a54-08de691a924a 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?YktJinRHn3+6xa/ogV9TeVh7hSes4YY1BXC/cNaTWfvehDGDodkXuFhyf4Lo?= =?us-ascii?Q?8YKYXXr8QL5+GDMelc56Rod4UgMBKo4dmdpJcrOxPQ314CjS1pME2tbxtTDV?= =?us-ascii?Q?udEjWrUGTIdu0eVyOf/nXAAxhtYV+H4pCRcJrSBI9gCpXPaGQnkFyVglzzOt?= =?us-ascii?Q?VCsYhsNBbgK/fIq6Yv1pVwr8MCCo3c6A5b654QK/n0VCL3TjnubzDD7olWDn?= =?us-ascii?Q?uR19L3106mp2imJvREfiD9xMLcC0mu6KkfmUaeYNWd8OVBthLaXs9klwpTnc?= =?us-ascii?Q?Odcjeshbe2ndO23pAFviptebqGoLt0Z+S2r9L7SdOwhDlcAo+r59YvnuKm/V?= =?us-ascii?Q?2cRiek25j8CXJilY/fYNL5MymENXEnNd0Yi5rR7mOSLKu39W4/ntXyyPQLa2?= =?us-ascii?Q?p/C1zYYn+4fYZDxJnH3M/nF69yJ40CAEQKLSu+0ftsJjXC0b0RZUKqJetzQk?= =?us-ascii?Q?MDbGV76L+ZEBrexyq5ildX66J6edvRiNfx0bPoBAkQBwvVGC+D+cxOnZvgLf?= =?us-ascii?Q?iS43C+rx6CTqdwp5FIyXaOGVvYPvzeM1PQm6uwhf4KsleB6Icy+a3qZi+Yft?= =?us-ascii?Q?WOV17LdijgyrWnryDPXelqOXgAmshZtVGcQc88ORW8tXxpRhxlqtESMdOZXH?= =?us-ascii?Q?XKq2rfOo+m2xcWaaubMs1dQbS2pN+hnZjH8pQDALN2WDzEkvEl+tOn/Aa0oV?= =?us-ascii?Q?ht6O75qOW9Zj9sOGhIN8YW3rRT1kyY75YSMGVUUzuk6NWT/JJcikZEAgH5/s?= =?us-ascii?Q?3uuo/bFv7jju06sFz6cNMdmWs9E5VmihE+/X4oTE10J5XG4xpGFEbQnDUw0M?= =?us-ascii?Q?COH4/YIRsI7rC/30oNlyiBwZFkmGAbioounxlOyEYLoB9vI5Ly3kEUSXSiC6?= =?us-ascii?Q?ZacbpEXij/opuKmci0N8D4Ii+9is8IsMErd337wah4PgZn7qisgXbYIsxzXm?= =?us-ascii?Q?R/kxLwGn8573QqKeodt56ispKrrM9DosZyWzNOhsAxlyiECkczYL2kBXo8Ey?= =?us-ascii?Q?j1XGNPdXnleksgJL4SrYBv+zyld1zux5OoDqL/rKYUCjgSqAPDhyLNOgrEub?= =?us-ascii?Q?XeSYdxgjp1FvLoV7FzZBaIMD2GwuEG9n3i16UUdOSxZ0x1zEY01ndUDKErik?= =?us-ascii?Q?OcMN90vzxvQD83ZwVZM0JQbZnN9YqFx63jiuNFLmcFM+7zomV9W1E4akTIt+?= =?us-ascii?Q?52L9X0G0b0gKb7gAzRCwxbXw7m9kX/Y8DX5tTTFAx0FtuQl4N8HUj8Za7dRj?= =?us-ascii?Q?rP/1W+9Q/oZqSuyEreGh+Hncc5MUpJp+8Gda4Gh0CSsJqgcgZ8fqkLoTe3wB?= =?us-ascii?Q?fPSg5p85BxNBZFE79VdQzffCq7BuQEYdlGPGI4XzhXrNHE/Y+EjN2BPbRU6d?= =?us-ascii?Q?ekGgjXr13BtkPC6mLhL8Ro+vGEdcbk9UWbZxuOA1iRyQjP86ISgy/Fy0tCX8?= =?us-ascii?Q?DbvBodp32BPthu7BVAnuZ14euBFjLzOvm+4dkM4nbDnEH/XhoAh5MKC4rhQE?= =?us-ascii?Q?0+5fULiiJvE5VTc1CHLUFvCf97OYwE2TKRV2OvrgsKiVG9lZC4BkdByBR92n?= =?us-ascii?Q?kB5APXhOuX2clIt0y24HLhmc/8VATCzJac7v+Km03hz5cx6nw0nQQ+DAIQPr?= =?us-ascii?Q?3QQU6kznW1mrAEuJNduhYr4DLwPrCquC8D3nSxBizS5RVXWh0K7Zw0r0T7CZ?= =?us-ascii?Q?dL29mQ=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)(1800799024)(376014)(36860700013)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: AWr6S9/WCB60ChlV1Y9lhRW0tWJuiy6dqemZ5Zo6lbO4Q92NEORFdS3ftQxH0eEBuBYhHHSSwnULVIl8scf20Jwofvf3G3tknCLxenN4REHe8ZLVmk0Vfr5x8uaDlZiJznClbeUTC6TwSTGoyv6jHvBo6RBUXAf+nXDBBdoewkeGVyLHuNL0aa5SaxwNkgVqzOI87mVX4aXczTdTkNU/Bspm4afwp34QqiqBuCjFdD5UxuuKiFV3BWC4W7qMgMEtwk8r0vPjm4E09fCk1XWIOsR0Rgc0EgyovPaRr+A7b9Y9/7bCBfhdcualLgMhZgbp+5FjJP8StLQLBCHirmptA5SzR9yTIbry99Rwrwl3iRcQCyknDtSYTz3jxwDnx11bzxIIv8O5q9e+idNHOpnvdrR3YAy+DCky3wzEvVzQL3T2UVKU7GvjbPQKb5nNYRwl X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2026 03:06:37.6198 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 49241299-f041-49b6-9a54-08de691a924a 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: DS2PEPF00003447.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5750 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.001, 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: 1770779251352158500 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 Suggested-by: Jason Gunthorpe Signed-off-by: Ankit Agrawal Reviewed-by: Alex Williamson Reviewed-by: Shameer Kolothum --- hw/vfio/region.c | 81 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/hw/vfio/region.c b/hw/vfio/region.c index 177494c379..3f2d72dbc5 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -341,8 +341,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 @@ -353,41 +356,56 @@ 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, + 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 @@ -405,6 +423,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