From nobody Sun Feb 8 23:27:01 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=1769746085; cv=pass; d=zohomail.com; s=zohoarc; b=RbxmO+IeqtJYTyuHkyMxUhK/Sm05Bf2i5+QJwJdzN97zsQtXODQQuxAC1RyKWRptFVTngEMYBGdIKvF7wXOY0MLGq+EBE0mKK14pRQi1IWpirpXepk+9QtFFtrjusVhZsOo+dyCIfvjbk/t7YYSXmcECbwyGLDwf4vkndXfou2I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769746085; 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=nilA26uQ9HOXscVqW3LzJpCr1kOlJHJK8FaD/R4e7uQ=; b=kTFFJc1JEYzAxPufWtZoH+sV/olfn9sARB/JZmdznDg9cnVZt4ygpmWRovVS+WYOB6nQy/qYc5gw9xuw6JBq9UVmjvhS67Gn0wbflQ18cFB9+SQMpWYgoRLuVyrI97nG5S5wZLbmtA3KzxzinJdWwtXu4cvc/7cFHzrmmRkKO/Y= 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 1769746085147164.04026083936026; Thu, 29 Jan 2026 20:08:05 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlfmq-0000lY-BD; Thu, 29 Jan 2026 23:07:12 -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 1vlfmn-0000kd-Do for qemu-devel@nongnu.org; Thu, 29 Jan 2026 23:07:09 -0500 Received: from mail-eastus2azlp170100001.outbound.protection.outlook.com ([2a01:111:f403:c110::1] helo=BN1PR04CU002.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 1vlfml-0002r6-8t for qemu-devel@nongnu.org; Thu, 29 Jan 2026 23:07:09 -0500 Received: from BN0PR04CA0042.namprd04.prod.outlook.com (2603:10b6:408:e8::17) by DS0PR12MB9347.namprd12.prod.outlook.com (2603:10b6:8:193::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.7; Fri, 30 Jan 2026 04:07:02 +0000 Received: from BN1PEPF00005FFC.namprd05.prod.outlook.com (2603:10b6:408:e8:cafe::e1) by BN0PR04CA0042.outlook.office365.com (2603:10b6:408:e8::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.11 via Frontend Transport; Fri, 30 Jan 2026 04:06:57 +0000 Received: from mail.nvidia.com (216.228.118.233) by BN1PEPF00005FFC.mail.protection.outlook.com (10.167.243.228) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.3 via Frontend Transport; Fri, 30 Jan 2026 04:07:02 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 29 Jan 2026 20:06:50 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 29 Jan 2026 20:06:50 -0800 Received: from localhost.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 29 Jan 2026 20:06:49 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tNbSMMhMZVFD/uT/HQZs2kTH6yyyUXFvFyzGKxjduDScAOvBwIZGBZdfq8qF/CGub58DAZRTmkU4aRD2d+GVrmub93RJ0Y9fDjwUE7oEOq6udUtNMCEZHNkonbdH/XUb47TRv8JDXJ+3BPusMsiCAm/fIOsFeevQZWzOdoWwLEamb+Xb1bcZeed7VnOYejiOnmu5yUxPDMRb1pvTNIfumiM93NS1grPl9qXupdS07e8ErR1mXAVsdkOkmCs/YjJjQVvrADZmpennZN6BMK0OD1fEu2OpX7ihTWHwDxBKBPe2I+P8kxPjUpMZYVQih6CHycGwbqvGwimah2PiJjXg/Q== 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=nilA26uQ9HOXscVqW3LzJpCr1kOlJHJK8FaD/R4e7uQ=; b=KDA/RNAOddeJ5kKgt8KwF8pUm4TYkhSklftuxg2GqE60DzQASNoTBiMNPr8HbdRxMVXUmiIiQeSVMilZ/dSzKUqpyV1wuoNJ3vaKNNwxT4MosOG/RI8TuARjJFL69lN/BhUg0l3aZbQoB/nhFFbwS+zK7YnqZkDluqi/4F5ULilMaVlCut/Bd+2u+P7zI+Yd1inNCK3qBH7BM5H8d6+F+45R/kSeJ6/bvksMcJl2tpHCRLdxYopBY4D/JQypEEMqvEvGW9nme1lXCvAJvW0UYrkg35dbgq12R2654RDtCqORru2dApY0cO4m0HPD3YiPXMXD8mjROCesl0X35Qo8BQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=nilA26uQ9HOXscVqW3LzJpCr1kOlJHJK8FaD/R4e7uQ=; b=RN3mYb5CglyegpYnAtX8/+i1jYjDBqU/XO9u0hd8d2PO8i0bfPpWp1CexVrSOTcQCWmDS2+8en+gn8xdpPbimjmdYCmaTynZR+gAtBpR4LtQjiov3jwUdMx/zV4hgpzYLqiKlvHzzF/HxKOlwvxARzchh1g/w8JZIF8rgG0LqEafAaqUIFhvd2Rjf9+AddM45Y1f3BcDDUV1Ve0RuNRlPBjUXWI07Om+DXvNXBCsa34TguKC4w9AZ1Jl1pFtcGC3mYCW9H3YZg8PfuI4jvoTa2iSM+FVy59h4rHbR/Wc24Ha1m3hvsgeKpJKotBTno89KOJVz4oeHm/sAZCAk7L/yQ== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C From: To: , , , , , CC: , , , , , , , Subject: [PATCH v1 1/2] hw/vfio: sort and validate sparse mmap regions by offset Date: Fri, 30 Jan 2026 04:06:48 +0000 Message-ID: <20260130040649.42485-2-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260130040649.42485-1-ankita@nvidia.com> References: <20260130040649.42485-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: BN1PEPF00005FFC:EE_|DS0PR12MB9347:EE_ X-MS-Office365-Filtering-Correlation-Id: e84a07e8-8156-45eb-ace3-08de5fb505ac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|1800799024|82310400026|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kUi7zo2UZhgtcjDr4bbrm5uJiDZiuNyrM3k2n/6ARKrd41OfCx5CS3kqts9q?= =?us-ascii?Q?OD+JalWg37FXkKwmUnvrHDt533cp4dI1xqGY7uaQNDhnbezfZZGnn6kZr3em?= =?us-ascii?Q?uIOLVzg4lKy2j2tZGVFdJRVYERAIg/3scO0dRKmPE/3J2M6dB2hvUALz19qx?= =?us-ascii?Q?m2HhYJCQ6Mjm4P+B9VrsxlMkNvP9lVlVir+oGVW7ninl+d0zc/5XtgXw2Ofl?= =?us-ascii?Q?lWRMJnHJ6d3JAViQXLDBRnWZdWo7n3AKhYlOHYO9VRSU44IYuB/5m87X/HzJ?= =?us-ascii?Q?jCuLXaWIvZf82Uc+Zi4ar173QqdLjKeuQksI+R4TlpJdJjwrP26raphckBJt?= =?us-ascii?Q?mm5KEf+5q7zshpQmg//hziWoFUBzauAmBhFrrHeBqhh2hx4HU0iQkQTl31h8?= =?us-ascii?Q?c8QxER18RuqXXMPP01M+/V9qNTSrVi2vpzpMkyMFD+LerrAoFaNIFET7lgb6?= =?us-ascii?Q?0zJ16V4vLu7oj6MUuybvhqqvEUUTNOZJGxpVmvaryO0ZsyOajW+B+BnE9bNx?= =?us-ascii?Q?vGUVeDe1jh02Hm6KdwSPFv+A7nLg5GeG0AAIyoNpWlQe6G3NMGv9b943RQtw?= =?us-ascii?Q?gSmq+eeGN+Xv1PD7jCx+428hssocXQuXSllDnoTvEYN/sFYEBOTQki6T+YT8?= =?us-ascii?Q?qd20e0nSl/60eZ0JeFt76qgnujl2oIpVbM0SiglUWhcja3w+C3R4Sbl+jXI4?= =?us-ascii?Q?Kkt61JzQyztQcybvKEU1UkmAa+p0he03i+JnAA/jAreHnHJMMY04zqxLJTAh?= =?us-ascii?Q?OVcl4i5YVdqvnrMfCym9ZfQbbTBzahjsX7IE+D30/lgg7Nmqp6JRSpzKaXYU?= =?us-ascii?Q?jTqaq5vg6SobqKbYtR9Ls2Vq+3fq0H6722TvwQFm2w8lSooo+T5IQG4zTV0B?= =?us-ascii?Q?GIGS295BM6baWLUiPK4Kc6xSGUitwl954eX122f4k74TPP4QJ+Yde9qtt5Hx?= =?us-ascii?Q?8ZOBR4fw3mZaVElaq+RDirgb7vbPBymoyf6mNh2dpblgNII0Z8RoJQlC8B7x?= =?us-ascii?Q?lbuUvv2TEviEVK5bSjYxDYIJgtJmukudsDojDRExES3oNCkSjtLnhmaPe2gm?= =?us-ascii?Q?KSPLlM/CoBqusSnM3au5mSFvFBfWllgCBJwfuflcGDSW5/+Lhz8lF8THJ3JH?= =?us-ascii?Q?YztuuqiJhCksWi04q3l5rsLy51BVj8MxZdOlxREeBz/t+w2TEhMN4wUHNgGa?= =?us-ascii?Q?nmb8ny+evZvUl9zKVtAB8un/L/qyAoE8osYEOwbbRwri24BUFMFmgKeGZ0JB?= =?us-ascii?Q?y1cpYGdds1qzDOzGw/ydRdpCkjN0NK9KMnZT2uM48EvtA8qawFGtbHv4iy6x?= =?us-ascii?Q?XQGblzSTxr7VVu6v16V3gNg6EMhUMpBOgloH0rTjGPJMkwg2NrwmY39+Z4ot?= =?us-ascii?Q?GQ+ZvrZhj/XqXMyrYK4vGdDwIb5T4aOiRkhH/c5dS3e7ZnWtLuJUGZl9I/OF?= =?us-ascii?Q?qijmeGS6UZCUWRY5sdSJngy5PJhePIS8BvZ3Hesjiedlb0szlbgm5v21YM0q?= =?us-ascii?Q?vqTqGlzkipJsYb4yFy4SpqZ1L9ke6ZaJP7go5kt/3T2ZvG3BnaBBlF3+tKxZ?= =?us-ascii?Q?xbN5cKAM7KipD67icQ9YM0v/3+1rgKViOMIkRP8vhIIwmev3qJfFNiruRUxH?= =?us-ascii?Q?V10lQb3VU5k6OwTckwWIFFXWjVx4TdCXzBJIKen5EQZ38I6pQ8Pl0V1zws/3?= =?us-ascii?Q?fw67FA=3D=3D?= X-Forefront-Antispam-Report: CIP:216.228.118.233; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(376014)(1800799024)(82310400026)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d2gcWe8wquPu+QRrG8cDWnr2HydhUgLh6+XQ7cD7NCTt4PZIg3epWyEn9cDV4b+r1TatnshheFJBqcBIB/vExXwIX6gLZhKdCyt6SBUaUy8dWdTOmMdsgAr/7vMbk9VSDpbm63MqMLg9XMNpquhKX5jwbkX8r0+hz3XLckPLd0sH5R5C0V1GSsFlSmI7XXy2aHxzaCkeNLIU85Vh64sS0fAqXy0A3vf5fKJqLzWyzGqikuhjl/UkNGu5ex/bz/pzOsjCI2uyeun7KQ7+rgvXM5utL0xvc7n14cso9jHsb26ttJNdqsVXT4J3f8/g42nzAQjUu8C0TuGuZiOCTi3CGLF9qJkzvoR8Zzjbeg/DF3GGekD3n6BCjjLxJ9YraWQvnEuVxIKt7n6/oUhRcS4Jd29VMIpry2PRgLb/K8sqZbZoRq30S+g7xLm4p2DJAbI/ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2026 04:07:02.0386 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e84a07e8-8156-45eb-ace3-08de5fb505ac X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.233]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN1PEPF00005FFC.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB9347 Received-SPF: permerror client-ip=2a01:111:f403:c110::1; envelope-from=ankita@nvidia.com; helo=BN1PR04CU002.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: 1769746088014158500 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 Signed-off-by: Ankit Agrawal Reviewed-by: Shameer Kolothum --- 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..7622ae5683 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 { + return ret; } } } --=20 2.34.1 From nobody Sun Feb 8 23:27:01 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=1769746076; cv=pass; d=zohomail.com; s=zohoarc; b=AJCLD5oxaYXSLeHhxeeLTZY1bOVyGV3/Bm44atPfrDtEpUpRWCcDEf/yRNKnNyn+WcIUH4qXGs38U9YqAon+JJnVfNHqwI24NgOtyu7hauY0tPdWS+W04RYDQfJ8bhSFDtNdyzFAIz/5aV00CJZRKDJd4RGq5mJwO0blt/6zps8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769746076; 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=yDNxPti1Wqus0Ce6NVf66lv0v9ng0grriOTlEv9B2LY=; b=keVyCqV+5XFtfvELpsNnNlXR4Eziz+zGaVHKsxdiz+XZ3xa+SbOAJDAJEo9pN2PlFXDL1JoiMtqQ8PnBbwh1VPWFz+bZ9pcwmi3WyYAKmMcuoGFBFuQLqZ2tHWOh3/kHc1zMrFP6DLa8ZSRrDKONZGCJ0JvfiIQeM4FfIld1vY0= 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 1769746076504134.67134995459367; Thu, 29 Jan 2026 20:07:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlfmr-0000mE-So; Thu, 29 Jan 2026 23:07:13 -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 1vlfmq-0000la-DT for qemu-devel@nongnu.org; Thu, 29 Jan 2026 23:07:12 -0500 Received: from mail-westus3azlp170100009.outbound.protection.outlook.com ([2a01:111:f403:c107::9] helo=PH7PR06CU001.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 1vlfmo-0002rJ-DE for qemu-devel@nongnu.org; Thu, 29 Jan 2026 23:07:12 -0500 Received: from DM6PR08CA0063.namprd08.prod.outlook.com (2603:10b6:5:1e0::37) by SJ2PR12MB8720.namprd12.prod.outlook.com (2603:10b6:a03:539::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.8; Fri, 30 Jan 2026 04:07:01 +0000 Received: from DS1PEPF0001709A.namprd05.prod.outlook.com (2603:10b6:5:1e0:cafe::ea) by DM6PR08CA0063.outlook.office365.com (2603:10b6:5:1e0::37) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.8 via Frontend Transport; Fri, 30 Jan 2026 04:06:56 +0000 Received: from mail.nvidia.com (216.228.118.232) by DS1PEPF0001709A.mail.protection.outlook.com (10.167.18.104) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.3 via Frontend Transport; Fri, 30 Jan 2026 04:07:01 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 29 Jan 2026 20:06:51 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 29 Jan 2026 20:06:50 -0800 Received: from localhost.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 29 Jan 2026 20:06:50 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a78J+QmgwJsLY14g6zVw00HRriShCvEANz9Qcz5z9DlFOgwFxahRjrWmJb14rSANKfySKrrTCOYC3uJ4cUp+04D99bFZ1w4uCiRWqm4wcI3xvCFZZx9Qa+UuImU0bddOdWkEsh5EStg7iV29XsBqHW/10c4zrYH+fRWioBak6xFhGt2FkcxAsjZvJPiEiPC666byk9MuCosTzKhHrsCzSIKCULYpbBpxKrij+GEp2az4iGM7iBYUtw0f+0hgo1fOsysoN3Z3cDky/gm6vM5xStXUU7NwHp/VPlW+BtireOqijxBMLQsscfMk4zlBUXS29+3FfiKmSesyDvRh9E/Tmg== 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=yDNxPti1Wqus0Ce6NVf66lv0v9ng0grriOTlEv9B2LY=; b=YxkqsmjOsC7C/4vZpjcgW/YG6LR5bdtsEUGPgORcWw4D2+3EtvXZ/0q0gjuOOyXgIKtNF9L+twkpHQvdxWqDG6t01Djp2zNoUEcD08jvrp/nt9U5MZ+farlJZ5U6UAJ6NKt11vDnYftisfh/pK8fEAi5QikWbotZ4KygefhBQWSqwtxDKiTpsQE0QyaQe7sL0rPOek7nT3uPRSj/gprbEJOn9Ah59l6/8CFBLpni1J4mpazp1yZxS8ub4fZ35iD0NG4zMZmJez78Jty3E3SHq2BGGfZdcYtsjorRP6QYbZK+e3bvdFsoMuXlnMz/4ww7mI1y6kKGQadE7oG7q8mCcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) 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=yDNxPti1Wqus0Ce6NVf66lv0v9ng0grriOTlEv9B2LY=; b=OtAE+Dv0/lVLEVdSdSAcVK7kO5eIJ2HS+EavBoMrLFiFofxfto214SuCGfMI5lGRoOM8gsphvMIguge2ibss6GXMnjUurTD4bQ4yUkHY333QLunepmFUX3GOcacsgX/5pEitXmocRe5Y0BzjSzjio4iQOBTeLHvUlW84ABAw3P0FWIevG+finDOBLF/keaxZbXWttC9NuiLkVIH4QJxCiYAHGkk8g/7+DrHaGxMNEjRdw6S1I8RqJp+k/yQFCnd6u6Vdv+3sjJnBsXG2L7kmBazGW4ZqYFCol8YNPhlURq3bBpfyTnBsMT5SsgEFSzudZL1hDoZNj8i1O+TNQxtLhA== X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C From: To: , , , , , CC: , , , , , , , Subject: [PATCH v1 2/2] hw/vfio: align mmap to power-of-2 of region size for hugepfnmap Date: Fri, 30 Jan 2026 04:06:49 +0000 Message-ID: <20260130040649.42485-3-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260130040649.42485-1-ankita@nvidia.com> References: <20260130040649.42485-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: DS1PEPF0001709A:EE_|SJ2PR12MB8720:EE_ X-MS-Office365-Filtering-Correlation-Id: f51c1c84-d058-44f5-fe1a-08de5fb50553 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|82310400026|1800799024|36860700013|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wj/+zvrKufZiGzFXNBzmO/CxtqIhWn8gE5JD9f6hcIOHGRXKrPjpzwfNZHoV?= =?us-ascii?Q?YFaKmuxcy0XyayC6rp7BuHUHMd3WTVQIk2XoQWPUsAhSYpyJg7EpiySFIffT?= =?us-ascii?Q?n+FZGXbWUsys9yWXGF9AfBo3xh0W9WkNFSj54uz/bIcL6DtHCAfyWpxKjKye?= =?us-ascii?Q?l61iADOjme+fB6sKlDe6lncs5eeloG3cZRlp358ttTJ/rdrMIPLgMBTO9xeE?= =?us-ascii?Q?FldbVCOGEo0M0AaZ6edGhESk65WEgwzTagSEW4H58hIpF+DPGClL42rGA+dl?= =?us-ascii?Q?pMgEQk4ktxNfR+uPXL8sQQZOAIJkGX1Wc6z7uoG8qcHM0A/DoqT89PCTrsrL?= =?us-ascii?Q?xuGMeTUs4Ex5DaKYEuBfXSOWJWx297kuZSNEGGayGZx8r8AfN3MwhhYymvgJ?= =?us-ascii?Q?pBkFC2M8fYxLasv6eHVVrHM3Ii0tUzFev0yJOe2TD8jAiwosFXF90dzMB4ry?= =?us-ascii?Q?sZb6jwXm/airHQ0BJp8ZRw9JhYEPkj9G+n+ou5UhBMv7odolEjr2+4VXLPUK?= =?us-ascii?Q?3SCCbOEsoMnJ9cPQArXbXSqp3/SEWbeN4zNyN41C5bWCb7+8xvYFjHgL6RnQ?= =?us-ascii?Q?/khIrav61D5kqqJUSk2eZFpa25fFkjkztmwo4WEweeUMxkmJe0gRJh26PgZ9?= =?us-ascii?Q?r0ieq9rCBqpUtDKljkgiGsDMLYWYzTo6COsy/15FghprXhSu36QJfbzQ5lBc?= =?us-ascii?Q?Sfg2VYC6cgQMlMl/54UhxxvWDcRvkfSSTT9/vR5MVcggnL3f5dhuWSMPx+lr?= =?us-ascii?Q?tWR3cxCiioEG1AWet6flOa3G0+YPeZajFVibz05tQADEHuZmpNM5iWdxmzr1?= =?us-ascii?Q?NJ/14HJf4jvYWm043J7OD6VwGvq5pApNQ8phxSLEJXOrXMCAWpZKAuNY6XYw?= =?us-ascii?Q?WUqu/O6MckkhL7HMmBYXb3+Bt5zCnkFGbqyKjuwacZVGggx38H3TaLI8nW7U?= =?us-ascii?Q?dRt4JJ7SXF6Ykj/DTzSga3K4dDUQsjuo3QF2PlR//TuBeuoje3KzdzSU9Skt?= =?us-ascii?Q?0WNS0AbOzpHnUEAM3PpkbrSu6BCollFK8SmRL3c6ku2bJ5w8aan3Zm+8eZQC?= =?us-ascii?Q?4Rt/CiHLDAD2h60IxkkoEwUjbhaojXV7248ATfGHPi40ybERIuNjtCiPpDL2?= =?us-ascii?Q?cBDR+7suBuW0l0QMhv8E0flxSPd46Yah70PC8SGijzzoEIn1ue3AIBWPSGQu?= =?us-ascii?Q?FMaOR/uGYa+DDqepuIITG+yB8llBsA1/1Ke4iJpEIMZ5/iQcAvlnZvaJ9ndE?= =?us-ascii?Q?QxZXFv7lNgvOh0T4m4ZdLl4Sg5WEvXxRavKKhf0h6AxktIbqwpZF9nEB+gY/?= =?us-ascii?Q?o0/2efo+U6pyy3d90RLLd9bB5X3/RKlRifBN3e2XqkdZmqcSiHJ7F4ZlzqUu?= =?us-ascii?Q?FN9GpqddCQs/Uqyr1GWRFMdd9QsfhXkfUlmIOTthfuYCdY+FV4WXZRnAHXzD?= =?us-ascii?Q?CHBnqIu6GD4AOx/iEm8A4NK2ierDW2xp+CMTvJd+upszbkrNffaB2m0Mfh8w?= =?us-ascii?Q?W8EA80SH50FHb4+xtdK4S0uIqtfRZyMbCwRT7KuEgcqiI9Wx8IPGZWH3nhc0?= =?us-ascii?Q?2YbemeYbuDe5rj+DWSRd4xu9bjz1mmgIFeDLT8nOft5P/bouOfHNOvYXWV+7?= =?us-ascii?Q?VzGIQYuD40W+qh2NYq/Cd5/rH0q9q/Q5VaJir1r9zlg0Fony3WzL50WE8Wux?= =?us-ascii?Q?cPFGNQ=3D=3D?= X-Forefront-Antispam-Report: CIP:216.228.118.232; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge1.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(82310400026)(1800799024)(36860700013)(7053199007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XGur58L1dpHvRo5osEhKbL/9ePzD/s+rS0T0IGI+eTriAL63H5cR3b8lBd36r+90/7sTcrtntFUaSgX7O0RNe7AEjOFLq74N32xKLGAB/wnHvchA6RrdF982YRTtzDoNLFUpB7zSrM19U4DSOVohLwU9uPzP6diTmE87sYbjDi1s3Qn0jPb0rpblLPsUC+Q0SXq2L26ueM/8U8MmyvUWUmcZxnT7w7kjVm5y74IST0CNfLWSz9EPKTKjfSMU23YwcCjaVfl6D3EXhc4OYOYncCgrMgZmi8Hed0EPUeAzslIsVB1+k1dqGTmQA1Vpv6aFDx6jdzl6P7OgSY6EbmUTVeaRyikFGvj/JVuJZlYIfsNEHT3IOwhSJ9s4hA4i9tP9gCNgCXg7ZqhZTg70vUBisuo6SauJ5Fk5k67tOUGbJSsy31+c/DEtsw6ZynATvU9D X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2026 04:07:01.5006 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f51c1c84-d058-44f5-fe1a-08de5fb50553 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.232]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF0001709A.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8720 Received-SPF: permerror client-ip=2a01:111:f403:c107::9; envelope-from=ankita@nvidia.com; helo=PH7PR06CU001.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, 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: 1769746080711154100 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 --- 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 7622ae5683..49f9a42e71 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