From nobody Tue Oct 7 08:35:21 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2058.outbound.protection.outlook.com [40.107.236.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1CC61285C98; Sun, 13 Jul 2025 17:49:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752428985; cv=fail; b=mjUtTNoR5x1Kmg3lwFnBrycQuZHauYO0/yOcFBfmqVZu7sZDmaMx0reaDbNwmcyFII3jiCaGGGOMx/LBG1xzPaFVYN75O+vUFFmOzeAA0785v99aSpFyKHD6EWhnxus/DPnjG9fRnbrBVaaQNetD8ckO8v0XboOreirRPIAHnjM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752428985; c=relaxed/simple; bh=DFbOIpUIIdycsIHS6x0Qj9ca5JRubTDSJ97GR4+pFpI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W6tkFcut5qnkkPItAZl//XEYp3yQXH0QETlvkX4nd5zlBFMzbDKxSmye/Hu9ikGsL4Mb+opUhYntAYXEGLxqbSwG2aJuZNbxeNby8bZ0Z2qgpT60C+iS9py0A8BLG0YYNC/mcaPLO+PvoE378/LUW+P2EAR7saa/FBfXkjsLxS4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=a1PvBTnZ; arc=fail smtp.client-ip=40.107.236.58 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="a1PvBTnZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OEPww0AqJOeROSBjdr2R04guHoKf0hYeXV4wnO1sLQUvANv9bLWN7PN2yXb4nmfgdRYpA7Twr7EAwOmplf/ETGXqkDx7foaO6XMrTtjIzgwwRfMqWPek8wJL2vkQlNQ+U0vLcrcbiXPXj1bpGcjs5h4tpof37T/q1Zjhs1oBcky5QXbQeqvu/nWGb9cIeduXpqR/ply//GwcrFX1e2VzIQb8Cj2td56rD8v/Se+o1V6Uc4x6J+NXGm8NtHQgdPGOSxL1dWsyNctvYRp2GXekiryDrljk/qLhUHAnEN7rcX4vRPaIoGT4AA6teBK1S50pCO+ifKxfw4tjqy1X+hSDUQ== 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=+CVimU9xw3Fu7ChZR7ZXtFlrGo59bHwQQCmVDL+EEJ4=; b=gAHlziJk0drxQO1MHOO/krOkV9XDSxWplLOJo05OBqR7MXuM2v3mT7fxo9mVs+G2xBTrOCkuN7BZeymaXdvioLqLGgVWycfBXlpcVKS39OAk0VmGSRLyshKnOY82aGi3XK2M89GGH1rdWzQerZq+VrkYk9lX/aaHAmSl7GrSjoEiHHVZ2dN+MAWSjmPHssLlMFoyLoL/g2bbQuMwZJlGRICKRxsq2PnXU/9TICyrEtutU/g13GiXmc2WaTmfxN9bTSV/CQQlC/Jl36cA/jJRkUaW5Lb4PxboWMvv9X0qSPmKQ9fspZCBNK4Jhcr9FDVJiIyv4OdWsNScOcNjoaidWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=google.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+CVimU9xw3Fu7ChZR7ZXtFlrGo59bHwQQCmVDL+EEJ4=; b=a1PvBTnZw53Bb+eBTUlLI1c56tcLWVgWVZhLJP1t16bC9Y5pzjCaYTIFHTriz+J4c3Qs8mHcRhcd8YlujkNa3rUw3yjbUxMVgW/EoJCj0zMHCCnbN5Q51IeXISbXogFyQKA0pHWFpYKePbwlAIBILV9z4WNXKIEjsEaIpX9osYM= Received: from MW4PR04CA0263.namprd04.prod.outlook.com (2603:10b6:303:88::28) by IA1PR12MB9530.namprd12.prod.outlook.com (2603:10b6:208:593::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Sun, 13 Jul 2025 17:49:37 +0000 Received: from SJ5PEPF000001CF.namprd05.prod.outlook.com (2603:10b6:303:88:cafe::27) by MW4PR04CA0263.outlook.office365.com (2603:10b6:303:88::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8922.30 via Frontend Transport; Sun, 13 Jul 2025 17:49:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001CF.mail.protection.outlook.com (10.167.242.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8922.22 via Frontend Transport; Sun, 13 Jul 2025 17:49:36 +0000 Received: from kaveri.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sun, 13 Jul 2025 12:49:21 -0500 From: Shivank Garg To: , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH V9 7/7] KVM: guest_memfd: selftests: Add tests for mmap and NUMA policy support Date: Sun, 13 Jul 2025 17:43:41 +0000 Message-ID: <20250713174339.13981-10-shivankg@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250713174339.13981-2-shivankg@amd.com> References: <20250713174339.13981-2-shivankg@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001CF:EE_|IA1PR12MB9530:EE_ X-MS-Office365-Filtering-Correlation-Id: f74b6b1e-5f13-4b59-180a-08ddc235a266 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|376014|7416014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cRY4V6V2FPUV3nVZu67KVdOTUiLf/Ry/8MOehSZbjE/QdS7fFp2c8phq8Lu9?= =?us-ascii?Q?snaJlBjDqpvofG0pVnBSJxVa0zGzhfs31ehFN5xUIzrF+6dV5E9/H7dBKT8V?= =?us-ascii?Q?tGXeGeqx0GwH4U6x2vmSZXR/0EkW68jCv+Uni5fFonEboQiM3lOnRgY63dn5?= =?us-ascii?Q?IAiC2SI6GRPra9PB3OJjL3G25hInAqB2pJp8VfuvAXCTCriXVI5cnYhDXcIw?= =?us-ascii?Q?TOhtpiLjo+/H+xg4r50NAgvTq85X/AoX5F2TzJ+OpL6ktB+EU0Co9vBCVekq?= =?us-ascii?Q?lzs1uj5sOgaq7b9HyK8KWYN125CaUBUUQA003o1zx8wp6oujmG55Gu8259+6?= =?us-ascii?Q?v5KcolCtpi6OEXzRHVRLogk0noX9ecrcCFxFuweRjVixU7lJ4RodgUjoV+va?= =?us-ascii?Q?tsKooK01kn61D712zlIKqLdlI3VW9wN8fgfIUmR+PgbzKAfYgTEscWkG9q7e?= =?us-ascii?Q?+Vk5f5FGBv4pCnU4oZZTCPiScLZ8R2jh2bGckBobXZlWbGH1qEc1ts3A+4m8?= =?us-ascii?Q?DrktFavF00wQ/8AlBPfI3nPLvhSYtMzvn5+eR8EQqSWm6W0MrW5myZpUvxQ8?= =?us-ascii?Q?JQ8Xme4a4rIzUXl5ZOVCFxWwaiv7AhSmMOjwFa27JgtwEyvM8tGIM2v5GiER?= =?us-ascii?Q?h9FgTkYIsX8f+R7BoWdLBcfnDpc2MxLxt0MmTIzg6hxn1mnG0ZmH25JQSZjh?= =?us-ascii?Q?uFBWVjfrjiB1vUoAbE3U3NfJ6HHKeAScLx1g7Oqw6IyDKzz5nFTK6zbfT3fA?= =?us-ascii?Q?m/P/iDIekcnYd2wh4MkcHmxuaHpV/QbiPwBk91luFdUG4xacd9uYVZIFpuYR?= =?us-ascii?Q?/nd+O9GCjgstEnHFt1zTx8V4j2Mpb1J5BtTcScbRyBeQy2lOzZyi2s+CaWTi?= =?us-ascii?Q?bWJ45rpC7pdBbYcxxwa0gZILrV7gvKNzX5PLHOPzc2+rFr6d+f7qKQzCdnnC?= =?us-ascii?Q?jdIiGh3OhVvB7opLY7trzRod5iiC3eJPAUgcSeACNq6K5lFxarPPFlwX3pwa?= =?us-ascii?Q?9bdzs19qkWU6+Nk2y1E/W6AA/7InmmDYNKGgUDl7LhKZd0qUKXdZG2hnI0fd?= =?us-ascii?Q?NDxiGcz91qcENqsxk53hhgV7tUlZ0OUv9Y40yrwqsHVKx/tvDtTkTCIeiP35?= =?us-ascii?Q?jqnV07NgJAENh1OzhaVmc/1kYPZoePhOKib6UY8upV18t/9SgWd8y2z7gg1V?= =?us-ascii?Q?yIUW27O8kfKGmdRSf48Rp7YFQ2Pd6JAeiKsYs7muSibO2BfMwig9gadjAUJG?= =?us-ascii?Q?aGnYfn5CtWuLC4GoFM10Z5FsEcuqKk+brmrPlkOaTpDgB2VKg2JCk/1r5KGQ?= =?us-ascii?Q?vKZ8vDISwwdPOpl8sUoBBAnuNr2dREjehiYnXxqdBsLgv1Rz2SLd3WILNOrY?= =?us-ascii?Q?/qqkKn+gD3oKse4w2bk9oVyEE7N7HlicpSjTxRH0/hWWYXNflioFYw8gWtMw?= =?us-ascii?Q?7B1bPFC4XivBdarJEo0kdWoQ/Nkc6eXpPjIRfy4TInbfyJ15xVa/Z6AmV0TA?= =?us-ascii?Q?ci2kl2Cb1VEVYLq2XUBsNS3U5bFtswfgd/XD?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(376014)(7416014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2025 17:49:36.7972 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f74b6b1e-5f13-4b59-180a-08ddc235a266 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001CF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB9530 Content-Type: text/plain; charset="utf-8" Add tests for NUMA memory policy binding and NUMA aware allocation in guest_memfd. This extends the existing selftests by adding proper validation for: - KVM GMEM set_policy and get_policy() vm_ops functionality using mbind() and get_mempolicy() - NUMA policy application before and after memory allocation These tests help ensure NUMA support for guest_memfd works correctly. Signed-off-by: Shivank Garg --- tools/testing/selftests/kvm/Makefile.kvm | 1 + .../testing/selftests/kvm/guest_memfd_test.c | 122 +++++++++++++++++- 2 files changed, 122 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selft= ests/kvm/Makefile.kvm index e11ed9e59ab5..f4bb02231d6a 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -273,6 +273,7 @@ pgste-option =3D $(call try-run, echo 'int main(void) {= return 0; }' | \ $(CC) -Werror -Wl$(comma)--s390-pgste -x c - -o "$$TMP",-Wl$(comma)--s390= -pgste) =20 LDLIBS +=3D -ldl +LDLIBS +=3D -lnuma LDFLAGS +=3D -pthread $(no-pie-option) $(pgste-option) =20 LIBKVM_C :=3D $(filter %.c,$(LIBKVM)) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing= /selftests/kvm/guest_memfd_test.c index 1252e74fbb8f..d8f3beccd5a0 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include #include @@ -18,6 +20,7 @@ #include #include #include +#include =20 #include "kvm_util.h" #include "test_util.h" @@ -115,6 +118,122 @@ static void test_mmap_not_supported(int fd, size_t pa= ge_size, size_t total_size) TEST_ASSERT_EQ(mem, MAP_FAILED); } =20 +#define TEST_REQUIRE_NUMA_MULTIPLE_NODES() \ + TEST_REQUIRE(numa_available() !=3D -1 && numa_max_node() >=3D 1) + +static void test_mbind(int fd, size_t page_size, size_t total_size) +{ + unsigned long nodemask =3D 1; /* nid: 0 */ + unsigned long maxnode =3D 8; + unsigned long get_nodemask; + int get_policy; + char *mem; + int ret; + + TEST_REQUIRE_NUMA_MULTIPLE_NODES(); + + mem =3D mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem !=3D MAP_FAILED, "mmap for mbind test should succeed"); + + /* Test MPOL_INTERLEAVE policy */ + ret =3D syscall(__NR_mbind, mem, page_size * 2, MPOL_INTERLEAVE, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind with INTERLEAVE to node 0 should succeed"); + ret =3D syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy =3D=3D MPOL_INTERLEAVE && get_nodemask =3D= =3D nodemask, + "Policy should be MPOL_INTERLEAVE and nodes match"); + + /* Test basic MPOL_BIND policy */ + ret =3D syscall(__NR_mbind, mem + page_size * 2, page_size * 2, MPOL_BIND, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind with MPOL_BIND to node 0 should succeed"); + ret =3D syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem + page_size * 2, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy =3D=3D MPOL_BIND && get_nodemask =3D=3D no= demask, + "Policy should be MPOL_BIND and nodes match"); + + /* Test MPOL_DEFAULT policy */ + ret =3D syscall(__NR_mbind, mem, total_size, MPOL_DEFAULT, NULL, 0, 0); + TEST_ASSERT(!ret, "mbind with MPOL_DEFAULT should succeed"); + ret =3D syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy =3D=3D MPOL_DEFAULT && get_nodemask =3D=3D= 0, + "Policy should be MPOL_DEFAULT and nodes zero"); + + /* Test with invalid policy */ + ret =3D syscall(__NR_mbind, mem, page_size, 999, &nodemask, maxnode, 0); + TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, + "mbind with invalid policy should fail with EINVAL"); + + TEST_ASSERT(munmap(mem, total_size) =3D=3D 0, "munmap should succeed"); +} + +static void test_numa_allocation(int fd, size_t page_size, size_t total_si= ze) +{ + unsigned long node0_mask =3D 1; /* Node 0 */ + unsigned long node1_mask =3D 2; /* Node 1 */ + unsigned long maxnode =3D 8; + void *pages[4]; + int status[4]; + char *mem; + int ret, i; + + TEST_REQUIRE_NUMA_MULTIPLE_NODES(); + + /* Clean slate: deallocate all file space, if any */ + ret =3D fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, tota= l_size); + TEST_ASSERT(!ret, "fallocate(PUNCH_HOLE) should succeed"); + + mem =3D mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem !=3D MAP_FAILED, "mmap should succeed"); + + for (i =3D 0; i < 4; i++) + pages[i] =3D (char *)mem + page_size * i; + + /* Set NUMA policy after allocation */ + memset(mem, 0xaa, page_size); + ret =3D syscall(__NR_mbind, pages[0], page_size, MPOL_BIND, &node0_mask, = maxnode, 0); + TEST_ASSERT(!ret, "mbind after allocation page 0 to node 0 should succeed= "); + ret =3D fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, page= _size); + TEST_ASSERT(!ret, "fallocate(PUNCH_HOLE) should succeed"); + + /* Set NUMA policy before allocation */ + ret =3D syscall(__NR_mbind, pages[0], page_size * 2, MPOL_BIND, &node1_ma= sk, maxnode, 0); + TEST_ASSERT(!ret, "mbind page 0, 1 to node 1 should succeed"); + ret =3D syscall(__NR_mbind, pages[2], page_size * 2, MPOL_BIND, &node0_ma= sk, maxnode, 0); + TEST_ASSERT(!ret, "mbind page 2, 3 to node 0 should succeed"); + memset(mem, 0xaa, total_size); + + /* Validate if pages are allocated on specified NUMA nodes */ + ret =3D syscall(__NR_move_pages, 0, 4, pages, NULL, status, 0); + TEST_ASSERT(ret >=3D 0, "move_pages should succeed for status check"); + TEST_ASSERT(status[0] =3D=3D 1, "Page 0 should be allocated on node 1"); + TEST_ASSERT(status[1] =3D=3D 1, "Page 1 should be allocated on node 1"); + TEST_ASSERT(status[2] =3D=3D 0, "Page 2 should be allocated on node 0"); + TEST_ASSERT(status[3] =3D=3D 0, "Page 3 should be allocated on node 0"); + + /* Punch hole for all pages */ + ret =3D fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, tota= l_size); + TEST_ASSERT(!ret, "fallocate(PUNCH_HOLE) should succeed"); + + /* Change NUMA policy nodes and reallocate */ + ret =3D syscall(__NR_mbind, pages[0], page_size * 2, MPOL_BIND, &node0_ma= sk, maxnode, 0); + TEST_ASSERT(!ret, "mbind page 0, 1 to node 0 should succeed"); + ret =3D syscall(__NR_mbind, pages[2], page_size * 2, MPOL_BIND, &node1_ma= sk, maxnode, 0); + TEST_ASSERT(!ret, "mbind page 2, 3 to node 1 should succeed"); + memset(mem, 0xaa, total_size); + + ret =3D syscall(__NR_move_pages, 0, 4, pages, NULL, status, 0); + TEST_ASSERT(ret >=3D 0, "move_pages should succeed after reallocation"); + TEST_ASSERT(status[0] =3D=3D 0, "Page 0 should be allocated on node 0"); + TEST_ASSERT(status[1] =3D=3D 0, "Page 1 should be allocated on node 0"); + TEST_ASSERT(status[2] =3D=3D 1, "Page 2 should be allocated on node 1"); + TEST_ASSERT(status[3] =3D=3D 1, "Page 3 should be allocated on node 1"); + + TEST_ASSERT(munmap(mem, total_size) =3D=3D 0, "munmap should succeed"); +} + static void test_file_size(int fd, size_t page_size, size_t total_size) { struct stat sb; @@ -275,7 +394,8 @@ static void test_with_type(unsigned long vm_type, uint6= 4_t guest_memfd_flags, if (expect_mmap_allowed) { test_mmap_supported(fd, page_size, total_size); test_fault_overflow(fd, page_size, total_size); - + test_mbind(fd, page_size, total_size); + test_numa_allocation(fd, page_size, total_size); } else { test_mmap_not_supported(fd, page_size, total_size); } --=20 2.43.0