From patchwork Wed Feb 26 08:25:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shivank Garg X-Patchwork-Id: 13991771 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 1262CC021B8 for ; Wed, 26 Feb 2025 08:28:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 99B4828000F; Wed, 26 Feb 2025 03:28:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 924A4280007; Wed, 26 Feb 2025 03:28:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7512228000F; Wed, 26 Feb 2025 03:28:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 54EEE280007 for ; Wed, 26 Feb 2025 03:28:16 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C88F3160D17 for ; Wed, 26 Feb 2025 08:28:15 +0000 (UTC) X-FDA: 83161418550.24.23CE6E6 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2074.outbound.protection.outlook.com [40.107.94.74]) by imf15.hostedemail.com (Postfix) with ESMTP id CCD84A0006 for ; Wed, 26 Feb 2025 08:28:12 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=VredHeHb; dmarc=pass (policy=quarantine) header.from=amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf15.hostedemail.com: domain of shivankg@amd.com designates 40.107.94.74 as permitted sender) smtp.mailfrom=shivankg@amd.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740558492; a=rsa-sha256; cv=pass; b=Ms0LYx+480f7I0+W2FZw6U7irPkOcOVvCSBefeb1wuWL/gOUJVE6P+8+bK1UEDHw9sLzhH vh5TE1zG5HhAr34U0Cd8kWhEfZQdL0LFtRckGXJjiHTlMFMqodFJYYKUKZ8RBXhom/TSmj JmF/uHjLCwyAqQ3EMYKRWJAg9uB5BCY= ARC-Authentication-Results: i=2; imf15.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=VredHeHb; dmarc=pass (policy=quarantine) header.from=amd.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf15.hostedemail.com: domain of shivankg@amd.com designates 40.107.94.74 as permitted sender) smtp.mailfrom=shivankg@amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740558492; 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=6St1b1o4opRrG5+XbMZz9/UVH3Qaez2X854bSxUmZdg=; b=ZAGNo0/SAi7cOSaMscrskM8fEgpkGxABQdFlg5ckw6ouqBfYFESHkFQBMe9SVE42fXkbdn 9po12WDTmSMXh4wbmGXdfhY/izMKqw77gdQvLgGT+5o9MBblk7ajRJG2JhJbvTr+kJYM9H JJ223M0CGevCZouN2HSEdRBxRcZVN0Q= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nxCP4xfOQJQIHRqEhF48vYo1cnOuk4ZHNbz1sjd9oyiavUd78k0VhkSCN7bJ6i1Fv7zQMDkG+aUKMvthi9y6zc5JsAfngClhr3UOqeciHy7a4hToXrBLYJWVkq96EQV5PuU+1HCWsRbasHGsLtC0nutVrchreDZyf+GPMCzX0diaXKhCM5Jr1BEJdLuAD3jkP8wPj7NF4OPkVn6MJj5FB4Dh42BnZ+h5E1GTQ2+lKIAr5HsvHVpOovoosOpJq5wY9UfbEp+2+FrdIP3jzGhHO5i/5qpUc1sCQcFS6mFYe/sl7/Q5XAQKq2rnG3DJCHBR22TiygJmMi7eF6bqEuiYvA== 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=6St1b1o4opRrG5+XbMZz9/UVH3Qaez2X854bSxUmZdg=; b=gWN/1A35Ey/HG/k2TX1T+68nINdaOb9Cd3whh46qjii390WiADYwsfQge2IDzGElG15VquP1CJ69Oqm8artKIamVYe0rqv20zDXy+mtsS8Yeywwv2/6uW70ruvz6XfWQR0G74xWu1fVP9QiK+r3/52EQU1oy7HnrWd8QgtMr6g5UbHWaYgkVc0jiFo8iTNFkbSgLUXG5p1qqAcIQlvjA4gKkouOjBAnfOgpP4ODazl9mFAT1sS68hPNMNihdTmErbdTBn5H5qD2KcOMkioYTgFiBs+/eRRXAgbIj5xz1E3AVaEDr0sXUxKoOhaZXHYQqvXm6cXp3EiPwPxT5r1vK4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux-foundation.org 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=6St1b1o4opRrG5+XbMZz9/UVH3Qaez2X854bSxUmZdg=; b=VredHeHbIBtGfPReY7DACMyYfY8bX0xZ5S7MpGcfs45SQxM0LLv3TJDRPrq1ohlIY/LceJ+EGI8Hd2+yjiTa0ka65VQ7DOuC6IIYjvEnIid3Bj8N700isLZaJzg8KO9peSNrNEXrDHWzHpdHP9oPKvGAekHCRUndMggjwEarrLY= Received: from SJ0PR03CA0203.namprd03.prod.outlook.com (2603:10b6:a03:2ef::28) by PH7PR12MB7257.namprd12.prod.outlook.com (2603:10b6:510:205::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.21; Wed, 26 Feb 2025 08:28:09 +0000 Received: from MWH0EPF000A6730.namprd04.prod.outlook.com (2603:10b6:a03:2ef:cafe::b6) by SJ0PR03CA0203.outlook.office365.com (2603:10b6:a03:2ef::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.20 via Frontend Transport; Wed, 26 Feb 2025 08:28:09 +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 MWH0EPF000A6730.mail.protection.outlook.com (10.167.249.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8489.16 via Frontend Transport; Wed, 26 Feb 2025 08:28:09 +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; Wed, 26 Feb 2025 02:28:03 -0600 From: Shivank Garg To: , , CC: , , , , , , , , , , , , , , , , , Subject: [PATCH v6 5/5] KVM: guest_memfd: selftests: add tests for mmap and NUMA policy support Date: Wed, 26 Feb 2025 08:25:49 +0000 Message-ID: <20250226082549.6034-6-shivankg@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250226082549.6034-1-shivankg@amd.com> References: <20250226082549.6034-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: MWH0EPF000A6730:EE_|PH7PR12MB7257:EE_ X-MS-Office365-Filtering-Correlation-Id: 14a7f0b1-5924-4e3c-63cb-08dd563f807d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|82310400026|376014|36860700013; X-Microsoft-Antispam-Message-Info: 5zQan82jIdSJSDC+JD4CjI0VBR61V8Vqc3jXlcV4MiCx9wdNjTAyYQRHJyQlab4DcX8lVhgRwBmrA2I6FNBXRqtjnhO5YFxXn2gyT9qqT52bQceq4KT0llR1JjuC1zuf7CZaHrUe6viBiMlfKwkeWRo0qFQASo6kR1x1xkJQyYpTIJgMAq9BKBGV/5VEOU91rmco+4+jHC4JHrYTmbw2uakMW6OoKBNFm1xL+95W1Cm6osDhHaU85GeLRJ0KAYxPelW7akJjtUCf0A/NLdc8rkxH81d/Ym5RjToXoW8l3zJBQOYJiAhuvI4dDG2R5kW3VPefZxZwEZCZ2YmNQqCqzkLLpASIp1g/TcvPQZW6rwP++4yKMEbjN/h3iji8gw99Kft1G7273Sn/NNVjdS8Pva3+ORXMUV8MBmcZQaLFbrJ3KBdosct6aVKAH/XT+GYh5LPQEZQ0i/VxrXZvC3lO6uDNua3+2J7QYjoKCMOSjMzgkfmoheOeJiG6BMGE5M3ge7gGTphpMdkxL3CulZJtYQgpbxgCtm4IDn8Phnx/iEW7OiQjL3ZsoQzp5XmQw2MQbP/IUMinmqr4tzZduhoPEXb2nNxHeLO83c0iS8e7/fFkP1dAF7yFWBUunvjPqrVOEP4mhlXvRpSsyvj0HV1RUFOk7lz/UnrFPAhLD9+6FW8/vTbNVx1lCo2pfOO+CcjEV3MlH2e1a687sHx595ka/MvBg5nIdmF4srUbljBtnY5oReuaw948rFzOuV/yNjWOPj8JpIx9MuWk/4EhefLRuYKfG92/jE7xel8DlGAj+RuEy+D/c+N23RdMJEPL64t1m6UQP5thBuPn22ijRmhwBAwiQgx3YypCWfty2kLSEqv7lVUe8xoqWex+0w7n1xgAcWTA0UlTgUENRiuo4niXsiZKeEMBtKOXrThOynWwxoyqLVWU/gSwY7SmXJfJhH/p0oJvDbsYc2tYZzblIfOvxdZZDmDVCkZQHH6hOeMcuVaS6UNDUC5m4bP3V9WKuNfx6mFcEL3GrmZARL8GuF5tzUuPPAIvbRf1GvvvtOtnh2ySr1sGAi/SYJnotzOIpnCynqf5jukbJNFe5HAMsDCU5/V9K2lgx9mNTqgfhyOrxHPpqCSe03MJHKwoVJIaYq91uL3u6Jy5IXJZvZyd/p6cHIc0ZL7EzeUDaXat9r5Oa7mworpJ3V+abmh6+y2QVU5cjOZXShU1M8ojodmAFIRRsk2hPyX821BKjf/99arPd4mWLxHDQ55dGEf9nSXAu+/2YmIlsh++qrQAXXos5zIPXzr1sQU3id+hlEOuDGhCYJcnRMl1EzdxClTdwtPALHA1Flzoh4hOJDRt0j1CKh7F7DRYJWHIpUgabV1d/GZxZmgiB+G5khi3QVAgITXBqHLRxU2k3jaFdfoKyDC4hfsAQCCp3sPkJFE23t5T3HV+B+8wpnpVcfibcMkB6BnU6Hn/KbJXsaFxP6OBIqIfwIlbTig0HPT7/JkqpRMSfeAF44w= 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)(7416014)(1800799024)(82310400026)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Feb 2025 08:28:09.3545 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 14a7f0b1-5924-4e3c-63cb-08dd563f807d 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: MWH0EPF000A6730.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7257 X-Rspam-User: X-Rspamd-Queue-Id: CCD84A0006 X-Rspamd-Server: rspam12 X-Stat-Signature: 7nkkczxidf1brrkh31btacut5deanjqu X-HE-Tag: 1740558492-272222 X-HE-Meta: U2FsdGVkX181A7dXrxv/zIZDpSVmGDre+m6o86QQUx931hHvx0FJFWbEYObYaXvcjPrzBeV+tcVZIvGx0Wo0rpbAgRIsxBR7d2wz7mxAc8L9B6KtclqRNhmkg6+Nyw79pIX8Cfe13MisaKhAbP55LMAuCNvSyGgr9+qRBL4k9o+lHoQUQjurZQp/WPh+ZeS1Kbz4kMJCGfkDU6AXwc/1Sh6gMBMkIzx9Fcs2xXmnoxfXyRhMRPFNTHv+OoHHovlSscVxMJYkLwle81lRRomj0HvxTN2uwTSRZmnTIAut8Yy+r+iWlul5LegtNnSkXuPf0kH7sPXPi4r65ZwkWyOI+Zx58YuaOZGNKUmfBh/8SnS9AYmvuWEoz2UxlS6p9VTmJ9Bcz2LYG23mAANGNJlZcGREpq4T87dYHJBepRtkq35BJsBFZ9qwSRpYd7zJR34FVrLi227d11PwLLkJIpruElYTJzlEWHa/O8Yorq9hLWq0/+0l3MnG61s0pw9PeP11euAzG+dsHWADBZTi4goqO8uMrT74q+1hgBRGU8bEMY6VBY5OzNvOPDNqW+oI0AJHyYtlmwqrRPJmgOQ081xWjMaapNp67vA645LA+tw0ITQspbyvzyfcONROAyhAYOJPwx/V69mKLWZFlZwm+92IUq/41uNyrApvzLMiQxuoFPehZIA24BXY8helfwR6SzkZi1FZdeyZiNjA7OHLGYsbi1d+m7Am6WZ417ChDURi3d47MUGIhktb+R5V/irin7Buc2sJJYO/YNk5nbmbjKjztbJsB0lYd8pTydHswqayS8gPq/+q5s4mSdL9n6hIR467/OfxjiDWrtjlk2zkSTpG03k/Zv07sMi1fhm71kXYjYPTzaq5+rc6e67TwX0UWfudtbKolPx9yAXSrZHMenRsTHWzs+smuaREnLN93gnRpJ8RhV3e32SnMZz3GhvzvKML9k6gGQdNUh2xUdc9KMW jMiKxrkz vEdmnhERw2LCHxM02rqFCpNdFlWpLF+TcY+wWfQP7VXCYSRQvp2otwooDOfAHFaKfPur0h6HCZ7Q/aENdaVsVbZWYkudfQF8JouP0mfoEoiRO1p4e59tH2QwoFktIMaPuh07/1qAWfOAo1yxfS57+5X0Sgfs4Ph+iHA1s9fx14MSEzoQCuZa4K5kwDvCDZKNjSc45G8vzrAJ2UoS868DiiySB6XySEhPKn7TCrnHqlnEe75VDNl4pS99DUjc6gP38cR/JG8zemb9rdBksWqlP9cJfpZhIgduMBn/e3Jief37O8YNMQWutj6ahaJbWiIdSvk88j5t0TKSFybFOqtDqGdmW/TrIVoW0IrQbYaVtaDNEB0O66rE/hrww999WVVNKbCr2dOVcyM2XuJSLC57l3ayXM1KqiEmFBtEwPvPGMc3CSrcMRXCQrlKXdzpn9ZBqDf79tPlZr2prp+2Jn/AFGDJMfGi93oHQUmMmqQLyHemkEXC5LMsMnanwa0e8tmrrJkrxSdbpIJflC7cKYyAk/pd9WdJuMchZ+4M4lTzwltfXPg0= 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..b9c845cc41e0 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);