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 D366EC369CB for ; Wed, 23 Apr 2025 13:38:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 108EA6B00A2; Wed, 23 Apr 2025 09:38:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F22356B00A8; Wed, 23 Apr 2025 09:38:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A415E6B00A2; Wed, 23 Apr 2025 09:38:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 618B26B00A4 for ; Wed, 23 Apr 2025 09:38:32 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id BB4D91CAE28 for ; Wed, 23 Apr 2025 13:38:33 +0000 (UTC) X-FDA: 83365413306.24.A5136DC Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf22.hostedemail.com (Postfix) with ESMTP id D2344C0004 for ; Wed, 23 Apr 2025 13:38:31 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=CGlnf3Kl; dmarc=none; spf=none (imf22.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=1745415511; a=rsa-sha256; cv=none; b=oJicwOe6xLgpzbavk97u6x+3P0Xa1+4/V+SHkmy0O6pGvjz82kCdoKlF87LlYtLrGuzmoO LqPs2UV8RrHXoMpko5MwvViH7Q3+B0L0FCCBrD6i2GbRHTAsXOSENGaDoujZI1+7I3Tog+ 9qbiOQ8Ye66xI4Mqo/VDil1YuRC/998= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=CGlnf3Kl; dmarc=none; spf=none (imf22.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=1745415511; 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=1R2wcJ8WNozyVRB5Zez0LopaRMyXxGSmC5SqBu1VNhc=; b=19IrEb1sQ7nJwx32NgXkU0gUVvfiWtFfyD2sgTBoIE38+XsvivuBqwhK08imx7X+AChaNV uYG7TFrJnEJPK03mqGy/nvW4P+phWPusxe6stB8ajm64BHVVOXIETZ+2JfP1zdMhJs0K32 CvG0XmzdIxFLwyGs9tBtaikEoLsh5Ng= 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=1R2wcJ8WNozyVRB5Zez0LopaRMyXxGSmC5SqBu1VNhc=; b=CGlnf3KlkTK55NNfKmHL9MINWg +8gBwwSBH8guIB5zf/6WnJ0xNk0PpV8AuYk6sWWCeuM5UOHzvEkf4+3PdGLNoF+qdj/MD4En6fCHH wLnFpZtfBTTIZmrwVgZNhtNOnhino6tLdsvwH/cr6s2eHgiqY68/xqu2MZer9FESkr7VbTi9/kk5M UqDG0CHFGaQkYQvHy1cUON8QERKW4HHD6f7mhnergDvcrwOPehlYSvRXotGZagqsaf0rHr1rVqnr1 NDy5QciXcB17D3HTG/e4u60Fa+eEtDCl8qCaogiQt+kS2Llcn4al/QnOM+c0j98lmcEPgopQiIqYy w/sFi4xg==; 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 1u7aIx-000000097Jc-1AzY; Wed, 23 Apr 2025 13:38:23 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u7aIx-00000003JOZ-04bE; Wed, 23 Apr 2025 14:38:23 +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 , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Ruihan Li Subject: [PATCH v4 0/7] mm: Introduce for_each_valid_pfn() Date: Wed, 23 Apr 2025 14:33:36 +0100 Message-ID: <20250423133821.789413-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-Queue-Id: D2344C0004 X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: x8fhp4hny8y5ebtii4u3txkwb7hgjjdw X-HE-Tag: 1745415511-394735 X-HE-Meta: U2FsdGVkX18GHEgd8FIETddFWM9QCeqYHEeixe871H8E6VkZ15K+1I67NR48ojzaqChzbfzS3TXQDVaX5nO0KiKeSpCuUyG+uq4eIGGsRVQELd9hpELdCFDoO8zgQWrjVsjGz2ct489Afe5rVW0OweVqIDqheHjo10Ce8rRCM3g8aD+Dkx8onoVXY0BnR0TNxA/tr5BX8rLs87nA/4zPLYB60dQW+QvDjc5kzTtMDRm2OcFz55+V2QxGDNw/H5vnADuO1fmGrsyEdWqZ4iZq9GaPDPFMEzsrCjjuX/V734JxEUf4FxxG1RFe6kTw/RQCrj1rnOSu1Rcv4QN2YmqjKi0MILt5TbzAUyDSpIW7RtqS3kN/ZLL30eM8GE3A+Kbe55k+c4ccapOk5jmcHo0JjfESDhqEVbsytE5AtcGqXH4ZNueWwxL5YH6bnP6tG5PQZv5qiOAC+XCe/T4Swe87bDAJbVX8xOpcRb5e+sN4xx9afyRz6O/LJtBJc5Ls7UVKTam0c0r6G8Pp/ghcSiNfVEz3JwbgYvtgDCN0zd0GzeLyXbwYTgJd3Hw7uL97ne58K0Fby8MOyJz1If+w1FnxtkfFaMA/c36iCpqe6kRwb2P7+PYlohdSWnU6lKe192NubPMmDp1FDOkEVvCqcEZLCGkm57k/zxBe9MTkInD4I0M0UTmPJXIUvpe1TQcVncw2TbBDGuuRhG0Fy3P51KnEQH+iEV3frSMZVitNH8xG9EX0TsxSGj5lZfW00Ix0KBij4kFnyV7tlxwsZ+0RQWGdZjPMziub8PDP0LtSpiQnVeEyQWFrYdDBnMrsWqAjytR6JgHROLwwBasMgZ64v+DO1BzUeTv1p6dB+86Vz77blK6fLyVmnSOUJZzbS/iJlbBAaWSjra7bkFRhuxl+h4FOLnNPn3ToRaKP1tGR11levCYXN9ZisRKDAoWPAcDC9s+7KYTTc+5/2lkFSxsiKj+ RAIhk8qh 41JLr+TqPh+DGaKn4qJxEP2xfAyYyngNG+gxyl1Jq9/AQpj2gxxkhUIVS32/3lnsrR8S0MtVFHAsGt/2qn7NNgO1YoM8uirJHbdT0QMB9dc7PNVtxO8guFHJP2tGfQFsss9Emh1nCHyF7GBNIBssCbvoBh+UoQBhKa67CK9lQUH58vxgM2OiSdyFXEf69bdmDOZpbosjX8fZtqkXRNIWMMEmDP8isqNrW6MijAKOKyeuDsNvtn9pAMOag/+qw9H7qA2yVNSIJ4tLHDBUSDWuRI06J4HC55slfQrDKylqm6VRIvmgt9shARQYNvk0eJ47filO0SRA/P+tzbA6gonpb1IH5fWRGSEZpDaMIQFGozj6QZ6Uw7TDO8CxsoTeG+bIVgFGFgfazoJBSi4GMs1mkaoYetRrl4Ahw//avBTlCwEQl0StBCTltc+MoSzBZrLMVUSZA6yqreCbvD61Vp5h6Lyxm/T639C+C0hdAaVOeQEEaWUGReaI7aMVkyHdeMhXvMs13Fb+AXYnapuLpKLEmbK+MQ+FUWVE5Jn08thStM07m9MO/qb6u1AZkZ0ZW/laspktSAM4oQBeRmqhWcZHVXLWyCHVrXWee7H6+qCwqBwxJCio24aAB0LML59g24bvI3iF1 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 v4: • Collect Reviewed/Acked/Tested-by tags • Fix rebase mistake reverting FLATMEM cleanups v3: https://lore.kernel.org/all/20250423081828.608422-1-dwmw2@infradead.org/ • 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 | 10 ++++- include/linux/mmzone.h | 88 ++++++++++++++++++++++++++++++++++++++ kernel/power/snapshot.c | 42 +++++++++--------- mm/memory_hotplug.c | 8 +--- mm/mm_init.c | 29 +++++-------- 6 files changed, 133 insertions(+), 51 deletions(-)