From nobody Fri Oct 2 04:27:23 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012046.outbound.protection.outlook.com [52.101.43.46]) (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 390823ACA4B; Wed, 5 Aug 2026 06:41:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912107; cv=fail; b=ASFDE9boJBidRGpOwp9qG7fmUO8BUqmrD5J6dN0a1VQ0NmJBSe6e/q9ptCNaJzhVVmYZ6dt6KoGtIQkDVAY8uscBJIKOKlK8xhJbJozvWaFv1KiGdQXmGT1YPpo0ZMzVkL44Pej37BHgXfMHrkLgK9bJ+4aGbAfLmksNmF6Ta2k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912107; c=relaxed/simple; bh=Hx9UYtC7m81cRsUZoyk/6NCu3lSkUrBZZZ2qPIwWefg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=E5BCF6vHEiLIguaZsl8QsU2efwMGZ2t2R5HDSgEKLw+qeFLcDb8pbInApkqHAtltYOsaCaHXF1/m/BPxNimQzWcwdYtUz5zPhNMruUU4/B4R7B+5qghTeEdzKZGI8huNYHCjrP0aYX14Co7SomSEuOw7h5UGqPo28UMzyr7WaOY= 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=XBJtJGrJ; arc=fail smtp.client-ip=52.101.43.46 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="XBJtJGrJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XiWD5Ajtly82Hr/uavrYMdg7ZIeAoumDf1P19cDCLpJ8mcsLh3ITvt5Bh+uJvedFcwY50bV1bK/BRsDPrk3Mib40RLRs1dwQ2xofgybA0W0zJE0Wojg2wh5DU2sA7796mmL1bbkkTW3SYLk1xORFd+NSXIQlnBwK4h+qXf5RrLMA40haByAN5AEIr45qWjfjFXE26XO+3GWGcb3zuGxqzHo3T06EIPaCUSA2IBtyLOR8824LTo+M1OekPgL676bjtVbjpwTZ9xVrGG1DVnuEuvFUcMGAiHSEzJSnFly5JE5ioKzrHJ2WE1cezCJ/x9Joz62HckRTVmud0c8Aj7IavA== 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=afmFsNL6j/iJ9E32U8KDSQqP+r9OaJx+DK/3TeLQDQk=; b=U1+t3ZkRmFmZ/YRdCwlnELAekk7LMAzIayWAIHpJ9OyNp/YatjSh22gZBSk2Lv2lE3SfmaaSmlf39prXz1/GNgJKRNa7qo+W87M1BaMBLLLvypErHdddijvrufhdDNzqVaar/ihdHdzBZTQiO7xaudUBUl86ddR+CKRdNhAu7mcv0YHabGRDHXZZfSpqM9BMAskucnRbQxJD1ivFp2Mwyy3UKSXFivwtA34yLghuauJ0wkTQ9zETGWaU19R19RxmpoM5/sgYrUxvWUIM0FzEAEJ7LR7NsSDWCcg92uolBJsBAYfYAE8DDfSuPoAGu4NWBwr+vDVVqwRUXsLbFJCI+g== 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=afmFsNL6j/iJ9E32U8KDSQqP+r9OaJx+DK/3TeLQDQk=; b=XBJtJGrJmA7TImRXCnBhbmvxpwNJ+dkBNirANMafIN4deCvdTSIkgJfYZUJmvnaCbrKWIBAsqvpEVlnxBitKwG4KmWnjb0Vv6CusrkHL3JljBbV4N0jR77rviyDWbH6HQ1e3vy9/zg5NONtbCemC4L2JlL54SB32nq86ld54cDY= Received: from SJ0PR13CA0108.namprd13.prod.outlook.com (2603:10b6:a03:2c5::23) by DS7PR12MB5744.namprd12.prod.outlook.com (2603:10b6:8:73::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.18; Wed, 5 Aug 2026 06:41:36 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:2c5:cafe::51) by SJ0PR13CA0108.outlook.office365.com (2603:10b6:a03:2c5::23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.315.5 via Frontend Transport; Wed, 5 Aug 2026 06:41:35 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:41:35 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:41:11 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:30 +0000 Subject: [PATCH v3 1/9] KVM: guest_memfd: take the invalidate lock when unbinding a dying file Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-1-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg , Sashiko X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=3935; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=Hx9UYtC7m81cRsUZoyk/6NCu3lSkUrBZZZ2qPIwWefg=; b=Fk56lSaOnFisB+qDkjH/DtKWve4VGfa7qvMwXYHElvxiK+c3yEFe/lnluiAQ3BI/O9OE4xshE BylNPbHkQvdDYvJyQFLjP7CrBuVu71gnlAYfPfBdXEvUbBu8oCF9NGb X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|DS7PR12MB5744:EE_ X-MS-Office365-Filtering-Correlation-Id: 949bbe7b-f0ba-466b-244f-08def2bc9879 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|376014|1800799024|7416014|23010399003|56012099006|5023799004|11063799006|22082099003|18002099003|10067099003|13003099007|921020; X-Microsoft-Antispam-Message-Info: nmfj/Q49n/RA129QdZ0p6Cw+/HaDkw5UX+sRq++B6MkZQIln/09vEy9TJ+juY2rgZUZb5O1F8eigwEb9cZyAzRmVs0mN3DzgIaP5pZ7Bf5OhCVgrerx9TkMC3698tx8k81w9gyShEpRR3YN0u2y86qQfoUSRVmURckVTlfs1w9RY1rnZmRmTWAcyI54TrZ7xrSgRYMVPNWl81+kgq/HDzZLbc+XrddRgevJRCY1kZS/fzsS38GXrcVfThl2uW5Snsr+PJvzgOYEN011n+CPVpdjigosiPGfdCedGnPAkejDWC2SI7GYLc1qKYcXYSkYeT0dm63jpp5GfVlVg157Xqex/zTAG983EpvywfmGr+1ODuVmbntFbHYoUXoV6NZ/zp8Piazou8fkeJThBGShUOJpp5OU+NZxADYpO1P1LirzKZNtMUALfs1f530DjSBEUw6/nVL3ibpdf6nX9r2LJL7dtBXhwXIhhMyMVhWoZfV2H7RixLoWiE8Yf3QosJeLP9mMT7/9lBe18lAFMGVRD9w+m/JCOMIyMQowGgKdIXBeGeyx5R2gpJsfzz3PcNuo54XDYpdxd4cV2BTZi56NCsTxzAtBJWPdo8lDHqYv3g70ZuS3hfnlNLjUXnmfgFz1cWihNmWRbUQxq67rbzW4Sd50+3064snshaH18a9u0fxUfzPhrCn/O/3WlEsG8p2LXP7idcKR360h7o39Nu39AKg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(376014)(1800799024)(7416014)(23010399003)(56012099006)(5023799004)(11063799006)(22082099003)(18002099003)(10067099003)(13003099007)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: datV/Epw51BdEE8tvFA3DYlsVLX1Hsu/dYeilTst+ZuO6wTU6ugGH/lvMp5Qd8ddWVf1i6Xtf3ac0CdJ+ARRrMKm50o3J/t5e0KL2QcvoJ47j5fA1mvM9wMvdE1gG6wINEXyYtVScBposg095kIjtP/kavd+ugfDKdnPEach7Qb6pCr6ITgot78eCUaK/aQhfJsxq+73C+qMeEv8dt9eHpA1+9L97OTZI/glAQ5oCYE7B82Sk3pikeM+KDFGnMQqLPYhziUf6dJarTyyfpbzUS+398QMCm7CdMnFvnPTGdkhAksR0kkwDS7bsRQyDYUhHxeLpuIi09EFvK2lo027WA60uccmxJvtE22SfJD48M5mMxaQjB1IMFU/uNF7gnvKzHjebxymjve1zIUWIfYkfMA36tUlSmJWxJw4JGlzvpAEpUTwlDX3rMf3+uFSINn7 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:41:35.7700 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 949bbe7b-f0ba-466b-244f-08def2bc9879 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB5744 kvm_gmem_unbind() skips mapping->invalidate_lock when the guest_memfd file is already dying. All other paths that modify f->bindings hold that lock. kvm_gmem_invalidate_{start,end}() checks f->bindings independently to decide whether to begin or end KVM MMU invalidations. So, the bindings must remain stable between the two calls. If a binding is removed in that window, start increments mmu_invalidate_in_progress but end does not decrement it. Example, unbind race with memory failure: CPU 0: memory failure CPU 1: memslot delete ---------------------------------- --------------------------- (guest_memfd file is dying) kvm_gmem_error_folio() kvm_gmem_invalidate_start() finds binding mmu_invalidate_in_progress++ kvm_gmem_unbind() get_file_active() fails store NULL in bindings kvm_gmem_invalidate_end() no binding found counter stays elevated mmu_invalidate_retry() then returns 1 forever, so guest page faults retry without ever installing a mapping and the guest hangs. Take the invalidate lock in the dying-file path too. This prevents unbind from removing a binding and leaking mmu_invalidate_in_progress. This is safe because any caller that reaches this path holds slots_lock, so kvm_gmem_release() cannot nullify the slots->gmem.file, until kvm_gmem_unbind() finishes. Reported-by: Sashiko Closes: https://lore.kernel.org/all/20260728092027.225CF1F000E9@smtp.kernel= .org Fixes: ae431059e75d ("KVM: guest_memfd: Remove bindings on memslot deletion= when gmem is dying") Signed-off-by: Shivank Garg --- virt/kvm/guest_memfd.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index db57c5766ab6..45cbdf4801ec 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -721,6 +721,8 @@ static void __kvm_gmem_unbind(struct kvm_memory_slot *s= lot, struct gmem_file *f) =20 void kvm_gmem_unbind(struct kvm_memory_slot *slot) { + struct file *gmem_file; + /* * Nothing to do if the underlying file was _already_ closed, as * kvm_gmem_release() invalidates and nullifies all bindings. @@ -733,21 +735,24 @@ void kvm_gmem_unbind(struct kvm_memory_slot *slot) /* * However, if the file is _being_ closed, then the bindings need to be * removed as kvm_gmem_release() might not run until after the memslot - * is freed. Note, modifying the bindings is safe even though the file - * is dying as kvm_gmem_release() nullifies slot->gmem.file under + * is freed. Note, dereferencing the dying file is safe as + * kvm_gmem_release() nullifies slot->gmem.file under * slots_lock, and only puts its reference to KVM after destroying all * bindings. I.e. reaching this point means kvm_gmem_release() hasn't * yet destroyed the bindings or freed the gmem_file, and can't do so * until the caller drops slots_lock. */ - if (!file) { - __kvm_gmem_unbind(slot, slot->gmem.file->private_data); - return; - } + gmem_file =3D file ?: slot->gmem.file; =20 - filemap_invalidate_lock(file->f_mapping); - __kvm_gmem_unbind(slot, file->private_data); - filemap_invalidate_unlock(file->f_mapping); + /* + * Take the invalidate lock even for a dying file. Otherwise, + * kvm_gmem_invalidate_start() can find the binding and increment + * mmu_invalidate_in_progress while kvm_gmem_invalidate_end() misses + * the removed binding and skips decrement. + */ + filemap_invalidate_lock(gmem_file->f_mapping); + __kvm_gmem_unbind(slot, gmem_file->private_data); + filemap_invalidate_unlock(gmem_file->f_mapping); } =20 /* Returns a locked folio on success. */ --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011013.outbound.protection.outlook.com [52.101.57.13]) (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 4B6BF3DBD55; Wed, 5 Aug 2026 06:41:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912107; cv=fail; b=N9nBZyBRKQzYjgVgS/6YBrm0cZ2EZBgEhZnfQ/coFpPWyE5x2+6Yryr2UrYXwM7hpo+LK/1GYCiLsMyTWV/jbGKIVrg05EylBpE9KC0jklAEDRZHN0PQaQp8hKKRc/hXP9yq4SGKAjCqLhVZv1kdhIICfxapVSlkUb/7j1kB2aM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912107; c=relaxed/simple; bh=JxMj0y/S7bFLlD1nwUvnMUQhs3qj6rMOH/yENOwr9I4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=I9MdlY1N16Onae/NPHnzPjWesKNAkw5W3FgnorjZgY7aW5MWrBbTOipoPuKaWAnfc/ev2x67kb/0AMWNIzg95eh0a2oyZvhSOrfVGNB2zTFwHDvINnaEHcoJEMLWPY9Y3H/yJ2/7Caf2bdISuGTL+8fIJdRMI2dzMTXXdvic7/U= 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=HcNkNgk4; arc=fail smtp.client-ip=52.101.57.13 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="HcNkNgk4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xgU+jjDr+6cFzGofPHdeN2zRSppaKSnOU357URVNI8j30J/9b3Pb595px33y+XbW3xmlimn3XW9EGoeegKsCBrJ6kmszulqijDtKqU6f8OWOGxaqWjYgxqCWBZkHvha+nbVrnvhpcrf7dnXutZX5VMM9sfCql5jGBJcSQxRFkhWb+Mamt6jEPafN7XnBZCucBWmZLzKYcMUfW3TG9gAhsCwAmaecKayCaYNCSrBN4YnvVMeKt+1Or0nSrP8/ZCnbn+5qNNnB1sPpKiXjZILXdX8DYVxvBaGgorI4eCF1CQLrF1xgRrIZQ5Vs3tVwtg4RsJ3Lyh/7+q9rhcKNSQBwEA== 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=Wb5cEvLHp0OlCkZ1kwUW+yulx3ll561bdMS0g7x2yOc=; b=O6do9QXsWr63rGp/wjqMZ1tgJ8fpFxo80btU68kC6fnxiXrXTrXcGShpajcK38XHYu34U42W66c089ai45kjQXXeHbNDWEFGUx6xOmooMTopO6h1w2sHN8HXGmPCluw8nZZCfLLCf13PmhYTwPbF9V0EiKcB+lmjlfd+uWUtg/8JNX06+hTFB0MAVF1xQ5GaUzROtlGU0zIBHd8zNLLUrenEg+QujRe94tnj+YvTa86GmUTGtKIHMY3O3i5MmMtMGdTl/t401X5h99P+vphREh5T3jUkPijEQjYAfBd2bwO6X2aasgifmSXdY90RIZsitb4P2KdCPFUg5Fdzv82eIg== 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=Wb5cEvLHp0OlCkZ1kwUW+yulx3ll561bdMS0g7x2yOc=; b=HcNkNgk44DPGSRGzrxGvH36ghSjjNwouC4vwVdmeBczH+WWczC8aDhIXwrVlqqrU8wGE6WrY7MvBO/ejkh3PFdGF0hLFL+WuAbROgRQmf4EbspZ+G2GPLIXFWNNru91/jG/HIffX96sx+R0+05/x5kfZjui26ye1vXgpcbOA/q8= Received: from SJ0PR13CA0097.namprd13.prod.outlook.com (2603:10b6:a03:2c5::12) by SJ2PR12MB8692.namprd12.prod.outlook.com (2603:10b6:a03:543::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.15; Wed, 5 Aug 2026 06:41:38 +0000 Received: from MWH0EPF000C6189.namprd02.prod.outlook.com (2603:10b6:a03:2c5:cafe::86) by SJ0PR13CA0097.outlook.office365.com (2603:10b6:a03:2c5::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.16 via Frontend Transport; Wed, 5 Aug 2026 06:41:38 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by MWH0EPF000C6189.mail.protection.outlook.com (10.167.249.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:41:38 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:41:23 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:31 +0000 Subject: [PATCH v3 2/9] mm: split AS_UNMOVABLE back out of AS_INACCESSIBLE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-2-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=6122; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=JxMj0y/S7bFLlD1nwUvnMUQhs3qj6rMOH/yENOwr9I4=; b=2XuNYeCPl49Ii4Rs1HQcchjrB0786BJfqQSmKd8m3icYgH/W5p5fr8NjEb0XpDMXWAZ3Uo6Vn 5HcT1xCv+s/BYD1JJyHa1riG8y34kBAJMmT6sgFXwa1DHhf4qzXqbq1 X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000C6189:EE_|SJ2PR12MB8692:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a905a83-6897-45ef-cb3d-08def2bc99d5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|1800799024|82310400026|7416014|23010399003|11063799006|10067099003|56012099006|18002099003|22082099003|921020; X-Microsoft-Antispam-Message-Info: ErlsFPdngcH7s5uYWP4kV9qEJuPMHubOwK3c2mzUsge3p6ZEWEIpqsJ2Buy7YQ4VWpM8PgZlabgLvPXBlBhasoj4XmfN5gjvyQQ1FKEvPnEZhhlTkqg3KZbOHynIKQjLzlKNawDo5hTogRe43vr29F+wVvX3jGR6Zea3JAAd3IC7HhFrsHNk/4i7W34aOZ7U/b6fL3fsJB1TrH9YKKNhSzJ5un5pS0ykowa0/qzfOh68O/aiwC+HusXLdM0y9uAlQAX7/92uW6sIZlcBBHA7nKYQMOTisvw4B9vrg2apT5IsjeSEHRDHVtgUBvpyg66cXKGsIK7nF390lsH5L8CZc6+YUUzBV/Fiud7MsDGXbLMGtmRjJvdCziH2qr+kW652Dp0x3j79gHkDGlvZl61T++lNao+NhirWo7ocLjA9L0FlVEJ8ZlV3nY6qnj4R7GjYyxkdHFEUIY1YS0TSlVGqOfCEfb9wFleMyPPFtwhTbIOkLI++NqiZtKSfYcucXQxWXz2Ql+Vt/nFtwR6n0pYz8Z0++sbkKHntrRWnnuRtH2Tv6m+47wYfCVQ30fE5hxnmerk/nc2ZvHfsSiwfQ82y6bxxwq8apC5w9KWqGMx+uJohhikXTpd6Gt8sWvReB0aRUjnt3k4KpouMhBXtz89D6FBjNsUKomkj1d8/Z5oNucXC+LNChyOx5zLqo0SIXJufI5E6IOmmclEcEbfAroDiueYQGv9qrVqKboOBjy7Ima4yqbxFoLgN7wSTe1xBZpcr X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(376014)(1800799024)(82310400026)(7416014)(23010399003)(11063799006)(10067099003)(56012099006)(18002099003)(22082099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 01W4IImRINZWw/pcCL9qJpPsOO2KcKbbdHCUozfFRRF8HbuF0s48LuDw8ntNq43PgPtCa/M62r0gRKYQ/XfT/E3KbanXxeAXjtHGpK1RIThaBKAQb/3o+foFSeRyAvKMEGqBH69GhnATB/8uEDLiNvCwY2l0qpz+cY6sG2D3b87LL8ioE5BmWRkXrcWIcKijSRr9gRUe7Bd9xn983paawXmwD2a5zX6kzsKJn65REbkNN0M0MTcgowSc8CSj0InMAKNBsDAIaoQrn7ADEc2kKiaPMPKmI2D2AQdDrTiOUF8GYf3LcPi6S1sEPyV38IQ1VB9+H4KTAzTPxXgXC0FdzJhku18khis7fCyxxiCrzL6uf1Tiqm1JEH9BU5K9F2ZsmlY07zz9ubkGnMah4wO7fOh5dLK7lbP3Tiydgk5agCQuiK97gQ/0juYVBs4U6z3z X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:41:38.1057 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a905a83-6897-45ef-cb3d-08def2bc99d5 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000C6189.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8692 Commit 27e6a24a4cf3 ("mm, virt: merge AS_UNMOVABLE and AS_INACCESSIBLE") folded the two flags into one, on the grounds that guest_memfd was the only user and always set both. But the two flags were added for different reasons and guard different things: AS_UNMOVABLE (0003e2a41468) marks a mapping whose folios cannot be migrated. AS_INACCESSIBLE (c72ceafbd12c) marks a mapping whose contents must not be directly R/W accessed. Its only job is to stop truncate_inode_partial_folio() from zeroing the folio. The merge assumed unmovable and inaccessible were the same thing. This cannot express a mapping that is inaccessible yet still movable, which is exactly what guest_memfd wants. Reintroduce AS_UNMOVABLE and restore the original split: truncate keeps checking AS_INACCESSIBLE, while migration and compaction go back to checking AS_UNMOVABLE. Currently guest_memfd sets both, so the resulting flags and behaviour are unchanged. Preparatory change to support folio migration for non-confidential guest_memfd VMs. Signed-off-by: Shivank Garg --- include/linux/pagemap.h | 24 ++++++++++++++++++++---- mm/compaction.c | 12 ++++++------ mm/migrate.c | 2 +- virt/kvm/guest_memfd.c | 1 + 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 2c3718d592d6..a7dcaa66e4e3 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -210,6 +210,7 @@ enum mapping_flags { AS_WRITEBACK_MAY_DEADLOCK_ON_RECLAIM =3D 9, AS_KERNEL_FILE =3D 10, /* mapping for a fake kernel file that shouldn't account usage to user cgroups */ + AS_UNMOVABLE =3D 11, /* The mapping cannot be moved, ever */ /* Bits 16-25 are used for FOLIO_ORDER */ AS_FOLIO_ORDER_BITS =3D 5, AS_FOLIO_ORDER_MIN =3D 16, @@ -322,11 +323,10 @@ static inline void mapping_clear_stable_writes(struct= address_space *mapping) static inline void mapping_set_inaccessible(struct address_space *mapping) { /* - * It's expected inaccessible mappings are also unevictable. Compaction - * migrate scanner (isolate_migratepages_block()) relies on this to - * reduce page locking. + * The mapping's contents must not be accessed by the CPU through + * the kernel direct map or other internal paths (e.g. zeroing of + * pages during truncation). */ - set_bit(AS_UNEVICTABLE, &mapping->flags); set_bit(AS_INACCESSIBLE, &mapping->flags); } =20 @@ -335,6 +335,22 @@ static inline bool mapping_inaccessible(const struct a= ddress_space *mapping) return test_bit(AS_INACCESSIBLE, &mapping->flags); } =20 +static inline void mapping_set_unmovable(struct address_space *mapping) +{ + /* + * It's expected unmovable mappings are also unevictable. Compaction + * migrate scanner (isolate_migratepages_block()) relies on this to + * reduce page locking. + */ + set_bit(AS_UNEVICTABLE, &mapping->flags); + set_bit(AS_UNMOVABLE, &mapping->flags); +} + +static inline bool mapping_unmovable(const struct address_space *mapping) +{ + return test_bit(AS_UNMOVABLE, &mapping->flags); +} + static inline void mapping_set_writeback_may_deadlock_on_reclaim(struct ad= dress_space *mapping) { set_bit(AS_WRITEBACK_MAY_DEADLOCK_ON_RECLAIM, &mapping->flags); diff --git a/mm/compaction.c b/mm/compaction.c index f08765ade014..e6b0fdfaf79d 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -1133,22 +1133,22 @@ isolate_migratepages_block(struct compact_control *= cc, unsigned long low_pfn, if (((mode & ISOLATE_ASYNC_MIGRATE) && is_dirty) || (mapping && is_unevictable)) { bool migrate_dirty =3D true; - bool is_inaccessible; + bool is_unmovable; =20 /* * Only folios without mappings or that have * a ->migrate_folio callback are possible to migrate * without blocking. * - * Folios from inaccessible mappings are not migratable. + * Folios from unmovable mappings are not migratable. * * However, we can be racing with truncation, which can * free the mapping that we need to check. Truncation * holds the folio lock until after the folio is removed * from the page so holding it ourselves is sufficient. * - * To avoid locking the folio just to check inaccessible, - * assume every inaccessible folio is also unevictable, + * To avoid locking the folio just to check unmovable, + * assume every unmovable folio is also unevictable, * which is a cheaper test. If our assumption goes * wrong, it's not a correctness bug, just potentially * wasted cycles. @@ -1161,9 +1161,9 @@ isolate_migratepages_block(struct compact_control *cc= , unsigned long low_pfn, migrate_dirty =3D !mapping || mapping->a_ops->migrate_folio; } - is_inaccessible =3D mapping && mapping_inaccessible(mapping); + is_unmovable =3D mapping && mapping_unmovable(mapping); folio_unlock(folio); - if (!migrate_dirty || is_inaccessible) + if (!migrate_dirty || is_unmovable) goto isolate_fail_put; } =20 diff --git a/mm/migrate.c b/mm/migrate.c index dd15a84b2a52..d4dcd7f142ce 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1101,7 +1101,7 @@ static int move_to_new_folio(struct folio *dst, struc= t folio *src, =20 if (!mapping) rc =3D migrate_folio(mapping, dst, src, mode); - else if (mapping_inaccessible(mapping)) + else if (mapping_unmovable(mapping)) rc =3D -EOPNOTSUPP; else if (mapping->a_ops->migrate_folio) /* diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 45cbdf4801ec..169f75f95433 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -593,6 +593,7 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t si= ze, u64 flags) inode->i_size =3D size; mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); mapping_set_inaccessible(inode->i_mapping); + mapping_set_unmovable(inode->i_mapping); /* Unmovable mappings are supposed to be marked unevictable as well. */ WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping)); =20 --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010028.outbound.protection.outlook.com [52.101.56.28]) (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 2B3FD3DDAF6; Wed, 5 Aug 2026 06:41:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912118; cv=fail; b=G+ejbkxmJYPQzQX8YJ6KMwKFRoRM3kwc3/ypt4QtOZaFSLMKk6+QWdNcrslFf0Spyw0q2o63cxU/oukLPQRl9xupjM5uWMW02yG/sy6/Bq+yIBglcrgaEdnOETTkrhMCRWB8CkS90qdhh7T67rEK0qIxNSh4s+eKRTAY8ZavidA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912118; c=relaxed/simple; bh=UrdSd3QSpWnCKVjuxuM9F79TXeGwovan7hpw6KGq9zk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=BPBKjpfOGBuvWGH9qEMVHaPq5n3tmRj0oJF+wHYfXhB2Y6NFyhzbwOkwts2WEj/iuY6sNHd/voVD+bOnkK2Y6mA+x0IY9c6P2jDwl1+maL+EExs7RBcbBKHKUJwEnh+GjPtnMav3fJXO95Mp14aRetRZI7kGtthYgMmogXzmD8E= 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=erOkuVHw; arc=fail smtp.client-ip=52.101.56.28 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="erOkuVHw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=v1+4aQYe+5n0LtJXyGMFTZwGph+pxyue62GspVBnTfw5uPwoWx3xv0CFKgR25XaQ691lP5RIAwEJNd7nA6URYgiq1hAo8tm2xgXAjgiDQYbxMqcjRCjBz8kXINNuppz93CarxMhDb1qHnAvgtfp+MUoFlnVDekYeC9w+9ccgLtxqS3QJT3vz/10zaVKR0I2jYjPL0B6RQT0A1EmSYZhRcTHzaU2xWGlPO81jSYqj3/2h1+EVojehVmNFZkgmdLdzdY3vIhyBlRJZJ+mgIM9mIkItNDlWA2JYBzOkYne7iIxT8wzxj+j0bqv+gTCtjqh6z2uvb/sk16WnlMo/MnjZHw== 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=4qFsgzcnV0HezLIHw4Kxk1DEB276/tY/e7dDoGsmaM4=; b=mK/FjR6Zeg37eQoDFIN4/tg2AQB/9tmnYucKp0NsBoJ2XcAyQwTLbvIduJLspkwqTo1eABvSCRsg8Up4a6IoMEaEbTAH4TgsPSEwKM/7ftEzeo1uGXCQYBEeRCUP155ioW9YmrV8eu0K9UFOgeQ7Hon3ZOe+lDYlF12AlU+bFeBOgL2pbpSPOmVUABcw4hlNIKpraB8HZMh2AKAcHLxd8YVBLBE2d9lYcv+oDzST7xOYmAcyl8r5v1fgSuvH/tggeuAg5tOdGcrQnq9Eo9Dvf2VsU/Mzjseqcumj55c/Bh6z/wYXb1S5PAR8GRLmRmyXGwrpnHx21gF6b9JrydLWFg== 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=4qFsgzcnV0HezLIHw4Kxk1DEB276/tY/e7dDoGsmaM4=; b=erOkuVHwErnnLFOQ3H7v//hxlNCXcxUer2Kc5UE4TbiqXuuOpKExtlxvO8fKuS05XBZN6L3QuBzTcOH52FSXPMwQDyvLaGOZzjckL8N4A2hnEpTm22SwyHhMD30f8rqnNps+5168+2PblU6eQBCgootuWuK4WWc3/fXlJDdx1/8= Received: from MN2PR18CA0012.namprd18.prod.outlook.com (2603:10b6:208:23c::17) by DM6PR12MB4140.namprd12.prod.outlook.com (2603:10b6:5:221::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.19; Wed, 5 Aug 2026 06:41:46 +0000 Received: from BL02EPF0001A108.namprd05.prod.outlook.com (2603:10b6:208:23c:cafe::1) by MN2PR18CA0012.outlook.office365.com (2603:10b6:208:23c::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.15 via Frontend Transport; Wed, 5 Aug 2026 06:41:46 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A108.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:41:46 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:41:34 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:32 +0000 Subject: [PATCH v3 3/9] KVM: guest_memfd: implement folio migration for non-confidential VMs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-3-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=2535; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=UrdSd3QSpWnCKVjuxuM9F79TXeGwovan7hpw6KGq9zk=; b=QfzT5bgvAo0dPE2y0d+uYNGu85zH9jrWDJNAuliUXU7sDkiF0sdDA3XfOqSoQP3+Fxsux61Nd C530F3lq3CPAFIhUHqYQKg4f4Fg8pc71n1AOkogTzpbqHjw/33PF+5x X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A108:EE_|DM6PR12MB4140:EE_ X-MS-Office365-Filtering-Correlation-Id: 2658d4c6-14d7-4d1d-8a05-08def2bc9edc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|23010399003|1800799024|376014|7416014|921020|6133799003|10067099003|18002099003|22082099003|56012099006|11063799006|5023799004; X-Microsoft-Antispam-Message-Info: CZFf6bdHY55uSNEr+tB3krxzR1nY2PA2yTT8atAJE/OJ4pxOLKkzpUluynA7MKggKv/0TzI6IHAbAndMoanZprhHV+h5Ud5Zb2ybKcZjLpP3ChjtrDbGdfKHQe+CKxQ6+RvmGqlerSAiRuuy7V5oVhZb7ZO59Z6ZUiJMdK2FVIFhJPHKoZO3pzGpfuHFkEmbfLqfNbqXibZ4mxWTz+EGXd1d2CCBJZdWVYFwagDmTyzR43vPoZlKVJyr+1kHeNN6EhsNUIR29CPMV1rcJfXiGb+Nxz9qkBuc5704EBbIEVUAkHIcI0s7dCXz6wgKU64j3/AUrN/k+Jq9tt334AJ7pYK7ZkwP62wVRY16tLT9xICfHCKZJgcP0rx8tmpZvqtVTsFKI33zQURLUmPd0N2SYxHaTRncVcExQeeHfk6J7egeUYD9FhzX5hHwaY45py24wMu6ww9zuqhRPsJrlfHq8rUb6EJ7J/7Ql851mN3V4WH5FbW4jOmz3JpSUiN2RyI1NZnlupGB1muQTLeg5RDiUZx0MWFrVD0vATyhoq6j9K7odNs28pPIcL0PMrs2eHC9S3My1K/tibUWt+ZyzjuBS11VYhgUEuuCj3lMtv4YP03JFHIJCbDM7tYRRfK6Vwww2N7PCB3hZt6X5/uPoklJXPbQViFVz+9JKFjaFEVT110q1UKXrrpgeRed3h4ALGCgjTwyc/xzptFFjR1KcHDs1oyr5TXQfreHZe0ox1M/Buxzi3MHfMonIRXO9YzArODr X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(82310400026)(23010399003)(1800799024)(376014)(7416014)(921020)(6133799003)(10067099003)(18002099003)(22082099003)(56012099006)(11063799006)(5023799004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nEIVylMk39Rn75qV0NS9PLpyWfwyl7UfhaXn4+ZEk1T3Das5892D5CKzhUp8hbnKTgnkfr4np89E35UydCGvrWGEUkvzfVBh6qr+OYf5lEFuf7rIO9Ym8Cq6zlLCHi6NbO3WUZZfpqa1GaFMGO9aklr7FEXIGbKBHe8EH4giLjpi8s9up9Vg3L3EnKPv7T7BL3sbGz5z8v+xuHIomWgs0Srsk4u1YwBRme/xLACk9TLc7ZJYgvwm2X7jjbqAtn12bzA6kQDsmSs7ZMf0Io4vQo4ckQIOfGMVYt85dMO8a5VtY8wQI28PVTLD8uuBVmW3Oxf08vTh3qpzfQLdbFn4mZ+vIUxCBlU/agsVFtTEGCgj+HtvuyPkjuX3bgHXBi5P8LbZ4pJye7h3aGhNfXzX6TBRjKu8HrBMiZQjy1O7zGuYT5LQ31f2ZdVQ4xFRLkU7 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:41:46.5855 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2658d4c6-14d7-4d1d-8a05-08def2bc9edc 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A108.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4140 Implement kvm_gmem_migrate_folio() using filemap_migrate_folio() for non-confidential VMs but don't enable it yet. guest_memfd mappings are still marked unmovable, so MM never calls it. MM invokes ->migrate_folio() callback with folios already locked and acquires the invalidate lock afterwards. kvm_gmem_punch_hole() takes the invalidate lock before locking folios during truncation, so taking invalidate lock in migration callback can cause an ABBA-deadlock situation. Use filemap_invalidate_trylock_shared() to avoid this. A subsequent patch adds an opt-in flag to change the mapping to movable and enable migration. Non-confidential VMs can use host-side copy via folio_mc_copy(), whereas confidential VMs will require firmware-assisted copying before they can opt in. Signed-off-by: Shivank Garg --- virt/kvm/guest_memfd.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 169f75f95433..583341d593c9 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -488,13 +488,45 @@ static struct file_operations kvm_gmem_fops =3D { .fallocate =3D kvm_gmem_fallocate, }; =20 +#ifdef CONFIG_MIGRATION static int kvm_gmem_migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode) { - WARN_ON_ONCE(1); - return -EINVAL; + struct inode *inode =3D mapping->host; + pgoff_t start, end; + int ret; + + /* + * Migration invokes ->migrate_folio() while holding the folio lock. + * Use a non-blocking trylock to avoid inverting the lock order with + * truncation, which takes the invalidate lock before locking the + * folios. + */ + if (!filemap_invalidate_trylock_shared(mapping)) + return -EAGAIN; + + start =3D src->index; + end =3D start + folio_nr_pages(src); + + kvm_gmem_invalidate_start(inode, start, end); + + /* + * For non-confidential guests the folio is host-readable, so + * filemap_migrate_folio() can copy the contents itself via + * folio_mc_copy(). + * For confidential guests, this would need firmware assistance. + */ + ret =3D filemap_migrate_folio(mapping, dst, src, mode); + + kvm_gmem_invalidate_end(inode, start, end); + + filemap_invalidate_unlock_shared(mapping); + return ret; } +#else +#define kvm_gmem_migrate_folio NULL +#endif =20 static int kvm_gmem_error_folio(struct address_space *mapping, struct foli= o *folio) { --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010071.outbound.protection.outlook.com [52.101.193.71]) (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 070E53DB314; Wed, 5 Aug 2026 06:42:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.193.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912129; cv=fail; b=akA4FErFc/Xoggm6T3R30Qy1xmA7sCtSdKRlR7rXWBm5xX/ZSEDZIKYvbZ2oksFJeZldSwWFk08xttMjhMI+DIXB49AHiL+3ffOLVV3h5an4V/gBW6tbbRYylaje8EQj5rDf3jmZdULU0hYZxaLoNKm1uq92vQY+3ZApV+Yo0rY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912129; c=relaxed/simple; bh=UW99vnlEjKtw6Uukt3JuYaFIVOn3I1MNi2dXAdU8AWs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=brT71bEDWh4d5WFsq3hHuxojLnmw4jEOejrokE3iprqq1nvzFK7y6q/zG7htqdlVVkMQc6uY0Tarnoc9R1KXlpC1N/KS1MbmO7ExwcQcDvBJx9RM8eO5AoghiK8YAm10vtUI5x3Omc5LusH+W312RZKymCWh8dn/IKgOh6KozAs= 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=H2qyaRsG; arc=fail smtp.client-ip=52.101.193.71 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="H2qyaRsG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pX8sGB7EfTBvqUv6iJpYdWHyd48fZQlX3YU54xxvTr80RhEpWTWaj8nQgdB5daCRof8bUmqWXRbDOXitv4pCutPewFMV4ljb5/KhidmToTwhAG60pgj9mhs+vZ6HLIdaSL2q5PWIaLgXRIQbv5rF1lb4sSC3KnfTwph3ch56DMTBSKEI26wTNv4cUezaDRsVgAFm6le5JD8/wt7Z5kjFY6B0Pc7Tp6qiMJ6ZJ+JQpqy9wzLSfbRweSaOoPSOovEGhZVZZVq6pZWQVFwKp4t36yC0hCJhCZiLLhrav9hFaGQUUkfw6DHj6cEaqYXeRhaoDxLQ6k5/ixQyNggT8WCT9A== 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=Ze9sg6BRov+gURM7aaIAO711ZASBEebsh+lEEAUSNV4=; b=jw3eGQlhcdIhC5InluGbeORsM6njEmmc7p1pZfuQ5cAjlCYeYiV8K+yfFf6xnSG05/uR5THmjBbfG5NJQXlUpkAvL2ullNeZEYeFkX0Ikb/n+5lG0+6+/F9xzoLV7LOAEdiKtYLg+7WHESVrmtcqtl6hIN+3t0hQu9+2rmPi5uqgsfdDcj2CzUUcDCjg0mla8tBPE7XrJ1ugyXVRFn5h8emT90ea6yEItbR4gB3uROdjeqHLn+oFAh3kajVMGOaO06Gp4WxiSq4k97OtwApsAn9s7s7QOhnx9U8H27pgKIryVFNn8mTuozpZXoLsnhDyxbAjDEAh9716pokNdlXO1A== 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=Ze9sg6BRov+gURM7aaIAO711ZASBEebsh+lEEAUSNV4=; b=H2qyaRsGFvTK+tgCYK713GgTmC477VAfcWHn82SA/oHW8roAa5p1xb4FArDe2cCOJADoHMUgXHMjsm/J8CO4bCgYPXn0SovdgifQNSCr9FUzGKPjVjvRaYWY5jkz+VmEBHsS9x1I/otlCMCtY3JMpezNLeMRaKwrTJQB+z1+zbM= Received: from BL1PR13CA0429.namprd13.prod.outlook.com (2603:10b6:208:2c3::14) by DM4PR12MB5771.namprd12.prod.outlook.com (2603:10b6:8:62::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.12; Wed, 5 Aug 2026 06:41:59 +0000 Received: from BL02EPF0001A106.namprd05.prod.outlook.com (2603:10b6:208:2c3:cafe::56) by BL1PR13CA0429.outlook.office365.com (2603:10b6:208:2c3::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.16 via Frontend Transport; Wed, 5 Aug 2026 06:41:58 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A106.mail.protection.outlook.com (10.167.241.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:41:58 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:41:46 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:33 +0000 Subject: [PATCH v3 4/9] KVM: guest_memfd: add GUEST_MEMFD_FLAG_MIGRATABLE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-4-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=5974; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=UW99vnlEjKtw6Uukt3JuYaFIVOn3I1MNi2dXAdU8AWs=; b=QioaAc0rylkmD5ljqpqwKygsTAxiDzwteGibPSoESiYh/jhguOG48+7BL6wZ8qGynJF4Faw5L 54297XX8mAeDs4iW9Q2PxiXND2Pvg8lwOIDsM60dtwtyUA2QeFCWo31 X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A106:EE_|DM4PR12MB5771:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a64408e-bfcd-49bf-e9d4-08def2bca61c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|23010399003|376014|1800799024|7416014|82310400026|10067099003|56012099006|11063799006|6133799003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: VTeuoAfeSMKToxYS5Bg0XSbXkwizvMOPkn9eE4DaXy8JqyPHKCEleen4yefteRWjY2iqOOWV6g8A6s0MoUK6s6Vum+cQJrd6+fOjdLabBit9pDNStBI0bnd7wR6eNOduO3pS3hKa82EyKzy5G5ZIS/N9uqwHrX/lgIw+HST2l2o1NqZR3g/R1HwPG9QCR3iLWrzezvls+zwQhPfCg75POo44iei/JbTK+TP3KFp1x2cXWrjtJSZnGd4YBZ6J1HiA/FtbUsFb1798FENLUXqdvb7Xd0cCPtew4wmM5188+rUNCyK6N9o7LBiuxBpzw8pP3rECtFkysMUtJQKOj0am2934TRJopocGw7q6go1tAJyqaH5E658AntMQDiosU0ZPX7FqpsXqclr/Kbl9RwiGwj0ZeU9wI4nHmZ/55XPwtbeu6Foyv7IC7hEK/hzbeGLS3pctVUu1rmrQswC3F7evxHyS5QJ4aTT9LL8nELfDLJHbirdg5no9ABI4pS6eMjlhiWbtfmV3JI9h7h89glI778B3knuwbrfdJqzfDnHVuNayW6q5TgZXmu4T6wuuFaqretrf+m3/10KdeMrLxJHjWUrTRzuJDP3S/z0SnJnXaj7HwEPxtu79gXBRGvHaqZ3m+ZJa8KO3CN+q0h5VlZc1xJWlntiSM0yY0sruTBv2V44vkIws5FhHhry98isZCspvtUHFMjIEPhL5aZSm939y1XIwggC8VLM1kJ5967ukubU6JhsS/oBz2oXxusvcprc2 X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(23010399003)(376014)(1800799024)(7416014)(82310400026)(10067099003)(56012099006)(11063799006)(6133799003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZrBelWsLTZD5TBr30msZ39WTC87si6zQAy9Mk8wEK5Fi4ZX4ozgvNwhHNjaU0l0h2ukfglRBqQIwT1nNy6/xvClYACkCfGoE6ycNAyWVV/dJ0CCZNi4Hr2PJCJTTItoWV2QzwvyHp/6xuTJndJHZHocaKkw3B5MsgdCP2PdDWZSeQ89Rw5YqAR4ejiq6K8VBrjucOaKPvkvmzTG9zBxqeuWOV+2kPgFWNG8pQOiKJsIC3m9xNyU9t0hLxccSch6c4GdzctKj2MTczNHmTKoBMslErkcgxoIXfcfMFPBGiqrGlLdcl2af5XyBQ5Woc7/xKhFPNeKqVnGXkn6edbujVHua7JbHuzNeVGnlUgbEVpXHly2+FxrAFrKorS56ITAQwAZb9LJqjgm3KAUNTlPd7vEsp8NIhMSy8+cTC9R2QiemXsGd1Zi3iaXr+co3mMoT X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:41:58.7517 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3a64408e-bfcd-49bf-e9d4-08def2bca61c 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A106.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5771 guest_memfd folios are currently always marked unmovable, which prevents the MM from invoking ->migrate_folio callback in scenarios like compaction, offlining, etc. This is unavoidable for confidential VMs (SEV-SNP, TDX), since memory is encrypted and copying it needs firmware assistance. However, for non-confidential VMs (like firecracker), we can still migrate the folios. Add kvm_arch_supports_gmem_migration() so an architecture can control whether migration is supported. Add GUEST_MEMFD_FLAG_MIGRATABLE so userspace can opt-in to folio migration. For opted-in guest_memfds, use GFP_HIGHUSER_MOVABLE so their folios can be allocated from ZONE_MOVABLE/CMA and grouped by mobility, otherwise keep the existing unmovable behavior. Remove redundant WARN_ON_ONCE for checking unevictable mapping. Signed-off-by: Shivank Garg --- Documentation/virt/kvm/api.rst | 3 +++ arch/x86/kvm/x86.c | 9 +++++++++ include/linux/kvm_host.h | 4 ++++ include/uapi/linux/kvm.h | 1 + tools/include/uapi/linux/kvm.h | 1 + virt/kvm/guest_memfd.c | 18 ++++++++++++++---- 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst index e3003a241d5b..976921527ef9 100644 --- a/Documentation/virt/kvm/api.rst +++ b/Documentation/virt/kvm/api.rst @@ -6461,6 +6461,9 @@ specified via KVM_CREATE_GUEST_MEMFD. Currently defi= ned flags: without INIT_SHARED will be marked private). Shared memory can be faulted into host user= space page tables. Private memory cannot. + GUEST_MEMFD_FLAG_MIGRATABLE Allow MM to migrate guest_memfd folios. + Availability is architecture sepecific. Wit= hout + this flag, folios remain unmovable. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D =20 When the KVM MMU performs a PFN lookup to service a guest fault and the ba= cking diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 47cb9eba113b..7087b0b8f973 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -14130,6 +14130,15 @@ bool kvm_arch_supports_gmem_init_shared(struct kvm= *kvm) return !kvm_arch_has_private_mem(kvm); } =20 +/* + * Migration of guest_memfd with private memory is not supported yet + * as this may require architecture-specific handling. + */ +bool kvm_arch_supports_gmem_migration(struct kvm *kvm) +{ + return !kvm_arch_has_private_mem(kvm); +} + #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE int kvm_arch_gmem_prepare(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn, int m= ax_order) { diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ab8cfaec82d3..7b2f15b21970 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -731,6 +731,7 @@ static inline bool kvm_arch_has_private_mem(struct kvm = *kvm) =20 #ifdef CONFIG_KVM_GUEST_MEMFD bool kvm_arch_supports_gmem_init_shared(struct kvm *kvm); +bool kvm_arch_supports_gmem_migration(struct kvm *kvm); =20 static inline u64 kvm_gmem_get_supported_flags(struct kvm *kvm) { @@ -738,6 +739,9 @@ static inline u64 kvm_gmem_get_supported_flags(struct k= vm *kvm) =20 if (!kvm || kvm_arch_supports_gmem_init_shared(kvm)) flags |=3D GUEST_MEMFD_FLAG_INIT_SHARED; + if (IS_ENABLED(CONFIG_MIGRATION) && + (!kvm || kvm_arch_supports_gmem_migration(kvm))) + flags |=3D GUEST_MEMFD_FLAG_MIGRATABLE; =20 return flags; } diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 419011097fa8..e1615a62ed78 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -1654,6 +1654,7 @@ struct kvm_memory_attributes { #define KVM_CREATE_GUEST_MEMFD _IOWR(KVMIO, 0xd4, struct kvm_create_guest= _memfd) #define GUEST_MEMFD_FLAG_MMAP (1ULL << 0) #define GUEST_MEMFD_FLAG_INIT_SHARED (1ULL << 1) +#define GUEST_MEMFD_FLAG_MIGRATABLE (1ULL << 2) =20 struct kvm_create_guest_memfd { __u64 size; diff --git a/tools/include/uapi/linux/kvm.h b/tools/include/uapi/linux/kvm.h index 419011097fa8..e1615a62ed78 100644 --- a/tools/include/uapi/linux/kvm.h +++ b/tools/include/uapi/linux/kvm.h @@ -1654,6 +1654,7 @@ struct kvm_memory_attributes { #define KVM_CREATE_GUEST_MEMFD _IOWR(KVMIO, 0xd4, struct kvm_create_guest= _memfd) #define GUEST_MEMFD_FLAG_MMAP (1ULL << 0) #define GUEST_MEMFD_FLAG_INIT_SHARED (1ULL << 1) +#define GUEST_MEMFD_FLAG_MIGRATABLE (1ULL << 2) =20 struct kvm_create_guest_memfd { __u64 size; diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index 583341d593c9..a2b7c2f1c49f 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -589,6 +589,11 @@ bool __weak kvm_arch_supports_gmem_init_shared(struct = kvm *kvm) return true; } =20 +bool __weak kvm_arch_supports_gmem_migration(struct kvm *kvm) +{ + return false; +} + static int __kvm_gmem_create(struct kvm *kvm, loff_t size, u64 flags) { static const char *name =3D "[kvm-gmem]"; @@ -623,11 +628,16 @@ static int __kvm_gmem_create(struct kvm *kvm, loff_t = size, u64 flags) inode->i_mapping->a_ops =3D &kvm_gmem_aops; inode->i_mode |=3D S_IFREG; inode->i_size =3D size; - mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); mapping_set_inaccessible(inode->i_mapping); - mapping_set_unmovable(inode->i_mapping); - /* Unmovable mappings are supposed to be marked unevictable as well. */ - WARN_ON_ONCE(!mapping_unevictable(inode->i_mapping)); + /* guest_memfd mappings should be marked unevictable. */ + mapping_set_unevictable(inode->i_mapping); + + if (flags & GUEST_MEMFD_FLAG_MIGRATABLE) { + mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER_MOVABLE); + } else { + mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); + mapping_set_unmovable(inode->i_mapping); + } =20 GMEM_I(inode)->flags =3D flags; =20 --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012071.outbound.protection.outlook.com [52.101.53.71]) (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 BE4223DDAF5; Wed, 5 Aug 2026 06:42:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912140; cv=fail; b=ad3L16aOD3cSqy43ME567p5mvj24h46WSGVyNJEz3uqZVzKhWzL5Dmoy38khExzNCrzsN9SGHZ7VeKmxV3eq6vTSkdUlUJ+cSVfSqkjacxX6459gstn19zF0e0gWhCcVZikT1y6h+STnbaLSunY6Scoxo+au9JpIaJCGf6xVeBM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912140; c=relaxed/simple; bh=xdz0cv1bEGnNHOIr7trKMzS64Sig04rLZJRJ4QKywfM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=HTB9zFitFLB7d+KdTTjC6kJnyR1KPYAOfxTkTIkb6Yynk+M+Tr6kl5YHy71zifcwzAtoykkwGxmYA8oFDlCBooklyfyDT7WSisA4X+O6zVGCLMq8BpkepicoQ7sspdGOBE+N/dRUIA5PgsseCka9AQzyq4I/l1eHOhbzgrqpOqg= 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=InJL/Oxr; arc=fail smtp.client-ip=52.101.53.71 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="InJL/Oxr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LqwfuxTk47EGYmf/oC36WbYWpsL3dbcYZ+QlOdTFwR5jzmkqLTcZFNTceYpcKuKG/V2VL99DtDNBZxoJGYtV7NqJPgBxUvolAMNO2gWV/HcC8Sxo0R4HAbfoDK4hYrlesAtVFGfN3zseTk1Mc4FG18AS2WqlG7v1PUfa1d9uQPumQpzMZaHIjaRIK5v2O81BavoaKkjuaWTYV+e6fSyErBhseZQL1d3bh6eEJVvnDsTy+13/YYqrVfYq/JyOazAax5vVSIQhxGaKBarAE3hJ+KqSzIIw2LrlfTL4OdvSzVlrB/fXWQV8F4ndm9vuGfqG2OKRFF0UhL2qv1IrOran8Q== 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=N34Ji46MQUOaxw7HEVol/v79VQNhg+WYZSyv+4DFDJw=; b=Sp0cNEKSg1YRHwyFeP61bbb32CZ48vHEtDYWpskPrtXa18di6Nm5lhMHnrcY8O7LMsj71PGwbgTJUIwErDaQAa4ezOU3QGMuZEoU3vCbXgcXBePavw4GcuR6aLPpIhfgWnsRoutW1cj8ImASfd+t/Q8rq+WEypemJ1U/XzeCLRa4S5hEKCT5exyMPNY1tAyJdiBZafCZY0WTt7o4Jk+DQxhWhUc4yvd0BhXCKlP80+LUrgi9F5ACwefJLHmiXZ9xN1KteLgKs78zxKeYWUGS9XRrWrU0qrShyMIb+snfzatF4Cd+WTqxTPEXvDRFEwMYcykiqlPVmfgnl3vxgLsABg== 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=N34Ji46MQUOaxw7HEVol/v79VQNhg+WYZSyv+4DFDJw=; b=InJL/Oxrz1UTTMSpBbCtI9+ByVKu9M7Uj7mS4R6gM1SLFu2zz9DIvxmCmTwDtU5uVJ6f1gZo3fk7X/B5sEtZCxHvj1VpfyqHzq8dnBOfYQMljiO6qV+nLyp3PjxlhYFS1TXYhPmq/C50wYaJYv6GyeO4aUDOPRZNc5GmKp9HAmA= Received: from BL1PR13CA0099.namprd13.prod.outlook.com (2603:10b6:208:2b9::14) by SA1PR12MB6725.namprd12.prod.outlook.com (2603:10b6:806:254::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.15; Wed, 5 Aug 2026 06:42:11 +0000 Received: from BL02EPF0001A101.namprd05.prod.outlook.com (2603:10b6:208:2b9:cafe::71) by BL1PR13CA0099.outlook.office365.com (2603:10b6:208:2b9::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.15 via Frontend Transport; Wed, 5 Aug 2026 06:42:11 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A101.mail.protection.outlook.com (10.167.241.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:42:11 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:41:58 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:34 +0000 Subject: [PATCH v3 5/9] KVM: selftests: fix maxnode arguments in xapic_ipi_test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-5-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=1320; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=xdz0cv1bEGnNHOIr7trKMzS64Sig04rLZJRJ4QKywfM=; b=Yy5Onvb99RGNj+yemRKzIss6ntKGZUGY0iWot+iDqs9l3dwIpZb5T/DMFlFei27mIKPgCjRoa G7XzBp4IAVWBr/DDV3mYKt/wPmxhSwDDpLZ34miJURHzHaPFjE3UAcD X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A101:EE_|SA1PR12MB6725:EE_ X-MS-Office365-Filtering-Correlation-Id: b8bc933e-4613-404b-504a-08def2bcad9e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|82310400026|36860700016|23010399003|22082099003|18002099003|11063799006|921020|6133799003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: Gk+eew8fEwUbJajpxZgPXZHLzxT0Oo2OolUlY2A+hmJ7xEnsdSLZeN6IL7mei85sNH2nOu5Zh9fMiCSIMHWnmpipNBgduJ9F6dJGuAjDrZrsQCVsoydqqMJ9uOkIkUbUtzNLASw+/vG5WkoFipWD1+ZGkDZdYinKlfID4BRz2LLHAZD3laTvmYm0opJ3qneLUmN0FoewYqee2PchJXAuSSKn3Tm7Q4e7Q1tS+kS3YyHpKBY5z6hwc5eJ/KHdzkwFCbEABZwo8Z8YHOEYYZaGn0jbQIQ5t4PMZrxCWayHoVeLy7i72hb47pjKDhDW1TX5V8VukidyT46RcUzMI3AZ/NL5C36X+nsttDG56DkvOAa30+S2PHXJvmMLywYeEyiMrlqDtFAALVWosUvod/xkDbsIvoujK6tWmhXa0zEwJ/8UlGdzh5g/n4wsINy2eJLfm9bcjAMTCj+LQASS0/35RAPOA7ZfG5WURdmkgMwoMBIK1Ub+kns4kgD8VcoNKWOh2aIHI0xJ85mVombYXAmgiQuPt7LV1TXE+2bESy+vdu23gKiXGkOES/F6lCMDGe6m92J1xE3Q5f1xh+76XN1GfKGYQyJ9zEKxaDcIycF+UsNeykFAigtb1s1kLPPC4f1u5cE+5CTSg4I2brqGZPt7D1CCMiMybXaw7ds0ZKRwfnt8HNuBSy/Le2f4iXXEYa5O9wNXvbqbTvHNXJw0FfITDr3Ffc2C8TPOABQWR/ocgv7QF+O0u6KNZdmTtVIWDFFS X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(82310400026)(36860700016)(23010399003)(22082099003)(18002099003)(11063799006)(921020)(6133799003)(10067099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +iRfefz4Iv3AXuRVXadVoJrHcSrgIkSCMYnoJpiw9xncj8ZF/s9ZDIF39Ui9pUTrbrknhKqeeW0IFqgzy6gK++PwMuoy+vTcxNLrPizIh5zYcRcbPRNsqXDd+6ukEkx56/1IoyjSZm7ql7Bzu84yf7ymyhzxLQnik5wEBGLG2ielP81ZSkUtzC1OaJloO8l4RsGNp8HL42/Z9ja1jOiJRMHafBRFTG9kEUkNGCANtftc1gND0jZThGX96WQemFYgHLcOQi4WVXeG+FR7l9g9jHizfnQgYY2g7Pt001C7dPUSAdW43Mw5+6+whroKxkymONI8k59QdgNKhGD+IrDoS0u0dPRzAHMdUE164w8I8/vD4xtLtMRSm9FUGtOGANLX/dLugIbYY11EkhTlVILRpDEyAIG4z1OoF9G6I5MUVUOAGSYvttNXNi+a9HwA/OWL X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:42:11.3066 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b8bc933e-4613-404b-504a-08def2bcad9e 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A101.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6725 migrate_pages() syscall expect maxnode to be one greater than the number of bits in the nodemask. do_migrations() passes the size of nodemask in bytes to migrate_pages(). This sets the maxnode to 8, so kernel only checks node IDs 0-6 even though the nodemask covers node IDs 0-63. Pass the nodemask size in bits plus one. Fixes: 678e90a349a4 ("KVM: selftests: Test IPI to halted vCPU in xAPIC whil= e backing page moves") Signed-off-by: Shivank Garg --- tools/testing/selftests/kvm/x86/xapic_ipi_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c b/tools/testi= ng/selftests/kvm/x86/xapic_ipi_test.c index 39ce9a9369f5..761e47e4cae2 100644 --- a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c +++ b/tools/testing/selftests/kvm/x86/xapic_ipi_test.c @@ -310,7 +310,7 @@ void do_migrations(struct test_data_page *data, int run= _secs, int delay_usecs, * KVM_CREATE_VCPU ioctl. If that assumption ever changes this * test may break or give a false positive signal. */ - pages_not_moved =3D migrate_pages(0, sizeof(nodemasks[from]), + pages_not_moved =3D migrate_pages(0, sizeof(nodemasks[from]) * 8 + 1, &nodemasks[from], &nodemasks[to]); if (pages_not_moved < 0) --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013067.outbound.protection.outlook.com [40.93.201.67]) (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 1FDA33DB314; Wed, 5 Aug 2026 06:42:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912150; cv=fail; b=EQI6ulzs2gxW4LF+z5NqkabfmbQYRkjsK3GNp4g5pVBFarnqBIaUUw3YE5onNIxsCq7xH9YGq2sMB3g52VGixpVMEvKyiR9re1AW4Mz9x0dhNZ5XjP9n6TQCrhjg6M4eqnhPCyzchkOG/0BpsKvKRRbhde+YJTlYj5mhJ2vszi8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912150; c=relaxed/simple; bh=QoGpca2K2qIzQz9CVG+OIW++7fyOjuSFlIken4lrZuw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=ECbImuG8qskWWE/1ngQxyVbr+ziiy0DjI4QFJuz9ny6c7vj7OA66A6PmePcY89rk7y/cK0b8CeykqXQUA9atGAwb8u84xDxcttTlJBGduAy4rFPAP56xkdzbNuCkVqJpGFCrvW2ROUgz6Q14YnU8rM0Ljbpkhw3hxnexHFSp0WU= 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=n2tDDe60; arc=fail smtp.client-ip=40.93.201.67 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="n2tDDe60" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YFmpx4iZTdVFKb2j+3j3f5SLwUAOTR2aheKAoL9mCkepHKIcaQueV/EpxjxcWD3CTaIVq6aC5WDATWS+mir3XyNr8X8tY5uXlA5MtWfmkg/OJqzoHgUbm/KqhkNEeIVsgedqF6gvxx6oDx+Obz3FcnoSd7n7S8C1q9Gt+TZ1bvBoL6qS50nTFVEs98DTQw/1eZdiZbs0PWL9oikHMLaxPPiFuIlpiX9HO9YVvC/R/511/rc0ncWaqlO06REZPbWTllgFaXrMtjn463DzHL0eDEfQ7DcKN4k7CIcBiHMwAkK59KmptagXbDHDiHcclx9L6dk8/UvkfoUy9bztIfDXaw== 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=EnhcPNIeFNxUodYSdgpowZtRY8vOzvsSY6XGiEauKxY=; b=n71HPipXB1ly9MNuptxT1B0SWdJZiOVs012rw/09w8DJjDZeAZPsrPA6C/n91JsvHUJB3hq+wMGH0Z8wQtUs1iy6CdR7vhgJ/UN7Rx2yh4xvJtJKEV5RDJe9UgUhnmBQYNaVkuijs8pCsi7vyjG6H67HhZ1qLpXvy2dVEvE6LeuvxuWQX5XFKnOt0F7BNmyey4IDg7n6GEj6bA7mIn4d2eGRXhvCq7GGa4ODeIBmAWgBzaxiFXcV+LeGv/lqdxm99nCKd9k7ctjC0SOEYA4UU2cuDwsOXw60MAY1jfVPV/x95o7dvfz5iMoscUE6cBMcprsTFUf70aqG9E2iOaUDOg== 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=EnhcPNIeFNxUodYSdgpowZtRY8vOzvsSY6XGiEauKxY=; b=n2tDDe60cWx8akmqW51vKh9D6eWI356hjuWED7zflzZT76JQECpXk1Ms1u8xUV4ABeo0mWkE9JDQF2S/cg7jdkugoXXtbrjAu8VkO2Ib136YhWRzvVB5DeiS8n00hQz2ETtUgqHMNmWVMbhTD4qkIVn5dq9qQN8jJL4N0v+a8iI= Received: from MN2PR14CA0012.namprd14.prod.outlook.com (2603:10b6:208:23e::17) by BY5PR12MB4273.namprd12.prod.outlook.com (2603:10b6:a03:212::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.18; Wed, 5 Aug 2026 06:42:22 +0000 Received: from BL02EPF0001A104.namprd05.prod.outlook.com (2603:10b6:208:23e:cafe::52) by MN2PR14CA0012.outlook.office365.com (2603:10b6:208:23e::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.18 via Frontend Transport; Wed, 5 Aug 2026 06:42:22 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A104.mail.protection.outlook.com (10.167.241.135) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:42:22 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:42:10 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:35 +0000 Subject: [PATCH v3 6/9] KVM: selftests: use BITS_PER_TYPE() for NUMA masks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-6-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=2319; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=QoGpca2K2qIzQz9CVG+OIW++7fyOjuSFlIken4lrZuw=; b=HlwIDg/sPwl77pxplq1ds5y8ePBb3vnB6VjW12C2wAxLXFoGUarTaj7kv7p/M5Li/VvJSKCWB JZfsN1ZnA5bAdetNYLadYSh5m4qoqkAZF/iyC+GeZaWAfUZdQbMO10Q X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A104:EE_|BY5PR12MB4273:EE_ X-MS-Office365-Filtering-Correlation-Id: 9ac71140-e5dc-46af-ef60-08def2bcb42a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|23010399003|36860700016|1800799024|82310400026|921020|6133799003|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 3w+TDNeV5YC5VqnthjgRcLq3RtcWBpP12tpBSugp3PeWDFt6QQrAYegcuqhwUrn8I93CHqhg2In4rzQv59/FhnlFOCCkmmXpUzEzE4AcTYD/esT+7xAw60SXGdiA8xY+cuben5k/c/Of4lhgf3pS2CzBjejKZLdtdohapOHj2JmKa3YFs2jT5sACJB0TzyZPW8JkywmEws2xf1vuAl3EVGkGDybtY2shw8ZzNPF5qHpL+0l41Dofm5J/OoK5COqdCT8WAf3zbSmOsHvzJliU05UGgAx/5wZOEVner5XbzYhHOj2682s6JO4vgtMm0WTAmooiyfXb0mx2bmrXPsNIRsz7VuszfbxWWZv71YVHMiDAmiSQs18uue6xldzh3HGhzRIksMqHSPTiZ2pjNXiMCxRpG0KmQXVm4uuDzbvnrY/c/FdXffVrKjODLtWk3JHyRpf6K9bLUpcN/VnKiEly3BHEaAtVWJv3plVe3kwhfnPS7zy670owLGv6gX5hXOTE9isRFFc4a9XzGJ27JTtJFOlj/zlGk6lc4h3CFCJ3D5mi/r2Yd8p3q/MQDjVOgfH7s4tysAZoSOGc9VBtuHqeBc4MI5fj6pkh2lux3Xz4hlhqz59xyrSSv38IT4pE081l8zbULwGvHS79aVtZ8bApgLTWd/MqkCGAEc05CUzMJqbQF55XZlvzIMKzo+MxFsSXr0TstC9ieZ7A3qwiw+KMEzZTWZDmQZZM+zbAsb4ktOdL3BWalORqnqiWQVCxx4By X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(23010399003)(36860700016)(1800799024)(82310400026)(921020)(6133799003)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: e6rQ8/sqdhQW9WkiaNTTrtOxNSDqWADcrnR3URn2I7oX7zJ4GER0Jb7qSNxYeug92qknaWbX/IA6ZMCTlQ1fMZhUju3tRd4nvILkWvVL2km8zAQWM3ZK14sF1AHn9RCVEGDNN/OtJZ4BWRcCSURzcbv66ezFEolXoOke9aGvx12U48Kq8WqXd8cLCakO6/tvggO+uIFPVIeEokssaYpkhEEYmXLLz28BLt/nvKjGyf66vweyDevDMzbZspbbdW6hdcGYzDpUU/EkrUM3eC/OopJibdkcppfGyUYGhG7K4pQnlTouyShX97i8JiO/74/YSLMAN0COUR3qJIaoHqF2AY47QnaXhd9IQxCl6stD33oN/n5XBSd/kDCvsZyZansLrhonZso00udkz5RCiNgxM/jjVf6veIzOkIX261PKz4uToFGIMrJwzlzAYYzWWwFI X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:42:22.3265 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9ac71140-e5dc-46af-ef60-08def2bcb42a 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A104.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4273 Replace the open-coded sizeof() * 8 calculations in do_migrations() with BITS_PER_TYPE(). No functional change intended. Signed-off-by: Shivank Garg --- tools/testing/selftests/kvm/x86/xapic_ipi_test.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c b/tools/testi= ng/selftests/kvm/x86/xapic_ipi_test.c index 761e47e4cae2..769d8d95ab2c 100644 --- a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c +++ b/tools/testing/selftests/kvm/x86/xapic_ipi_test.c @@ -252,7 +252,7 @@ void do_migrations(struct test_data_page *data, int run= _secs, int delay_usecs, { long pages_not_moved; unsigned long nodemask =3D 0; - unsigned long nodemasks[sizeof(nodemask) * 8]; + unsigned long nodemasks[BITS_PER_TYPE(nodemask)]; int nodes =3D 0; time_t start_time, last_update, now; time_t interval_secs =3D 1; @@ -267,18 +267,18 @@ void do_migrations(struct test_data_page *data, int r= un_secs, int delay_usecs, delay_usecs); =20 /* Get set of first 64 numa nodes available */ - kvm_get_mempolicy(NULL, &nodemask, sizeof(nodemask) * 8, + kvm_get_mempolicy(NULL, &nodemask, BITS_PER_TYPE(nodemask), 0, MPOL_F_MEMS_ALLOWED); =20 fprintf(stderr, "Numa nodes found amongst first %lu possible nodes " "(each 1-bit indicates node is present): %#lx\n", - sizeof(nodemask) * 8, nodemask); + BITS_PER_TYPE(nodemask), nodemask); =20 /* Init array of masks containing a single-bit in each, one for each * available node. migrate_pages called below requires specifying nodes * as bit masks. */ - for (i =3D 0, bit =3D 1; i < sizeof(nodemask) * 8; i++, bit <<=3D 1) { + for (i =3D 0, bit =3D 1; i < BITS_PER_TYPE(nodemask); i++, bit <<=3D 1) { if (nodemask & bit) { nodemasks[nodes] =3D nodemask & bit; nodes++; @@ -310,7 +310,7 @@ void do_migrations(struct test_data_page *data, int run= _secs, int delay_usecs, * KVM_CREATE_VCPU ioctl. If that assumption ever changes this * test may break or give a false positive signal. */ - pages_not_moved =3D migrate_pages(0, sizeof(nodemasks[from]) * 8 + 1, + pages_not_moved =3D migrate_pages(0, BITS_PER_TYPE(nodemasks[from]) + 1, &nodemasks[from], &nodemasks[to]); if (pages_not_moved < 0) --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011026.outbound.protection.outlook.com [52.101.62.26]) (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 ABDA53DB314; Wed, 5 Aug 2026 06:42:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912162; cv=fail; b=WhgH0Sy9lfQNPz1IeKJqqTLPhosv5DBT2UKmygZFQm8FSmxDtfD6cdcCFNpc156eJEs89II/tlQiwfuvz+7vrMjBVa7a3xt2YIixYp+Do2oU1YNNCTLFSvG9TbuIKKpKORfIFj+VLB/TkTOgVaO3bKMJkyfeWGYcqOA+3Asv9o0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912162; c=relaxed/simple; bh=4zperuRefGS9/dWP8CCI2r4B3olGwgompH/Zj9KXkuM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=cn9JMBRVuhndoQW7Hg3/V/cAnAnzkf3KrvHQjdpiLwY8H/rDHJUHtYBxb7igmxdfxg+3wvu45FcDaEaWhCu/BG3U+dzwHqm1ro7tbKznCtL9Cb2WiA45S7moyLbRCgWpJRRFErcvXghvvaFeAUq2OV0a9e6Qk/+opcb/gse1AJw= 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=Yj5y7vn2; arc=fail smtp.client-ip=52.101.62.26 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="Yj5y7vn2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SYyQ7J4UDEcGPWpmAHQJS1dtk/c5dHf4LSQDs0YZSE+E5u1Covk6Gqct7h1wG2WFnYAutp6/Wx+Mon/fg5VKd3nsv0i+vvc6EKbo0pqgtvm3Nqy/4FwhT369ZWwA6YiGL0wzf5/fO6CtMrhTAHm11VHcw8dZBmBgPpoIIngBRsPf+BCI+i+UOBqfx5qg17tAqfnGie+tMgznz7I9SuWzwY67oyTV943n7Zsnbqk14dK6UOZulxdn79Wr5KgoJkjTlG3ZxR5mB0Tx8a7zlbFjc4hKTYDeMet0ex2c6lEuhKnk7L60w0P7u3wPFRrLKgPSsPAfFeNw8Fv2hQwEQUPBaA== 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=cAOKOFsD0mkH/dUzG78vyaDwu0cWpfSC6Roky+0Uwv0=; b=daBkytS2C3PY9z4C5t+IDsTUH057nt1cqTLWM3fmYTWuCArW+T00NdVEPrPSQYzZrTjQuGdlykvf5PUZAes9g6B1BPrfb8s0VIxQ+3uEfDeydd+y56CQWueKdrbxIA/MEbc1X/3MVEz6mWQ0lGp8WnxcXEA0JySlWnjZo+PkviiHMHqUtK5Mzf/fRqAOpuSVKIJoGP6GzJ252Jw9rCEyNoiMHfiv1OKNSBmoxJ8a1e0qwmYO1f1BonHkXC01A35X6pbuwAsqcimh6pUUBL2Q3Gb3+2+SVVVju+Wj0UMt4vHuYWdohcdYpwHtHtaTGJsYIcJy/ig7O6Dk2aeVfsElwQ== 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=cAOKOFsD0mkH/dUzG78vyaDwu0cWpfSC6Roky+0Uwv0=; b=Yj5y7vn2L+WzTJPKyl1QCQyTTxeJdVrg49FHAmORdkGu4AUw58rEcu7R97WQPuJ4r1XXdmp0/LZdwBqikmcszzy5K2TEuZm6dhBMvGgzXQJ1dKKYkk4sdMjOsaTM48RUzX/QCAmyfNMczIsQQHDnOZINT1pkrdbcn94YJGUfuCA= Received: from BLAP220CA0002.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:32c::7) by CH2PR12MB4166.namprd12.prod.outlook.com (2603:10b6:610:78::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.15; Wed, 5 Aug 2026 06:42:33 +0000 Received: from BL02EPF0001A108.namprd05.prod.outlook.com (2603:10b6:208:32c:cafe::28) by BLAP220CA0002.outlook.office365.com (2603:10b6:208:32c::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.18 via Frontend Transport; Wed, 5 Aug 2026 06:42:33 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A108.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:42:33 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:42:21 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:36 +0000 Subject: [PATCH v3 7/9] KVM: selftests: add get_numa_mem_nodes() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-7-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=2451; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=4zperuRefGS9/dWP8CCI2r4B3olGwgompH/Zj9KXkuM=; b=8vnBGeQVnQPENKHreqngCe6f6MtTd/FEYlGvK4zNzKwVNIZ5Gl0Ht7siywk3YQvDt0/wnBgUN 2ceK2/bW0XPAuF82/xeQOius1z5nBupWTyfF+RKTcuLgfV7BXF9gegF X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A108:EE_|CH2PR12MB4166:EE_ X-MS-Office365-Filtering-Correlation-Id: 0620b8ec-804e-462d-c910-08def2bcbaf7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|1800799024|82310400026|7416014|23010399003|11063799006|10067099003|56012099006|6133799003|18002099003|22082099003|921020; X-Microsoft-Antispam-Message-Info: mFQqW0nsUedRXzuhPpGiy/DnlhX9WmvbJYjVH2m2pfVT/8/xpmniohXbc5czTv8qcpGWpcXkScB0tMcLfCK5FsBCRqMjvCjtx/UOWj/ii0Xlrjk6FD9OXhGOitGLVYglSYT1fpy4MUgqWvcHdcLqlpDQb+r2DN/jMQc3yCUzVPxFWpuDQgv5jmoJe3IBpbvF6ud9Nol5OPiVPdTCOFkG9pzNpxLrLAkjx7+woBarMdLbFsYfMnYZaKiBZUOp27h8KITDIZcqafrdnZyNlgNg36DHA+ceIQsntghKbQpcMqg8UcraiVOv1i9+QCjZybDxQqaLh6MQ31rJysHAxvHpa7qvl3hVz9VGCu3mLYRDdifs+io81v8GOzFLPQFGW0TGIzlIT686KXzA1dTV/f9StKnNstTH8WWgWIcMPdAmFrrspXT30nANn33P2MLHZUKGWrDRy5AVF6e1jFV7AlLBxHFtZgN9wASeoytq0xtCcW8H9yXiycYZEx4NyEFXOriaqaHWo6iU1Uk3xW4YAGG8CRjEMH53ojDXZMQOyujVj5NN0eGLq0mb311bS3DqdSMqNx+VtlLCHffJD3MGb/JNFMeHXnhqmUGRsByoR5pgebcgiLEywP6/kxxPGVddXMrK1mIHHuHznDECBIalhOSlBQhokx/Lg+iK0efgwKYnJbe7P0M/TkDODLWnut/mHkEY/hJhodwuIzOJwBiKHDi2FvRm3+MMadp3P2xfYmDjHIfbO6grXBQM/A0LPjniGNdi X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(376014)(1800799024)(82310400026)(7416014)(23010399003)(11063799006)(10067099003)(56012099006)(6133799003)(18002099003)(22082099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ouzo43kgJNaBHJUCTe4NU/sTg6JnDIh/XY0SmrH7gKPjCLnt8fhrdC0BdxrQy1sxbte8vVFn6UyVDJtPpT2ucaggYpZrtSPRYqJqnyHvTFFTYxONiOsvJ2H26a39xWAQ+3OyuBjM1YkNDHi3JHu1pqogKr/nAiAGhFyZUJQso94/FMl4iQC4+xSES//Lkdv5b3urA+i/4pALoSlLVcfQPOKdCsQAB32p26PHlyqbcIcAQ7sECUWVFw+DldaP/ER5FJYROoS/UnXQfR5Q2a6/xXTP8XhOzEA4QQTG5Pq5kP9nfWmnAl34NHCfB++pcK0pM5pXna9fA6UOxYxZyucKVkPwOvmZ+ynaVVf5B44Wq8Nlj8CchYXmCEItrwWpw6r7vn2gmiyR6qVWf8JQqR6ZM9OIEshY8cR1Hcj1FYxl6XcUWbNZVqtTwjVJqZufT4fc X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:42:33.7316 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0620b8ec-804e-462d-c910-08def2bcbaf7 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A108.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4166 The xAPIC IPI test uses MPOL_F_MEMS_ALLOWED to get the memory nodes available to the current process. Move the query to numaif.h as get_numa_mem_nodes() so other KVM selftests can use it. Call get_mempolicy() directly instead of using the assert-on-failure kvm_get_mempolicy() wrapper. The xAPIC test already asserts its two node requirement. Signed-off-by: Shivank Garg --- tools/testing/selftests/kvm/include/numaif.h | 12 ++++++++++++ tools/testing/selftests/kvm/x86/xapic_ipi_test.c | 6 ++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/kvm/include/numaif.h b/tools/testing/s= elftests/kvm/include/numaif.h index 29572a6d789c..55124e2330ab 100644 --- a/tools/testing/selftests/kvm/include/numaif.h +++ b/tools/testing/selftests/kvm/include/numaif.h @@ -75,6 +75,18 @@ static bool is_numa_available(void) (errno !=3D ENOSYS && errno !=3D EPERM); } =20 +static inline unsigned long get_numa_mem_nodes(void) +{ + unsigned long nodemask =3D 0; + + /* Get set of first 64 numa nodes available */ + if (get_mempolicy(NULL, &nodemask, BITS_PER_TYPE(nodemask), NULL, + MPOL_F_MEMS_ALLOWED)) + return 0; + + return nodemask; +} + static inline bool is_multi_numa_node_system(void) { return is_numa_available() && get_max_numa_node() >=3D 1; diff --git a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c b/tools/testi= ng/selftests/kvm/x86/xapic_ipi_test.c index 769d8d95ab2c..66dcf36398aa 100644 --- a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c +++ b/tools/testing/selftests/kvm/x86/xapic_ipi_test.c @@ -251,7 +251,7 @@ void do_migrations(struct test_data_page *data, int run= _secs, int delay_usecs, u64 *pipis_rcvd) { long pages_not_moved; - unsigned long nodemask =3D 0; + unsigned long nodemask; unsigned long nodemasks[BITS_PER_TYPE(nodemask)]; int nodes =3D 0; time_t start_time, last_update, now; @@ -266,9 +266,7 @@ void do_migrations(struct test_data_page *data, int run= _secs, int delay_usecs, fprintf(stderr, "Calling migrate_pages every %d microseconds\n", delay_usecs); =20 - /* Get set of first 64 numa nodes available */ - kvm_get_mempolicy(NULL, &nodemask, BITS_PER_TYPE(nodemask), - 0, MPOL_F_MEMS_ALLOWED); + nodemask =3D get_numa_mem_nodes(); =20 fprintf(stderr, "Numa nodes found amongst first %lu possible nodes " "(each 1-bit indicates node is present): %#lx\n", --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011002.outbound.protection.outlook.com [40.93.194.2]) (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 3AEBE3DD849; Wed, 5 Aug 2026 06:42:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912175; cv=fail; b=sB9qCS6Eb4a2thk5l/aFlj9SGabxdC0r+ijm5FxIjfvlCGdh13FMoVJCeLwYOUF02LCJtp+IM/8pmTY0Q3YgsIXjJ2gE7NNbOt2cv74HKAdAYdK4MwpRDkL8nRA/zKejOzVMIiqMAqYWvRqejtM+s6XaHQyGy2B82DQpMLUIHm8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912175; c=relaxed/simple; bh=dXBKg5fXAKj1J06FIg2E6wP+hH1T9We3hGHWo+1DfNo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=BLKrXT/OJHVoNMWLYXNJAG6kCi657aVt7v4csp/t08j856YAKeEo8z0S0O4Uggy3VKoyIGNc0zlWKRIh1zeIj0HZ3MtrY/g0Zwk3JWYr2B/+uDexmZGj+9F2acu8t4NHUXbRipexzTN0xxLxx7J/O2CG76ApbhvGv7LCB/UWHHw= 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=kO2Fu8CJ; arc=fail smtp.client-ip=40.93.194.2 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="kO2Fu8CJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qMhxJLBQbIhFe+o8QIRcSpMzMhVTFFezozalyL8n35CZZFw42uyH7IFGM89jSl+KBffgx5M6cKnPcB5d0c2dABgnboY5rOEhksEVVwcC3EPQYc7cVtJ+CvKknCyk02c7dD1UdPp8mwRk5vPnsAmOjDtpGIp5bEbJrZc/YIXKfvcJj9lHlHWka9v5blaBHQzCFi7c+QjHwhTq0KiuoEZFZ6hjNyBf20ArD4GynGCqf+hdSX2aFvDROXRGXCWB0ebk2bK381MMSNKrYbcPgQQ7hASUSZfE1HRqcksho2I+zWeXE4JDHEeAinLtkDptUOHF+6ydWKvO3NKbIL+uzPnNxQ== 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=KklIybxAVesquBLCUQC12uQsLRjArXF17xfa2W0HOEM=; b=mFz2A4dyqvzT0qnE5DD+VLKCD2Es5cbHyvXK+bDxBM5XyER+hAVUyy5hWyfV6qPb+Qq3imriwBSnVLQ6ebIJVcQSijFw7vwun4GQ9WbF+Ewcn3sUajD9rZrghdvj+0PgA89Wmj4yqm2W7bYZIcpFwlLAedaYYRmv3rL1SntgLFDCgpDWTItlr60Asc5mLAyIpKq0Vi8rln7JsRmo5zIdQ2NCW7RCexafPYyOT/Jm4MT9EMsftg66S8vbBwz8IV9qCVQr4Y1YGp9ask+9CBPY0+1Dc3yohp3nm/asdX+Jt4kaQmugd0JkM00sbKgQZadcwRsA+ifm/SHm+CJdQJWZXg== 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=KklIybxAVesquBLCUQC12uQsLRjArXF17xfa2W0HOEM=; b=kO2Fu8CJWPfPLEUtu3UkpVDyrEHGF1UcD9xeGzzr2QxJpslmoS2sLT8iEpfDM9/v+nbqNvTHHmBkWnzOIXwpbA6kN9Dm2slzY/03LA3yLqWa+gElb86jsElynEgCac/vXOWwhZJGNfdp8PhY/LPJpSlgpTXNOV+Gf5fCoYzHsnE= Received: from BL1P221CA0040.NAMP221.PROD.OUTLOOK.COM (2603:10b6:208:5b5::15) by SN7PR12MB6744.namprd12.prod.outlook.com (2603:10b6:806:26c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.15; Wed, 5 Aug 2026 06:42:45 +0000 Received: from BL02EPF0001A107.namprd05.prod.outlook.com (2603:10b6:208:5b5:cafe::77) by BL1P221CA0040.outlook.office365.com (2603:10b6:208:5b5::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.16 via Frontend Transport; Wed, 5 Aug 2026 06:42:45 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A107.mail.protection.outlook.com (10.167.241.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:42:45 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:42:33 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:37 +0000 Subject: [PATCH v3 8/9] KVM: selftests: use allowed NUMA nodes in guest_memfd_test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-8-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=9670; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=dXBKg5fXAKj1J06FIg2E6wP+hH1T9We3hGHWo+1DfNo=; b=fEnKoB4vUmtZB8Gn/rrd7s8r/2ht8VXIf6eXKlSSKmEeHW1pP9j7LmJE+1I1geWMb4KMAFZ94 BwEelGLJTQJAFGuuSutcmpWgWzQ5RqYFrqMUaJzbD1PZUieRevGjmqv X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A107:EE_|SN7PR12MB6744:EE_ X-MS-Office365-Filtering-Correlation-Id: 0d0b4bc4-6280-4b60-4493-08def2bcc1f8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|23010399003|376014|7416014|82310400026|1800799024|10067099003|921020|56012099006|22082099003|6133799003|18002099003|11063799006; X-Microsoft-Antispam-Message-Info: uxNxHJuLF3R7JCfKtcEfwbwUYIayFowGDM5XEwTUIGTgwERC+/FCHLREoWylThshr1K6buKjwmRR1tMv5z8iR6fXtmKxbk3vsmq4Z8KvaS8qMBtsPrd8pGaykWt1+bNFmCyTWbW4fr/CnOqte2Y7zUAqNiRnWRCh7NsRd/3c9LPEJmUEXmcWJ8pjXcqFYg7xy5sCFv9Lv4fm5BoMsVqFkUK+HW8OnwCY480YjWg2ftlNnw3xESrM2rxoSf/lko9e0yWGB6bpgsk6ubZ7JSTA8qZ6nOhj8h62e2QTQRnzUiggqlUT66S1ZEmeK2qEFxNe3r5JSBlnNrslQgay7oxEzhFxvIMe/i7k6B3aH7scNK/pN6ccWOWtqdRXpqjV1OeUS0JuB8wdHqvW9MAMKcHFsrNAwz9t6d5guxt7iJaKYexhUsknz+cQaX6S1okIufIRz13X2F9egDKpBdb9VdbN5NDM3enBMHEH7pdrMBlzC9qUHYGYNfQ+35/18bldGBesbjMx3AmOFPU6+k6g0CupZlQaSrWwMsI1pBFbxGBeFkhDgfbcmg9ndi5Cs0eEJp5WtMvgALbEzw4KuOQW4+t7HlKOGDtMzKzVrOPX6J/+TFjKANOWTqbjtD0MZJv0CLfRaBN/zB8DKxI1OcosER4IMoRaM/xrv8jREzrFITMVx77G0VE3Pksm8fcLxILYjLGQVDhhskLLvEYbfBjvgJQ/z2EgekSOLDS2PImPktgmIu9oUxyr41IFfabLVNgrGwKK X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(23010399003)(376014)(7416014)(82310400026)(1800799024)(10067099003)(921020)(56012099006)(22082099003)(6133799003)(18002099003)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: umN9UwDa4vIgPV8V1aGAERKrXNwxhqJGshZtyZnk0F/fdSj8w6HU8r7N/AQs3UzGjriiupqU9lnk0Da0LNn82PHFndnoF5Ui29EOGq8uykW/C1l4uwNwado0wbTqE6cp+M+OuGXsBQNxd4V6iII7tPGLSI+x7g0kpxOUfagkVm9ZE2UM+MniN2FysX26Nq19wIt84BMB4bshxzdH0joLJTaPqjLLmP+r4EmL1eFeiDhOdOCBRxBwZpDIrOiYnkc+ep1gsmzFkRRhX1NMvi+Xed6NuRnmjmVoeXsONvr6jCrpQbw2TfzPpLmVsHkWLyHoJGL0+MSSGT7HjyQJ8zhVMPCkXn6bZbMYH5tsoRj6KdFprbeV8VQvvQEQaQuYV7FrxTkPJ8AxfjH0tM853+fVaQD9Gd9lCkKQBa2D7qBGvXjKtQjlJqSR86igPzl0KteD X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:42:45.4792 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0d0b4bc4-6280-4b60-4493-08def2bcc1f8 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A107.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6744 guest_memfd_test assumes that nodes 0 and 1 exist and have memory. is_multi_numa_node_system() only checks that the maximum node ID is nonzero, which is not enough for sparse or memoryless nodes. Select the required nodes from MPOL_F_MEMS_ALLOWED instead. Use the full nodemask width plus one to mbind(), and let test_mbind() run when only one memory node is available. The sysfs helpers for finding maxnode are no longer needed. Signed-off-by: Shivank Garg --- tools/testing/selftests/kvm/guest_memfd_test.c | 86 +++++++++++++++++-----= ---- tools/testing/selftests/kvm/include/numaif.h | 52 ---------------- 2 files changed, 58 insertions(+), 80 deletions(-) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing= /selftests/kvm/guest_memfd_test.c index 2233d871a38f..aee80dda6229 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -76,33 +76,53 @@ static void test_mmap_supported(int fd, size_t total_si= ze) kvm_munmap(mem, total_size); } =20 +/* + * Fill @nids with the first @nr_nids nodes in the allowed mask. + * Return false if the mask contains fewer than @nr_nids nodes. + */ +static bool get_numa_node_ids(int *nids, int nr_nids) +{ + unsigned long nodemask =3D get_numa_mem_nodes(); + unsigned long nid; + int nr_found =3D 0; + + for_each_set_bit(nid, &nodemask, BITS_PER_TYPE(nodemask)) { + nids[nr_found++] =3D nid; + if (nr_found =3D=3D nr_nids) + return true; + } + + return false; +} + static void test_mbind(int fd, size_t total_size) { - const unsigned long nodemask_0 =3D 1; /* nid: 0 */ - unsigned long nodemask =3D 0; - unsigned long maxnode =3D BITS_PER_TYPE(nodemask); + unsigned long nodemask, bind_nodemask; + unsigned long maxnode =3D BITS_PER_TYPE(nodemask) + 1; int policy; char *mem; + int nid; int ret; =20 - if (!is_multi_numa_node_system()) + if (!get_numa_node_ids(&nid, 1)) return; =20 + bind_nodemask =3D 1UL << nid; mem =3D kvm_mmap(total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd); =20 /* Test MPOL_INTERLEAVE policy */ - kvm_mbind(mem, page_size * 2, MPOL_INTERLEAVE, &nodemask_0, maxnode, 0); + kvm_mbind(mem, page_size * 2, MPOL_INTERLEAVE, &bind_nodemask, maxnode, 0= ); kvm_get_mempolicy(&policy, &nodemask, maxnode, mem, MPOL_F_ADDR); - TEST_ASSERT(policy =3D=3D MPOL_INTERLEAVE && nodemask =3D=3D nodemask_0, + TEST_ASSERT(policy =3D=3D MPOL_INTERLEAVE && nodemask =3D=3D bind_nodemas= k, "Wanted MPOL_INTERLEAVE (%u) and nodemask 0x%lx, got %u and 0x%lx", - MPOL_INTERLEAVE, nodemask_0, policy, nodemask); + MPOL_INTERLEAVE, bind_nodemask, policy, nodemask); =20 /* Test basic MPOL_BIND policy */ - kvm_mbind(mem + page_size * 2, page_size * 2, MPOL_BIND, &nodemask_0, max= node, 0); + kvm_mbind(mem + page_size * 2, page_size * 2, MPOL_BIND, &bind_nodemask, = maxnode, 0); kvm_get_mempolicy(&policy, &nodemask, maxnode, mem + page_size * 2, MPOL_= F_ADDR); - TEST_ASSERT(policy =3D=3D MPOL_BIND && nodemask =3D=3D nodemask_0, + TEST_ASSERT(policy =3D=3D MPOL_BIND && nodemask =3D=3D bind_nodemask, "Wanted MPOL_BIND (%u) and nodemask 0x%lx, got %u and 0x%lx", - MPOL_BIND, nodemask_0, policy, nodemask); + MPOL_BIND, bind_nodemask, policy, nodemask); =20 /* Test MPOL_DEFAULT policy */ kvm_mbind(mem, total_size, MPOL_DEFAULT, NULL, 0, 0); @@ -112,7 +132,7 @@ static void test_mbind(int fd, size_t total_size) MPOL_DEFAULT, policy, nodemask); =20 /* Test with invalid policy */ - ret =3D mbind(mem, page_size, 999, &nodemask_0, maxnode, 0); + ret =3D mbind(mem, page_size, 999, &bind_nodemask, maxnode, 0); TEST_ASSERT(ret =3D=3D -1 && errno =3D=3D EINVAL, "mbind with invalid policy should fail with EINVAL"); =20 @@ -121,17 +141,19 @@ static void test_mbind(int fd, size_t total_size) =20 static void test_numa_allocation(int fd, size_t total_size) { - unsigned long node0_mask =3D 1; /* Node 0 */ - unsigned long node1_mask =3D 2; /* Node 1 */ - unsigned long maxnode =3D 8; + unsigned long bind_nodemasks[2]; + unsigned long maxnode =3D BITS_PER_TYPE(bind_nodemasks[0]) + 1; void *pages[4]; + int nids[2]; int status[4]; char *mem; int i; =20 - if (!is_multi_numa_node_system()) + if (!get_numa_node_ids(nids, ARRAY_SIZE(nids))) return; =20 + bind_nodemasks[0] =3D 1UL << nids[0]; + bind_nodemasks[1] =3D 1UL << nids[1]; mem =3D kvm_mmap(total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd); =20 for (i =3D 0; i < 4; i++) @@ -139,34 +161,42 @@ static void test_numa_allocation(int fd, size_t total= _size) =20 /* Set NUMA policy after allocation */ memset(mem, 0xaa, page_size); - kvm_mbind(pages[0], page_size, MPOL_BIND, &node0_mask, maxnode, 0); + kvm_mbind(pages[0], page_size, MPOL_BIND, &bind_nodemasks[0], maxnode, 0); kvm_fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, page_siz= e); =20 /* Set NUMA policy before allocation */ - kvm_mbind(pages[0], page_size * 2, MPOL_BIND, &node1_mask, maxnode, 0); - kvm_mbind(pages[2], page_size * 2, MPOL_BIND, &node0_mask, maxnode, 0); + kvm_mbind(pages[0], page_size * 2, MPOL_BIND, &bind_nodemasks[1], maxnode= , 0); + kvm_mbind(pages[2], page_size * 2, MPOL_BIND, &bind_nodemasks[0], maxnode= , 0); memset(mem, 0xaa, total_size); =20 /* Validate if pages are allocated on specified NUMA nodes */ kvm_move_pages(0, 4, pages, NULL, status, 0); - TEST_ASSERT(status[0] =3D=3D 1, "Expected page 0 on node 1, got it on nod= e %d", status[0]); - TEST_ASSERT(status[1] =3D=3D 1, "Expected page 1 on node 1, got it on nod= e %d", status[1]); - TEST_ASSERT(status[2] =3D=3D 0, "Expected page 2 on node 0, got it on nod= e %d", status[2]); - TEST_ASSERT(status[3] =3D=3D 0, "Expected page 3 on node 0, got it on nod= e %d", status[3]); + TEST_ASSERT(status[0] =3D=3D nids[1], + "Expected page 0 on node %d, got it on node %d", nids[1], status[0]); + TEST_ASSERT(status[1] =3D=3D nids[1], + "Expected page 1 on node %d, got it on node %d", nids[1], status[1]); + TEST_ASSERT(status[2] =3D=3D nids[0], + "Expected page 2 on node %d, got it on node %d", nids[0], status[2]); + TEST_ASSERT(status[3] =3D=3D nids[0], + "Expected page 3 on node %d, got it on node %d", nids[0], status[3]); =20 /* Punch hole for all pages */ kvm_fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, total_si= ze); =20 /* Change NUMA policy nodes and reallocate */ - kvm_mbind(pages[0], page_size * 2, MPOL_BIND, &node0_mask, maxnode, 0); - kvm_mbind(pages[2], page_size * 2, MPOL_BIND, &node1_mask, maxnode, 0); + kvm_mbind(pages[0], page_size * 2, MPOL_BIND, &bind_nodemasks[0], maxnode= , 0); + kvm_mbind(pages[2], page_size * 2, MPOL_BIND, &bind_nodemasks[1], maxnode= , 0); memset(mem, 0xaa, total_size); =20 kvm_move_pages(0, 4, pages, NULL, status, 0); - TEST_ASSERT(status[0] =3D=3D 0, "Expected page 0 on node 0, got it on nod= e %d", status[0]); - TEST_ASSERT(status[1] =3D=3D 0, "Expected page 1 on node 0, got it on nod= e %d", status[1]); - TEST_ASSERT(status[2] =3D=3D 1, "Expected page 2 on node 1, got it on nod= e %d", status[2]); - TEST_ASSERT(status[3] =3D=3D 1, "Expected page 3 on node 1, got it on nod= e %d", status[3]); + TEST_ASSERT(status[0] =3D=3D nids[0], + "Expected page 0 on node %d, got it on node %d", nids[0], status[0]); + TEST_ASSERT(status[1] =3D=3D nids[0], + "Expected page 1 on node %d, got it on node %d", nids[0], status[1]); + TEST_ASSERT(status[2] =3D=3D nids[1], + "Expected page 2 on node %d, got it on node %d", nids[1], status[2]); + TEST_ASSERT(status[3] =3D=3D nids[1], + "Expected page 3 on node %d, got it on node %d", nids[1], status[3]); =20 kvm_munmap(mem, total_size); } diff --git a/tools/testing/selftests/kvm/include/numaif.h b/tools/testing/s= elftests/kvm/include/numaif.h index 55124e2330ab..4bbbf314e9d7 100644 --- a/tools/testing/selftests/kvm/include/numaif.h +++ b/tools/testing/selftests/kvm/include/numaif.h @@ -4,8 +4,6 @@ #ifndef SELFTEST_KVM_NUMAIF_H #define SELFTEST_KVM_NUMAIF_H =20 -#include - #include =20 #include "kvm_syscalls.h" @@ -30,51 +28,6 @@ KVM_SYSCALL_DEFINE(mbind, 6, void *, addr, unsigned long= , size, int, mode, const unsigned long *, nodemask, unsigned long, maxnode, unsigned int, flags); =20 -static inline int get_max_numa_node(void) -{ - struct dirent *de; - int max_node =3D 0; - DIR *d; - - /* - * Assume there's a single node if the kernel doesn't support NUMA, - * or if no nodes are found. - */ - d =3D opendir("/sys/devices/system/node"); - if (!d) - return 0; - - while ((de =3D readdir(d)) !=3D NULL) { - int node_id; - char *endptr; - - if (strncmp(de->d_name, "node", 4) !=3D 0) - continue; - - node_id =3D strtol(de->d_name + 4, &endptr, 10); - if (*endptr !=3D '\0') - continue; - - if (node_id > max_node) - max_node =3D node_id; - } - closedir(d); - - return max_node; -} - -static bool is_numa_available(void) -{ - /* - * Probe for NUMA by doing a dummy get_mempolicy(). If the syscall - * fails with ENOSYS, then the kernel was built without NUMA support. - * if the syscall fails with EPERM, then the process/user lacks the - * necessary capabilities (CAP_SYS_NICE). - */ - return !get_mempolicy(NULL, NULL, 0, NULL, 0) || - (errno !=3D ENOSYS && errno !=3D EPERM); -} - static inline unsigned long get_numa_mem_nodes(void) { unsigned long nodemask =3D 0; @@ -87,9 +40,4 @@ static inline unsigned long get_numa_mem_nodes(void) return nodemask; } =20 -static inline bool is_multi_numa_node_system(void) -{ - return is_numa_available() && get_max_numa_node() >=3D 1; -} - #endif /* SELFTEST_KVM_NUMAIF_H */ --=20 2.43.0 From nobody Fri Oct 2 04:27:23 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010067.outbound.protection.outlook.com [52.101.85.67]) (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 351DB39B975; Wed, 5 Aug 2026 06:43:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912188; cv=fail; b=Gpaj9aTY3AJAtDk67Xm2h2kXZOnbPHnt+bZkZtc1UtAM+/QQNsAUV3tWgc28pSXZnJLL7aHnO2xlnfIzYlG63pHuJ7FjajjLFPS9RxUcgh8nHVarLmKrukE4P5nIv4WNru+XmeM7Of/HZ5gyA6yymXF3xI5NzrrwtKtRj3DyOOc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785912188; c=relaxed/simple; bh=x9mCImPZZ95LBaPAvQM4Yr+g5CzISa/q8Behw3tOl54=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=TkdzliFdiqJW6yPUwkjmiOzSau2gugPGTUYxpQ44wCyuPCTYeAMWB1ym0+dMRIlPXkqxKauNuaW0ZrSfKrS5Db16ShSsdq9Ge4nxpxIcXdFvUj6NbJtg/WUXJ3B725Xli4ygqyG68MUl8c3lOOPOJa4OjKCjkmzn1lfG0fP0TMs= 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=thk3Ob3U; arc=fail smtp.client-ip=52.101.85.67 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="thk3Ob3U" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KDRfZ7YhNtS11dC0lciJEJH34WzsET9kXwKNWkn6/Fx+Jr9JTr7EgwPgzSy4euRe0o4VaQj9IuhuNYIMmUk2PF3KDXYk+d/WgCgSjneucsijjnRfNfXiAly5ZIMxARdXRPSoXwi3p8fd2KHlpYB39K/wLAK9mQfV2b/vdEkexKoKCOSNP5hBws5MJJFnwYISrv2dpgOTsxUPnXPmKTqu2RTRGAq3sms5blaKsYxT7SCVegrlxal4yQP3KKZ27Zp70FdA0gchMxXzPJfNr8CYwI21TQ1jbavlgmhmeofh6smlNg1vt6UiXZ7LPcHyYk0WBwhiakgmMKfGwH8/FCcP0w== 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=KluDXZtvgna1o0d4YwHrU57Xg7C1lgIo1nAtgZVkTzU=; b=gdEKfzVCL8gNdHmkIC68rvfaGJIjh8NighUzfW+NUu7zhkTBR6ojMCI315Gy1F84FmDYWbTyw/uVQvkmTdOIZmRSRWiOBennJC+PNh6ViCZR+DitZOR7ROq1QmPq63j/JGq77GMTxTQ9o49mUzUKc7LC2qlxLD75QwwsyoP7/CLdlNU44YttRJeMiZRYJQq0Rku+6e1/v7SkCCundTxAkAn1L5C5OIVWD9X1jvIPLELfR2sI2A1qi9MF7nu16FdPJFHAQaZvFM/f/5zZVMjSRaaBBcSl/NZ5uCjf6CRkgMIDx9QXZL02g/sFNLpOIDjabPIgHkADBRiIHY9nmrQWTw== 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=KluDXZtvgna1o0d4YwHrU57Xg7C1lgIo1nAtgZVkTzU=; b=thk3Ob3UoNAwasxdD3XhBKJmpHkXOj3SLpthqGZgZmrpgOdIYb3ImcBHUIehUy32T1W03yER8kNxq7imN2RrIFGACLphOHJhz4prsk0JUh1ZsYd5CB+MBjY5Gc5Fglpmiu/m2TdTJhUD6u28acq7QVfBFL7t4DVbY6EOw+490fs= Received: from BL1PR13CA0275.namprd13.prod.outlook.com (2603:10b6:208:2bc::10) by CH3PR12MB8234.namprd12.prod.outlook.com (2603:10b6:610:125::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.15; Wed, 5 Aug 2026 06:42:57 +0000 Received: from BL02EPF0001A106.namprd05.prod.outlook.com (2603:10b6:208:2bc:cafe::1) by BL1PR13CA0275.outlook.office365.com (2603:10b6:208:2bc::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.292.15 via Frontend Transport; Wed, 5 Aug 2026 06:42:57 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0001A106.mail.protection.outlook.com (10.167.241.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.8 via Frontend Transport; Wed, 5 Aug 2026 06:42:57 +0000 Received: from [127.0.1.1] (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 5 Aug 2026 01:42:45 -0500 From: Shivank Garg Date: Wed, 5 Aug 2026 06:40:38 +0000 Subject: [PATCH v3 9/9] KVM: selftests: exercise guest_memfd folio migration Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260805-shivank-gmem-migrate-v3-9-00d8bdec4e1d@amd.com> References: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> In-Reply-To: <20260805-shivank-gmem-migrate-v3-0-00d8bdec4e1d@amd.com> To: "Matthew Wilcox (Oracle)" , Jan Kara , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , David Hildenbrand , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , "Paolo Bonzini" , Shuah Khan , Chao Peng , Nikunj A Dadhania , "Michael Roth" , Pankaj Gupta , "Ackerley Tng" , Sean Christopherson , "Vishal Annapurve" , Nikita Kalyazin , Patrick Roy , "Pratik Sampat" , Ashish Kalra , "Thomas Gleixner" , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Jonathan Corbet , "Shuah Khan" , Peter Shier , "Jim Mattson" , Ricardo Koller , "Ira Weiny" , Fuad Tabba CC: , , , , , , , Shivank Garg X-Mailer: b4 0.15-dev-47d62 X-Developer-Signature: v=1; a=ed25519-sha256; t=1785912059; l=4976; i=shivankg@amd.com; s=20260518; h=from:subject:message-id; bh=x9mCImPZZ95LBaPAvQM4Yr+g5CzISa/q8Behw3tOl54=; b=o0gAm+7J32zcBqS0662iidu5c8LsJs0m/rRg3/FnQlJK94ko8zN6sChtFrw9F+gAxsL/ozB18 dW/FSFHQtONBFWmm/Mqy0YoxKwJqL8Rm3Lt5Yq812EGhHHTmDfSJ2WE X-Developer-Key: i=shivankg@amd.com; a=ed25519; pk=2l2QGTeXuGkZTtfmx0nPQU8iFZfjYmX/ymMojitevx4= X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A106:EE_|CH3PR12MB8234:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f2cf7af-9d70-4ebe-0a8c-08def2bcc927 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|82310400026|1800799024|376014|36860700016|23010399003|22082099003|18002099003|11063799006|56012099006|6133799003|10067099003|921020; X-Microsoft-Antispam-Message-Info: rp5waTDFcRdw3JW5v3hkTCy7geZlxfLzqo3rYQf+9gJ99YpSnDOabce+5U9gmVEqWmmBAOgYf+e7003wNoGKeXnf538SDE58MAq+t4NU2yP/BhN1zsRzc4yxInF50t+jMX3NhR9oBMbLcSTjwtJVbilK099P8McX3rY6+H44840uiPg7Dib9X/s/hskR47QUL5mavbwuXaORi6zsxLA5xX1IoIjsiMGRFuZfpdNZaTWFnsUWvcCXBZKZ0GT7wwJBKHodkn52qZ+zFhcr/37+kH//LgW/h2lx1OHTMQVUvxgzi1wX4l8xq8JcvOdWmwcMaqwJIquv/73WiQjz7lzlNJJ0+Cfbxg2Gd6bx/zglmfAMI8vSKS6hhm8ZMuuxADSR+nygTlHY5A3z3Nkc7I0s/9OaVgO1qdhN9+wny5ZoO3Fl4xCKwtJfjgCCr+mjRL7KfGRJawf/MUW7tn7NmV2TFyjcJzJvtEg055VNOrdAZVcPX2A4YeEJON8Iq4WBdV7NJ7VRGMuvLpbWCBYlvelHlovCG8euc7ASDNswcnO0bHhdjkXpVL56MBjTAptkb+nimVkz8L81D+PYKcAn7aRAp7JpYJUJw22qH2lP1ibY0rPb4Rj1KKm20fbIqB1z0FlGhezltKvdca5hNAuNwD5pnPnPN9xhC+XgXIFvgLb+HpbGHEmNejhxbK8cSOAjUf0WAkiTsam5Jei8RoqMeIOWK6I52prO8yvub4v+/kinbfMQUpFyvNG+wxV/SeflxSpb X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(82310400026)(1800799024)(376014)(36860700016)(23010399003)(22082099003)(18002099003)(11063799006)(56012099006)(6133799003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UWyezu04rPxAuE7/3/xmw0GJCyaDA+ommDVJxVFejAbK3pihVH8OIx/tQ5jDFaIZB/zTFwdxUiOFTiRTKMi++EgrwXdXlES/1aIkez/j8NjZkVfYxd4y9qpiei5SFi2VBe+TTKdGlxeLOaSpWcYxCIJ6IpzxQJw/cGdJfCJBAW/mxlIUgynpQiCWFn0JYNgxhdtwVkSyODrmCDT0HKUiNurk1fJCIQkatXuQH27jTpZZgYZkIMmC0qbSKVQMQe4Olmr/UHvOHIEjc/+uj0vyeoogniagfYuUoYpN+r+hgj93tjvq9pBvJ6MiQljemnf1WaTOvZwq5wtnOuvpxfiQQ+i1k5YMiMHSZKDaIDn0cogIa8thsW4c/ct7d1ihWvbY1lTGO3EUrOzKIis1DaHslwF8ZdY1CJGywIv9A03wlDOXhsTIjdE/DOXd0uVip7z9 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2026 06:42:57.5300 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0f2cf7af-9d70-4ebe-0a8c-08def2bcc927 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A106.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8234 Add a move_pages() test for guest_memfd. Allocate the folios on one NUMA node, move them to another node and back, and verify their location and contents after each move. Migration is opt-in so verify that migration fails without GUEST_MEMFD_FLAG_MIGRATABLE and succeeds with the flag set. Also run the existing guest_memfd tests with the flag set. Signed-off-by: Shivank Garg --- tools/testing/selftests/kvm/guest_memfd_test.c | 107 +++++++++++++++++++++= ++++ 1 file changed, 107 insertions(+) diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing= /selftests/kvm/guest_memfd_test.c index aee80dda6229..6e1c551fec80 100644 --- a/tools/testing/selftests/kvm/guest_memfd_test.c +++ b/tools/testing/selftests/kvm/guest_memfd_test.c @@ -201,6 +201,102 @@ static void test_numa_allocation(int fd, size_t total= _size) kvm_munmap(mem, total_size); } =20 +static void verify_pages_on_node(char **pages, int page_count, int *status, + int nid, const char *when) +{ + int i; + + kvm_move_pages(0, page_count, pages, NULL, status, 0); + + for (i =3D 0; i < page_count; i++) { + char expected =3D i; + size_t off; + + TEST_ASSERT(status[i] =3D=3D nid, + "Expected page %d on node %d %s, got it on node %d", + i, nid, when, status[i]); + + for (off =3D 0; off < page_size; off++) + TEST_ASSERT(pages[i][off] =3D=3D expected, + "Page %d corrupted at offset %zu %s", + i, off, when); + } +} + +static void move_pages_to_node(char **pages, int page_count, int *nodes, + int *status, int nid) +{ + int i; + + for (i =3D 0; i < page_count; i++) + nodes[i] =3D nid; + + kvm_move_pages(0, page_count, pages, nodes, status, MPOL_MF_MOVE); +} + +static void __test_migrate_folio(int fd, size_t total_size, bool migratabl= e) +{ + int page_count =3D total_size / page_size; + unsigned long nodemask; + unsigned long maxnode =3D BITS_PER_TYPE(nodemask) + 1; + int *nodes, *status; + char **pages; + char *mem; + int nids[2]; + int i; + + if (!get_numa_node_ids(nids, ARRAY_SIZE(nids))) + return; + + mem =3D kvm_mmap(total_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd); + + pages =3D calloc(page_count, sizeof(*pages)); + nodes =3D calloc(page_count, sizeof(*nodes)); + status =3D calloc(page_count, sizeof(*status)); + TEST_ASSERT(pages && nodes && status, "Failed to allocate page arrays"); + + /* Allocate all folios on the source node and fill in a known pattern. */ + nodemask =3D 1UL << nids[0]; + kvm_mbind(mem, total_size, MPOL_BIND, &nodemask, maxnode, 0); + for (i =3D 0; i < page_count; i++) { + pages[i] =3D mem + i * page_size; + memset(pages[i], i, page_size); + } + verify_pages_on_node(pages, page_count, status, nids[0], "on allocation"); + + if (migratable) { + move_pages_to_node(pages, page_count, nodes, status, nids[1]); + verify_pages_on_node(pages, page_count, status, nids[1], + "after migration"); + + move_pages_to_node(pages, page_count, nodes, status, nids[0]); + verify_pages_on_node(pages, page_count, status, nids[0], + "after round-trip"); + } else { + for (i =3D 0; i < page_count; i++) + nodes[i] =3D nids[1]; + TEST_ASSERT_EQ(move_pages(0, page_count, pages, nodes, status, + MPOL_MF_MOVE), page_count); + verify_pages_on_node(pages, page_count, status, nids[0], + "after rejected migration"); + } + + free(status); + free(nodes); + free(pages); + kvm_munmap(mem, total_size); +} + +static void test_migrate_folio_supported(int fd, size_t total_size) +{ + __test_migrate_folio(fd, total_size, true); +} + +static void test_migrate_folio_not_supported(int fd, size_t total_size) +{ + __test_migrate_folio(fd, total_size, false); +} + static void test_collapse(int fd, u64 flags) { const size_t pmd_size =3D get_trans_hugepagesz(); @@ -483,6 +579,11 @@ static void __test_guest_memfd(struct kvm_vm *vm, u64 = flags) gmem_test(fault_overflow, vm, flags); gmem_test(numa_allocation, vm, flags); __gmem_test(collapse, vm, flags, pmd_size); + + if (flags & GUEST_MEMFD_FLAG_MIGRATABLE) + gmem_test(migrate_folio_supported, vm, flags); + else + gmem_test(migrate_folio_not_supported, vm, flags); } else { gmem_test(fault_private, vm, flags); } @@ -501,6 +602,9 @@ static void __test_guest_memfd(struct kvm_vm *vm, u64 f= lags) =20 static void test_guest_memfd(unsigned long vm_type) { + const u64 migratable_flags =3D GUEST_MEMFD_FLAG_MMAP | + GUEST_MEMFD_FLAG_INIT_SHARED | + GUEST_MEMFD_FLAG_MIGRATABLE; struct kvm_vm *vm =3D vm_create_barebones_type(vm_type); u64 flags; =20 @@ -517,6 +621,9 @@ static void test_guest_memfd(unsigned long vm_type) __test_guest_memfd(vm, GUEST_MEMFD_FLAG_MMAP | GUEST_MEMFD_FLAG_INIT_SHARED); =20 + if ((flags & migratable_flags) =3D=3D migratable_flags) + __test_guest_memfd(vm, migratable_flags); + kvm_vm_free(vm); } =20 --=20 2.43.0