From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4873C369CB for ; Wed, 23 Apr 2025 08:18:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 28FCA6B00A7; Wed, 23 Apr 2025 04:18:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 071956B00A8; Wed, 23 Apr 2025 04:18:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DDCE86B00AA; Wed, 23 Apr 2025 04:18:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id BBDB36B00A8 for ; Wed, 23 Apr 2025 04:18:45 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id A3ED116185C for ; Wed, 23 Apr 2025 08:18:46 +0000 (UTC) X-FDA: 83364607452.24.50A0064 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf29.hostedemail.com (Postfix) with ESMTP id E616412000F for ; Wed, 23 Apr 2025 08:18:44 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="X4/WiZIV"; dmarc=none; spf=none (imf29.hostedemail.com: domain of BATV+cfb108382ec1185fc08d+7913+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+cfb108382ec1185fc08d+7913+infradead.org+dwmw2@casper.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745396325; a=rsa-sha256; cv=none; b=6hTWroCqein26s80+7cnwCYlSNjvndBDsEcAlD7qmg0K+Bi8GbuYRaRmQ6s2fEqljT2tn4 endXwiA2NXDAjRFjzdriIftcrrHRO66z7tLk03Bwu01vz0fb3p1fm8WAkFzuXXbGb9QFkx 5Eu4oFFKTqC73vAoyAZTjrLhs7tqqHA= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="X4/WiZIV"; dmarc=none; spf=none (imf29.hostedemail.com: domain of BATV+cfb108382ec1185fc08d+7913+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+cfb108382ec1185fc08d+7913+infradead.org+dwmw2@casper.srs.infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745396325; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=rlxnpPA0BRJTqTZOB/PexdCma5i3A5+cr7q4oQzGnJY=; b=ARJp4Yjj5kMKznP80rzxgzSeF15mNLVL0yMSwC1Nt6UMxIzK9lTMmrnmTk6ekW/nIE8p8F z4zDhWucbI0D26w6EB2ZmZPLKTkFbzjjKbN5RNQcL6vx9m8pxSpcbRFtgGYE+XFgCNPYCa whXRGdtsRQP0i9dJhRJZCtEXp/dOetQ= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To: Content-ID:Content-Description:In-Reply-To:References; bh=rlxnpPA0BRJTqTZOB/PexdCma5i3A5+cr7q4oQzGnJY=; b=X4/WiZIVa8VJZ4s6lzTQ5R6C87 mMWBom0H0ojD5GxrzdbQIYbyEeWIA65+od2I+w8xI3eGSZAGsMGBolPKiRkF1kxcn8/N0qkDi4rEM MmHZcRA67HLbq3D9tTPblVXTNdJytDkmWZsgIp6kHJiTsH6CgrnGM099lb572unq5ApDU+m375Bkv mWuL6x/V1SMedTAXLRGyItGv7BOfuAdXsZAPpcfPJ2hfkFN2+WEWedKJ94XPsaEzAfofbRZhzv3cS 116ymjKX6YKwzi/+NkKJfbC/gL5finbqWNPiPP5sYti5/2gTrNMnZ4BXkwWEzDbpVAzvH96POKlzu Jv1LdqrQ==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux)) id 1u7VJQ-000000081P5-0Epc; Wed, 23 Apr 2025 08:18:32 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u7VJO-00000002YNk-0Rej; Wed, 23 Apr 2025 09:18:30 +0100 From: David Woodhouse To: Mike Rapoport Cc: Andrew Morton , "Sauerwein, David" , Anshuman Khandual , Ard Biesheuvel , Catalin Marinas , David Hildenbrand , Marc Zyngier , Mark Rutland , Mike Rapoport , Will Deacon , kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Ruihan Li Subject: [PATCH v3 0/7] mm: Introduce for_each_valid_pfn() Date: Wed, 23 Apr 2025 08:52:42 +0100 Message-ID: <20250423081828.608422-1-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: E616412000F X-Stat-Signature: nsbgphpk4zo6bwoo7pmqsbantw9fpy53 X-Rspam-User: X-HE-Tag: 1745396324-875706 X-HE-Meta: U2FsdGVkX18pmsUdBghNURJufGdIzuh14qdP8/eanCFIA1/a0LhzhslG7t5KC9KyQfACWckuxTCY4fGTknsJBmGXCT6W2FJwq7/0gGM3ahdIDuxe3nyoFQfx5h8LvRAkhIm7JJ1cUSytbEU43g4ER9olQ/qK2Ye/+NNWELrFjwanXAD2IbC8X+EnssonA7eRzRLQ4xRnzSmujryddPFVV8hUlCf8ymzzex31CCzgJi+hBp/zbvZ/mleZcB2onDAzgPR68L+vTGJqS54n2WFSj+i+ebBgz9KD7ToQXKnsMjxOIDK/asdIR0XpqovY5SqY0T8hswWgMKFWmfmMPIjU0C03S6jjEhL4TLCya8BY1O8kl9hzvLOQwFiD/5MIAT2HuHjx9dtt1+uIunkv+TwzwK6rqtBKUIu69yTJY/j9y2mWZC0PWeeqmpX9PL10PGKHFfI+10y9Un8zfZ+qA2T46rnaJlZoXVbHO5SWnDxBZTrzj7u0FZF3hsMOPoFJsRCV9K19xgP4LrCNkM3OXRoaWKnSb9+lxuzx3y4Ddvx09QDVm1FjiEi1Ik01vv/iot//zCEtPM5MMMHm6iPb0Ns86BtjJ3i1gk152JxW5bCv6lOlaq0VOlacUyHxBuQkPEt12csH8ANH+gdSnChmFGx7MvrH4oR0/ynrd2eBeculCJxOnj8TfhuLmlvkfmhtks6kyCxJZEtnd0bSuAmBvjYs6Ir0v1UR+L9Nf5cMlZ6SAGHPvWapdLDGATG9ObHqpgKVzE+O3u3gagt3piMQDUZ7eF8qH7rLP3P5t3/Pl3Q2Na06fubrqFssvXflEilMHpXKXMp+gM9DZ2YQa9XKVtJeb4IUfkZEc6brzHkTpiUfyRn79qxkKDNL1JzwTXDJPBakr5WOKPVI5DKabzQXvM4RHdlcdB0OrA+rE998bvQgtyJAueJAUrIn9eMfGbdYX6sjSgNs26r41wlR5vXkygR di7nB938 BFnUJFi6AoP4Mk50FV+C3l4Xo/X0QghFFDnRivQBxNM0xtVs4IqaoEbPfe6LKCsvzhDS1Co9BuG8iN/V4m4scAKk1q7yPFxfyfm/wYZzsxtD4BqBi8RhgBhUBiSLZRucyL/WJgqM20fVkQbU6Dtg4f5CtsA6CabbSA78o5TP6kvKAS6LCBifwHF5Pj/NSFHgyfvGVKL0V6MGgyZfCxXo3+0R+F+DEUEXUDhQGIdflp3KdwUpvIIQU6HUyf2phpjOAY6WBI0e7nCOE+bmDJgWz5yn69eZ9w35hyK8NgdMhBtl6zRiUVcRnPyi3JwEhMFgfeVvEHG9QCLCQoKPzSYnuXFNiZ+xK0Mn8NdhSu3B4SqO1HRO3RsqWbq0qqJUpiv4MVtWSey+saz3seZ7dxiq7hUNaxcAwfC7Cng+W3xLKhDcNkS/2dZ1BPejjryJWK3CejkH+Yh/vx5iccJEZ/Ib6GFjKm0inyKfCOqjfGfWaFcQ8k9AraSbeY7+Iwv/DHu0reDfeHfhJ9Rz87X59szt+yKLMEve4HZVJZvG8gt7gb8XxJFr43VZRJDmp3INtC3nzC0jFDcYdtp5vbzaeIM2DQPk7Bbuc4nJLAcPGslgONGDDJSy95eei/7vnIMr67x1g7YEd X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: There are cases where a naïve loop over a PFN range, calling pfn_valid() on each one, is horribly inefficient. Ruihan Li reported the case where memmap_init() iterates all the way from zero to a potentially large value of ARCH_PFN_OFFSET, and we at Amazon found the reserve_bootmem_region() one as it affects hypervisor live update. Others are more cosmetic. By introducing a for_each_valid_pfn() helper it can optimise away a lot of pointless calls to pfn_valid(), skipping immediately to the next valid PFN and also skipping *all* checks within a valid (sub)region according to the granularity of the memory model in use. https://git.infradead.org/users/dwmw2/linux.git/shortlog/refs/heads/for_each_valid_pfn v3: • Fold the 'optimised' SPARSEMEM implementation into the original patch • Drop the use of (-1) as end marker, and use end_pfn instead. • Drop unused first_valid_pfn() helper for FLATMEM implementation • Add use case in memmap_init() from discussion at https://lore.kernel.org/linux-mm/20250419122801.1752234-1-lrh2000@pku.edu.cn/ v2 [RFC]: https://lore.kernel.org/linux-mm/20250404155959.3442111-1-dwmw2@infradead.org/ • Revised implementations with feedback from Mike • Add a few more use cases v1 [RFC]: https://lore.kernel.org/linux-mm/20250402201841.3245371-1-dwmw2@infradead.org/ • First proof of concept David Woodhouse (7): mm: Introduce for_each_valid_pfn() and use it from reserve_bootmem_region() mm: Implement for_each_valid_pfn() for CONFIG_FLATMEM mm: Implement for_each_valid_pfn() for CONFIG_SPARSEMEM mm, PM: Use for_each_valid_pfn() in kernel/power/snapshot.c mm, x86: Use for_each_valid_pfn() from __ioremap_check_ram() mm: Use for_each_valid_pfn() in memory_hotplug mm/mm_init: Use for_each_valid_pfn() in init_unavailable_range() arch/x86/mm/ioremap.c | 7 ++- include/asm-generic/memory_model.h | 26 ++++++++++- include/linux/mmzone.h | 88 ++++++++++++++++++++++++++++++++++++++ kernel/power/snapshot.c | 42 +++++++++--------- mm/memory_hotplug.c | 8 +--- mm/mm_init.c | 29 +++++-------- 6 files changed, 149 insertions(+), 51 deletions(-)