get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2196578/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2196578,
    "url": "http://patchwork.ozlabs.org/api/patches/2196578/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260215084950.4657-2-ankita@nvidia.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260215084950.4657-2-ankita@nvidia.com>",
    "list_archive_url": null,
    "date": "2026-02-15T08:49:48",
    "name": "[v3,1/3] hw/vfio: sort and validate sparse mmap regions by offset",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "364e0f5b37294c0e01841ac855fc20c949f549b1",
    "submitter": {
        "id": 86155,
        "url": "http://patchwork.ozlabs.org/api/people/86155/?format=api",
        "name": "Ankit Agrawal",
        "email": "ankita@nvidia.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260215084950.4657-2-ankita@nvidia.com/mbox/",
    "series": [
        {
            "id": 492205,
            "url": "http://patchwork.ozlabs.org/api/series/492205/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492205",
            "date": "2026-02-15T08:49:48",
            "name": "hw/vfio: Enable hugepfnmap for non-power-of-2 device memory regions",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/492205/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2196578/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2196578/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=Se1TQ+kP;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fDKWf3tzQz1xxn\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 15 Feb 2026 19:56:12 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vrXuh-00025j-Gw; Sun, 15 Feb 2026 03:55:35 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <ankita@nvidia.com>) id 1vrXuK-0001yE-L1\n for qemu-devel@nongnu.org; Sun, 15 Feb 2026 03:55:15 -0500",
            "from mail-westus3azon11010042.outbound.protection.outlook.com\n ([52.101.201.42] helo=PH7PR06CU001.outbound.protection.outlook.com)\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <ankita@nvidia.com>) id 1vrXuI-0003Kt-Bt\n for qemu-devel@nongnu.org; Sun, 15 Feb 2026 03:55:11 -0500",
            "from MN0PR02CA0005.namprd02.prod.outlook.com (2603:10b6:208:530::26)\n by SA5PPFCB4F033D6.namprd12.prod.outlook.com\n (2603:10b6:80f:fc04::8e2) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.10; Sun, 15 Feb\n 2026 08:50:03 +0000",
            "from BL6PEPF00022572.namprd02.prod.outlook.com\n (2603:10b6:208:530:cafe::6d) by MN0PR02CA0005.outlook.office365.com\n (2603:10b6:208:530::26) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.15 via Frontend Transport; Sun,\n 15 Feb 2026 08:49:49 +0000",
            "from mail.nvidia.com (216.228.117.161) by\n BL6PEPF00022572.mail.protection.outlook.com (10.167.249.40) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9632.12 via Frontend Transport; Sun, 15 Feb 2026 08:50:02 +0000",
            "from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com\n (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 15 Feb\n 2026 00:49:51 -0800",
            "from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail202.nvidia.com\n (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 15 Feb\n 2026 00:49:50 -0800",
            "from localhost.nvidia.com (10.127.8.12) by mail.nvidia.com\n (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend\n Transport; Sun, 15 Feb 2026 00:49:50 -0800"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=GPTOCR1OPIKjSK1jJd3aadl95vSDdRQyZcTNi9qYS7F2Or+hJjjRxiRstME9UMdXMKANnoCu2X8ST6zg2nWj4NwpP3+R6NRQvwH+sRsYgsycNpoXx9RUgk7rM5RU3PJOa+UMmn+pHP4F4rvVYQPWFGv4mJ0y5GR/qRMs3VRPmXfy71ZWfdttUDKIWp5zV59dbNtWnZCI0n7db+MWWWQWK9qHtTQL2rXU8XUzAmw4czjVjnVNWrOsdarfDSvAf0gXVhWXO1thKFCpvnGAXVzGVMaUXUWeKxr64BL6yXLsJDUyBFtQH9Wce3n+vz/uYQhWB7d1sDM9SHbZLjHhAWaoxQ==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=cptZhIlRWTwoR+uNE8PDuG3WAnUlxHkFhhPc8Knl+tM=;\n b=Le/sxLzN6qixKtmAv1Esqpt0kPjCa1lEvQx9rqDzDQbRjKe43v7wsjQOiXEqbSKbqbGmJXK05DF8cXmJEgYhypkNSnmIjaM/7cFh92qh02jy+0ug6G5HOKORuiDiVhBBCR4vmjlDY4uObMWjiTqPAiikzJ3zwN7a8PAbd+ftsU4AAWNjZo24R0R40cVOTYTus5Aj4ZevfOSBiZ5QZ9lTzXTMsFOv95J9+tGBlFZd8cFMn9WPN/qOMb0Nbk2mDwK3mHFnCpJlKg8SWSuIU8aTx9dPmbRa72pHLjNVckWatzd7GKgNYRjJH6hEFSxG80gBlm411glqev+DqIT6vZDvFw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.161) smtp.rcpttodomain=shazbot.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none (0)",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=cptZhIlRWTwoR+uNE8PDuG3WAnUlxHkFhhPc8Knl+tM=;\n b=Se1TQ+kPHGEYLH4aoW1dJDsgR5b4LiwNq51rCzAUc3ZFgwhBTSj4Hba/XwZhdaFCxCvFV9buVclaQa4MLAWvcvOSIWAnga5EWvoZzHwx8XWRt805KLZnhklRmTaw+4EkZIgmemoSyTJ7TkCJlb4xbqdUnNzvOD6yRMscaaR8h4rV/8TjsU7xDyVF5rRkBQj8ZLuUCnE5GcQB8TUQ9Oz4bx0g+1IgrUj1nvI4Dzuhc8ez3VUoSa7FzmvSUOAS0Vf0DTOZwvJVKRSyw/AU3bL6pPShOr6k9vj6Hnb6NF70L0fwEW+vsrW8CCs2sud20RNq7EZ+sJJLr/9JUb3Wm4tXLw==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.161)\n smtp.mailfrom=nvidia.com;\n dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": [
            "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.161 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C",
            "permerror client-ip=52.101.201.42;\n envelope-from=ankita@nvidia.com;\n helo=PH7PR06CU001.outbound.protection.outlook.com"
        ],
        "From": "<ankita@nvidia.com>",
        "To": "<ankita@nvidia.com>, <vsethi@nvidia.com>, <jgg@nvidia.com>,\n <skolothumtho@nvidia.com>, <alex@shazbot.org>, <clg@redhat.com>",
        "CC": "<aniketa@nvidia.com>, <cjia@nvidia.com>, <kwankhede@nvidia.com>,\n <targupta@nvidia.com>, <zhiw@nvidia.com>, <mochs@nvidia.com>,\n <kjaju@nvidia.com>, <qemu-devel@nongnu.org>",
        "Subject": "[PATCH v3 1/3] hw/vfio: sort and validate sparse mmap regions by\n offset",
        "Date": "Sun, 15 Feb 2026 08:49:48 +0000",
        "Message-ID": "<20260215084950.4657-2-ankita@nvidia.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260215084950.4657-1-ankita@nvidia.com>",
        "References": "<20260215084950.4657-1-ankita@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-NV-OnPremToCloud": "ExternallySecured",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BL6PEPF00022572:EE_|SA5PPFCB4F033D6:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "6b2385d1-9f48-4290-3572-08de6c6f356e",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|36860700013|376014|1800799024|82310400026|7053199007;",
        "X-Microsoft-Antispam-Message-Info": "\n b99aMedxKKZH6xpOAiuaeJ8bbhAUX5p6zbvkBYAOo09xPG8D/Hnt3SFt0zOfW1X8xvmoyd5ECxeBbbojsoQ8JgnP4jwAVeEmhaZ7wvdbqNleoo20vKJzC5vXqCvAalei9Evsyyy0rbKfr7ip0wpi8adrviB8jlUlkBjNaezkmN2TadxemMG2G/B5ZENenA+LHuJwAvPr2eY3tUHpg93X8+IJxagAfYWyaGzrrs9pljL0DS2mJ7apyjjw5MM8P0gCGUBca5K/n2OCSLLZNRGiXI566ojH0uYufeV5sSUcv2B3HrYZ8W2m0s5JiOhc6fpuQXPb/ZbB6pruiEar/mGBH3eM0CwhqT3aZcypcsmBa3XhXkwNfP17jQE6MWn6yeleGL4C2oPZIczc/vaFDsT4nSPnvwqOrELCI/69A4wtYw6kW0tFFW1zpWoORA2VA5v3M1jIqHKYJaVcAT73cnUM28XpVqtFYK4PB7V1ldl5jFQypGYBGZSmJ7IRsJWUrf5wCZLOpuDPctSDkS05hthG7lASY5kPPZ5QYu2cfgM2YzlhANxE8yo1M3+Le2nlI/BKaBpxI+nHAIAiik73maE+zh5a6iZaG+qgcT/N6SNbavBXByDeyi9RDoKju49/n7GXXBa+ZlA6cyCq95TdIa25uKE4hMnrwOPSCtw9TaZ+nq9SgPGS3AxBBqOT4EyQ9kcF8Beo8kX2U3Cx6mAXQuntONsD1nu8OsldrJsbIakPHfn5W2/BDbm/Nys/ckkmKdXdZAXGgxQTFTs0VXPzW4RwKsTPtADoiwBu8b0pE8YcpgFDCaivToQXfQeY7yvwERqGe/9V8nkFf++9UGF6ICO36X9qcdIMJ/ORdROC3E8ACZrjocxiQ6xU10tNmwRQndEm4VO89iNP+55xYVpOyDq92mGTuGQqm11TehVfVdP/aTf5IT8Lv+FjnWMdUL1Ab80STu5bj5SXjqUcZEguELc9yL71h3ScZb6CqOOz+1n2hbtYseVgj0e97TIOfTr0btke8sqmJGpkQWkk1hLRCNcYhLefIuqXMgzn1cTrlRI6XM/xKTQUH/XoXpK1zfL4+ZkDRAEaM3TInoBGcFEk3K5hIDuMLgfn1XOGzRREOn/XtTXNK91j4j3RCqKkSBPnvAyM2/KsAq8Xn+ZBAwUyGD1nrs3XFqFXCGQiuQCQtVqBwoEflu8QWMZS+uEv7kRTEuYmXagPS2p+8g7Vg6SmCuMEZCKZ4FFHFbvoKJg0gL7uYPwO7bYMXlghPuX1rWeY/xwO3/jRPJSfw9NFXKky93H6FhTfMvm7LdazSca4oftCvT3eOBhPhOtTkLvCYmHupaviVa/DKJK2xMI1hC2yCoIIm5LDcIE9/JdP3zVSDbTlDg+J9RGfQA2bpmG9a0PG44z6GzrQZlGo4Cig5mZziuNi27IMHaedcilKiPhkeFKBRGjTi59r2Ev/w3e2/qnLtj0+HQCUTv1akEqlk6iycGSWoaFEBjLWbvrRJwQVppGhz2ryMRXyufTE05jXpUZlJs789GNOGYntTB8SA9IbfIgC32GiPL06kxOytZ627epLIPBKuPSmU+GT4d0FQ8YdpLaJ5KE6xZHQyJDqCYq3teTKBIJKet7z4T86b/rG7P8rTVdDeXlPW6t2Yp0Y1h8FlCClKumyc7jfJHpgOdkgQFUjyg==",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE;\n SFS:(13230040)(36860700013)(376014)(1800799024)(82310400026)(7053199007);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n k811FZM3iiy+nFjkTFUO/j/eC01RhhoZ14MhratyTkq6GvX904JxwOCieBEWRY0c7paml7kFW4HwwXNnCxJGmVMCNVRzh9lsDvbaZB3j+lec8+Pyo9Szw+hWn+hrg2cqAPaL8qdGigqsccWimc7v28Wu5EgGDIzzBcn0X7K3NRfduxRbkVLxqp41UkzvVbYGPRcZl7Vgz2Dp9yvgZIGO0ZT9pleV2rQsbfc2nzwAJPCzA1vAwLKNMReJFzuFcUVKUefjUIuRKf346+17J0ZDhyHaUSqUHJvKIVv7r+sTf23vCCZ3QFB4KG/JW//hFj3JeT2QtysFFPmp1tc1KS66tg4wDdgmhRJKv5LV5bxU8C3G6uEhcdwiITfM1u5Wa9yXha26yP8ziutbgJyKJGUvudeDT52QgjPbaNWyPRKnpQUarA7RD5tBsIGmt5Z1R7dV",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "15 Feb 2026 08:50:02.4876 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6b2385d1-9f48-4290-3572-08de6c6f356e",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n BL6PEPF00022572.namprd02.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SA5PPFCB4F033D6",
        "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,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n 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 <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "From: Ankit Agrawal <ankita@nvidia.com>\n\nSort sparse mmap regions by offset during region setup to ensure\npredictable mapping order, avoid overlaps and a proper handling\nof the gaps between sub-regions.\n\nAdd validation to detect overlapping sparse regions early during\nsetup before any mapping operations begin.\n\nThe sorting is performed on the subregions ranges during\nvfio_setup_region_sparse_mmaps(). This also ensures that subsequent\nmapping code can rely on subregions being in ascending offset order.\n\nThis is preparatory work for alignment adjustments needed to support\nhugepfnmap on systems where device memory (e.g., Grace-based systems)\nmay have non-power-of-2 sizes.\n\ncc: Alex Williamson <alex@shazbot.org>\nReviewed-by: Alex Williamson <alex@shazbot.org>\nReviewed-by: Shameer Kolothum <skolothumtho@nvidia.com>\nSigned-off-by: Ankit Agrawal <ankita@nvidia.com>\n---\n hw/vfio/region.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-\n 1 file changed, 44 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/hw/vfio/region.c b/hw/vfio/region.c\nindex ab39d77574..177494c379 100644\n--- a/hw/vfio/region.c\n+++ b/hw/vfio/region.c\n@@ -149,6 +149,19 @@ static const MemoryRegionOps vfio_region_ops = {\n     },\n };\n \n+static int vfio_mmap_compare_offset(const void *a, const void *b)\n+{\n+    const VFIOMmap *mmap_a = a;\n+    const VFIOMmap *mmap_b = b;\n+\n+    if (mmap_a->offset < mmap_b->offset) {\n+        return -1;\n+    } else if (mmap_a->offset > mmap_b->offset) {\n+        return 1;\n+    }\n+    return 0;\n+}\n+\n static int vfio_setup_region_sparse_mmaps(VFIORegion *region,\n                                           struct vfio_region_info *info)\n {\n@@ -182,6 +195,34 @@ static int vfio_setup_region_sparse_mmaps(VFIORegion *region,\n     region->nr_mmaps = j;\n     region->mmaps = g_realloc(region->mmaps, j * sizeof(VFIOMmap));\n \n+    /*\n+     * Sort sparse mmaps by offset to ensure proper handling of gaps\n+     * and predictable mapping order in vfio_region_mmap().\n+     */\n+    if (region->nr_mmaps > 1) {\n+        qsort(region->mmaps, region->nr_mmaps, sizeof(VFIOMmap),\n+              vfio_mmap_compare_offset);\n+\n+        /*\n+         * Validate that sparse regions dont overlap after sorting.\n+         */\n+        for (i = 1; i < region->nr_mmaps; i++) {\n+            off_t prev_end = region->mmaps[i - 1].offset +\n+                             region->mmaps[i - 1].size;\n+            if (prev_end > region->mmaps[i].offset) {\n+                error_report(\"%s: overlapping sparse mmap regions detected \"\n+                             \"in region %d: [0x%lx-0x%lx] overlaps with [0x%lx-0x%lx]\",\n+                             __func__, region->nr, region->mmaps[i - 1].offset,\n+                             prev_end - 1, region->mmaps[i].offset,\n+                             region->mmaps[i].offset + region->mmaps[i].size - 1);\n+                g_free(region->mmaps);\n+                region->mmaps = NULL;\n+                region->nr_mmaps = 0;\n+                return -EINVAL;\n+            }\n+        }\n+    }\n+\n     return 0;\n }\n \n@@ -213,11 +254,13 @@ int vfio_region_setup(Object *obj, VFIODevice *vbasedev, VFIORegion *region,\n \n             ret = vfio_setup_region_sparse_mmaps(region, info);\n \n-            if (ret) {\n+            if (ret == -ENODEV) {\n                 region->nr_mmaps = 1;\n                 region->mmaps = g_new0(VFIOMmap, region->nr_mmaps);\n                 region->mmaps[0].offset = 0;\n                 region->mmaps[0].size = region->size;\n+            } else if (ret) {\n+                return ret;\n             }\n         }\n     }\n",
    "prefixes": [
        "v3",
        "1/3"
    ]
}