From patchwork Tue Apr 8 11:24:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 14042864 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C9176C369A1 for ; Tue, 8 Apr 2025 11:25:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 330526B0028; Tue, 8 Apr 2025 07:25:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2E27D6B0029; Tue, 8 Apr 2025 07:25:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 132FD6B002A; Tue, 8 Apr 2025 07:25:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E5FF06B0028 for ; Tue, 8 Apr 2025 07:25:50 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 6DBC68091B for ; Tue, 8 Apr 2025 11:25:51 +0000 (UTC) X-FDA: 83310646902.14.A45FAEA Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2041.outbound.protection.outlook.com [40.107.93.41]) by imf29.hostedemail.com (Postfix) with ESMTP id 68B6B12000A for ; Tue, 8 Apr 2025 11:25:48 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=1nGzQi0K; dmarc=pass (policy=quarantine) header.from=amd.com; spf=pass (imf29.hostedemail.com: domain of shivankg@amd.com designates 40.107.93.41 as permitted sender) smtp.mailfrom=shivankg@amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744111548; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=AqM4P2Fn56kQQ99zKTO6kLMZqx/0D3d8nce8i2TLu+8=; b=xORhaNVLUcNrgr96hxCy5c3a3CMG4sPdmj8ZjX2TLlPlpT0fUtsDCr97wRvlWywlc/NQk1 pzs+TF8ASaMC1tW221H+Ty8K6PLQRkHKRxLwFfgtAKCcu0MQPSkq9GDb7VEy6nH4r3wAGA xe3Kt0yllKqsxh8wF7r1d5a6GilInmk= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1744111548; a=rsa-sha256; cv=pass; b=5hcz1BY6J2u+LAHvM32Z1VqHTj0ntj9P2sLPJWgLxcpmx6Pzndj1LM1uTM1BypnAFPOKBg 7/9pf9r87cN8g7ajBo8usafi88GS75vo98o48AEQdSAXdIToEd18bMMAlhoqgSHyBHNKxd N8ytzv6/FeBgmOBHTPQJ0ncfuXCf62M= ARC-Authentication-Results: i=2; imf29.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=1nGzQi0K; dmarc=pass (policy=quarantine) header.from=amd.com; spf=pass (imf29.hostedemail.com: domain of shivankg@amd.com designates 40.107.93.41 as permitted sender) smtp.mailfrom=shivankg@amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UArTsph1PsEiFHUjDMC9vtoI7cOmg7RE7d+VPhwzuKHOf4FLoyj6Ajjc9tAWkub2QUJZIQst4P5h6HryZDEDY+qzWDDtRPQ9zftnZUwd9kMxVnDIeUxBP/+D+Oc4kvD6GuhZcNptZKcjBl3ZtyszI1/KeAGcptemx/s/RGlC4QC0BFNiW+bEJ6ujtFCrnRu1P6FC/bkJ5MZzgSOo6+yKEaLFgp8yoWhhohVmfTzx4qp2E5NG7dMLBc8VDPOFlPWls03YUpFZhcykHnYa/PCpARpFgjIx3ioHoT9jVdtVoBJXQZdA8l858MwMJ8A11KEGY6hhGVtyK+V/wZKIi34lCw== 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=AqM4P2Fn56kQQ99zKTO6kLMZqx/0D3d8nce8i2TLu+8=; b=FZlSdZWkdj60FrCNW16FUIwSZMhgpz7NPQVGliQTw8HSWz5FSQKu8HlKlWBniACMMiyZjXsDD61GlM8lizYPhvdYtxaodk12pMp8qLxlpbb71eRGOGIAsIh82Bs1oVtjJdZ4PwpddTm6f22yfsvc0PH/cKmw2v+WqLNuFLN8SdSWWG5PEMGtT/qG3ecP3aTs5L//PdNI+x2gWm5xun5rn5R1teqInz/G+YXa/x4kxnOxvWOwk42VxnR0+lr4HvHpLsJuGKaP7PXS9Wj1V0JQfXXvJH4hAnsqEcqlmlhl22fJb+qJyph0iXG+30sKG+rlGlJol/TCjAhzs8Ao6zG9EQ== 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=AqM4P2Fn56kQQ99zKTO6kLMZqx/0D3d8nce8i2TLu+8=; b=1nGzQi0KAXZsNOf9UuQTsndpC1vMq4naevXca07Ba1jUe/tffoGAu2P6UkekJB1Bsv79c9nfSt35ok7d0dhjo5xsDHYFCxBq0FPHkf/+2z2c2RCLklNIsTFL5FInE9+8Wjw0yA8Nf0dbwF6XiByEs2qVAzUUBopE1N9aPWNVUlE= Received: from PH7PR17CA0007.namprd17.prod.outlook.com (2603:10b6:510:324::18) by CY8PR12MB7220.namprd12.prod.outlook.com (2603:10b6:930:58::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8583.46; Tue, 8 Apr 2025 11:25:44 +0000 Received: from SN1PEPF000397B1.namprd05.prod.outlook.com (2603:10b6:510:324:cafe::4d) by PH7PR17CA0007.outlook.office365.com (2603:10b6:510:324::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Tue, 8 Apr 2025 11:25:44 +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 SN1PEPF000397B1.mail.protection.outlook.com (10.167.248.55) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8632.13 via Frontend Transport; Tue, 8 Apr 2025 11:25:44 +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; Tue, 8 Apr 2025 06:25:35 -0500 From: Shivank Garg To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC v7 8/8] KVM: guest_memfd: selftests: Add tests for mmap and NUMA policy support Date: Tue, 8 Apr 2025 11:24:02 +0000 Message-ID: <20250408112402.181574-9-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250408112402.181574-1-shivankg@amd.com> References: <20250408112402.181574-1-shivankg@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397B1:EE_|CY8PR12MB7220:EE_ X-MS-Office365-Filtering-Correlation-Id: 90159200-b307-4202-552b-08dd76901a12 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|7416014|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: 44SCRYxL9gRlx7xh3pkZTbvLTebxamSVUDncf6nm0aytM2Ntvrtb9373TGIRevym4zNAuN19Sdkh/xTgZVREV2uXobK2nu62HUWmtkwg7/brbsjztqz7mvdnT1obQdETrpbAtbG/j1m8wKtOO4EhCY8Uitz+vQIKrDPuBbEmKTx5ZqzqOvEy0YRetvAzqcEMDGxUFFyygOsfl6EI/nUNgEUzLxQipWQVmuRwq6OQXgmgwpOxQupqi4GlAdnLVEAJtw9D7lSQGLHgZ8D/GbGqcHPujcbNdCJ0uFWDmpg4FbIWSs+K/ETYJEN8vGiuUcJRb8xVt/qKYDLBgEo+GFiirmOXyLLf2fJ14z54DGPGDjLiafsaBkk6tL8VKcMBbjAjBxvydzIYVF1wwT5rarb3Hs6s7p26ZqLZUhYfci+7A0e26oNwNVKwd/L0u2U4qy728yPi3gJrpRfw2e/BiC3K9S219DGlelkD8cKttBAx+t1dKi1UG4dwIsIo7q6UEH5LAdBH3IOQ8Y12mtiuLaW7pUXwuCbki3A2b4qqhVH6+ytcdrzI0X9zRYDjvvxEw0uTFIRl/QOOr/z0xixNqZq5/ZUAXDvzTSRDMdcitqCkGr8Y31FVS7+9quQvkDRoGIrneMjKyRpchcFrRnH1h2NmJnJ9x6bgyHAY06akg79XnikyWPAyEM1m+HMvPLArFeSLW4oYbVqq8fFXr5qRdkWorSaqNdktpBcJagqjEewQ1SwE4uoHMuLZGie28v0rCdlV9QSLfTs1O9KwvKoW+5UdA1ACrA0zAuDCDlZqt8T7YR2x53OzP7Sm00qlS120hDv1IuLKK6jEHWr4owKO2yGvZfOIEBqlEaznlxCGyQspzL2HvMLKMdaG3tV8gROndOYX/cxBzcoKGIsbF7/0JybQcOWkLF2jBXcgiWdcGV4vzgZHLsPt40WQq7VCo/YpBdK7vF3xBmdRsaJzQJG6yk+aVTWMTQRLwfBo0bKmZsir5jwi0/6EwaAdyXO7iHRgkAbj9gMjwsUubW3kQRXPJ92UYyyCy0IkXRO5OtOeDtPKSROsdFO5xnVPemBONesYMlrd8JfLmJclFTM+6X6mvJFrAf6nw7TH/uEMVPTkKffsx8KtRLFlz8wHFBeObNT8QLHbOAoMAlDQ/FKZjXw2erYQMqtgMEmN8V+4aSIaya/Ic/1HQjJaNLiNB4kNz55d0BmBaSvzrGotOV6KVuVQ7Ur4clYWRNa7d4kwj4JXcInPBW/qEliASzr8cvtgJJf7lirmidI59gqpC1NNOE6RExt+2cd+klvmOXqLoSJYvV+ZT2aCVozE/49iGLxrIVnhRGl4EVNURPA5PuwSFIhCmlJbMP3OVCKNaZRY2yPbAkPrCMe2wmegTNsTD3DdjVMsRKpME4YBBGN/YYFlzVH2lwlRR8q+RPSFwIlw/fEBtBbijrAWodolq8P5cq9g9IwLp1VSfo8iGbpa24tN528BEMpQeDPCXHr3GHSpLVmypScd4Z1yW7usowTxzZwqshLHyOFg 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)(36860700013)(7416014)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 11:25:44.0630 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 90159200-b307-4202-552b-08dd76901a12 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: SN1PEPF000397B1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7220 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 68B6B12000A X-Stat-Signature: bom7jk49wqug1jspei856axafqedh1h7 X-Rspam-User: X-HE-Tag: 1744111548-531546 X-HE-Meta: U2FsdGVkX18VhDz6SKuuQKZ38VYM8hjY0RqjQhRRiatHZA84dQhoVRQ1THMEmYqOFtwd335GO3QXILLgGwK0zwUqleMolMerKaWcrEge5EXXhv5AN6Yix1hHq93jDBHSjvV5sPecHK22/kXuL9NZ4fW6fXdnv1h0E//aJPPzOZCdPMt1rvyTMd6eUd+RwHZd5lj5xUtGFYXShNmhKazX1fYcIJCLIpYJmV01RoitRi+HCn6hGJS9Sb+b6D1PXyc0oX3gptK3CXRRewl+PVJJAV97w0Rflj5BRMT7181prK8pdK8C6eHAohxjDqkTJMI4pQ1tAYgwEAICcDBbAXINbGdkQSsYrh8C/sJorat3MHzQaNaYu4cppyQJLvnCa4UZS9HgyVSjlb5t/T0n6QUfKPOBdLzekxZxzawZw+v7UTVlVeQjrm9seqRMCVI6H5z2AzG0h5pbvfrYKihAD8tkjmYlgDH/BFlOg2r0wA+WpUZX11fq8ykutAkhZIYd9c8iTskjMIdxijEwGtaA5AeTT1vvGBAbNwz6zZyhbXzKc+2PTcDJlWE/37cPGRHnz2OtFPOHZeDiwnt9OzrIDiYoseOCwjK0yaxA2hM8zEVvlRsteGNJDecGsHgdvCBBJTM3J0NO6J57Jl4qx/OPwmEb3XG0oa1h6b8LhVcYJ3Zf4KEhrceX+0eSU63gnWMCQF7PMG/2F+G+mAbcZ9+2X3/jYb3FRidRfQfw3ZjTiqaW37+TDBkuE5HPmA2rB4EU440YPprI0L5vJK82/Z5JmAg0F0ZygyUcGXc0po2rzdVGjawZPlQcIBG+KrRScgO7wSPPFBfWYDAFCU8xHjZv4gK97ayWSm6YuWW8Sp8yHoBtXh6C7l+QgkGl6Cdpcx/vLSZOcimnLL9Ga9O1PDo54fmlQfHLXCA4JK5fMUYSn6mlHbgL6KbYdoEGgBcxiijVc3U5TufjCCbmXwSPjIMfF7f Z2CKhfRq NXJNlKUle3w8A87a69zDkOUrxk1yFR+QBFM9L6Yn8zAaYq5jcEVulmci2abpw2Dp2uBoRmrz3VAR4oh5xw13bJCfQBtvjilCEEmmO093KFKAugRzVRAGwjsPSY7m9dZ+l9rPK6bcxZ/yF+Aq87ZbFRbrIjgp0OGc4ib5TSpGjPa8DTe8BxSyjQuQkzX8jqrgWn8a451tWq7FBQbpqhmJGz9hS4H/JbUM7+p+wOqYMctrzMXqJ6N+gvLldFA3stkUGVwCn+C+w/S3VpQtGQ9lh2sKEXIzFaZIAvSVqK81DC5hcvnhwd46RZLSXat1jKvjptVlZGgb2owjMSvN7yZ+HRG+ZHMhzNlCTuxJHLqR/NPMBHxWJJyNqXbt4NpEny7DzALLNmsMR71Wmgd202juyxVX3OjRcTPt6lUeXCPRyp5B7O4SINUaBBnNSynbGdkqrRJRgkOe0hLLmn7qp2o8I+TPz7TiQ7ndchljeZmKKqBN4F0m8d6CDzM2eV4zBb20AukwEF406X8w3/YKop8geb+8QQw0K2GIoL91xJaikmLIbg6Y= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add tests for memory mapping and NUMA memory policy binding in guest_memfd. This extends the existing selftests by adding proper validation for: - Basic mmap() functionality - 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 --- .../testing/selftests/kvm/guest_memfd_test.c | 86 ++++++++++++++++++- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c index ce687f8d248f..2af6d0d8f091 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -13,9 +13,11 @@ #include #include +#include #include #include #include +#include #include "kvm_util.h" #include "test_util.h" @@ -34,12 +36,86 @@ static void test_file_read_write(int fd) "pwrite on a guest_mem fd should fail"); } -static void test_mmap(int fd, size_t page_size) +static void test_mmap(int fd, size_t page_size, size_t total_size) { char *mem; - mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - TEST_ASSERT_EQ(mem, MAP_FAILED); + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmap should succeed"); + TEST_ASSERT(munmap(mem, total_size) == 0, "munmap should succeed"); +} + +static void test_mbind(int fd, size_t page_size, size_t total_size) +{ + unsigned long nodemask = 1; /* nid: 0 */ + unsigned long maxnode = 8; + unsigned long get_nodemask; + int get_policy; + void *mem; + int ret; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmap for mbind test should succeed"); + + /* Test MPOL_INTERLEAVE policy */ + ret = syscall(__NR_mbind, mem, page_size * 2, MPOL_INTERLEAVE, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind with INTERLEAVE to node 0 should succeed"); + ret = syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy == MPOL_INTERLEAVE && get_nodemask == nodemask, + "Policy should be MPOL_INTERLEAVE and nodes match"); + + /* Test basic MPOL_BIND policy */ + ret = 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 = syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem + page_size * 2, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy == MPOL_BIND && get_nodemask == nodemask, + "Policy should be MPOL_BIND and nodes match"); + + /* Test MPOL_DEFAULT policy */ + ret = syscall(__NR_mbind, mem, total_size, MPOL_DEFAULT, NULL, 0, 0); + TEST_ASSERT(!ret, "mbind with MPOL_DEFAULT should succeed"); + ret = syscall(__NR_get_mempolicy, &get_policy, &get_nodemask, + maxnode, mem, MPOL_F_ADDR); + TEST_ASSERT(!ret && get_policy == MPOL_DEFAULT && get_nodemask == 0, + "Policy should be MPOL_DEFAULT and nodes zero"); + + /* Test with invalid policy */ + ret = syscall(__NR_mbind, mem, page_size, 999, &nodemask, maxnode, 0); + TEST_ASSERT(ret == -1 && errno == EINVAL, + "mbind with invalid policy should fail with EINVAL"); + + TEST_ASSERT(munmap(mem, total_size) == 0, "munmap should succeed"); +} + +static void test_numa_allocation(int fd, size_t page_size, size_t total_size) +{ + unsigned long nodemask = 1; /* Node 0 */ + unsigned long maxnode = 8; + void *mem; + int ret; + + mem = mmap(NULL, total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + TEST_ASSERT(mem != MAP_FAILED, "mmap should succeed"); + + /* Set NUMA policy after allocation */ + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, page_size * 2); + TEST_ASSERT(!ret, "fallocate with aligned offset and size should succeed"); + ret = syscall(__NR_mbind, mem, page_size * 2, MPOL_BIND, &nodemask, + maxnode, 0); + TEST_ASSERT(!ret, "mbind should succeed"); + + /* Set NUMA policy before allocation */ + ret = syscall(__NR_mbind, mem + page_size * 2, page_size, MPOL_BIND, + &nodemask, maxnode, 0); + TEST_ASSERT(!ret, "mbind should succeed"); + ret = fallocate(fd, FALLOC_FL_KEEP_SIZE, page_size * 2, page_size * 2); + TEST_ASSERT(!ret, "fallocate with aligned offset and size should succeed"); + + TEST_ASSERT(munmap(mem, total_size) == 0, "munmap should succeed"); } static void test_file_size(int fd, size_t page_size, size_t total_size) @@ -190,7 +266,9 @@ int main(int argc, char *argv[]) fd = vm_create_guest_memfd(vm, total_size, 0); test_file_read_write(fd); - test_mmap(fd, page_size); + test_mmap(fd, page_size, total_size); + test_mbind(fd, page_size, total_size); + test_numa_allocation(fd, page_size, total_size); test_file_size(fd, page_size, total_size); test_fallocate(fd, page_size, total_size); test_invalid_punch_hole(fd, page_size, total_size);