From patchwork Fri Apr 4 15:59:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038653 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 E386FC36010 for ; Fri, 4 Apr 2025 16:00:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5EC20280008; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 53DDA280005; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3420B280007; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 11362280001 for ; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 9E76F1C7C7F for ; Fri, 4 Apr 2025 16:00:14 +0000 (UTC) X-FDA: 83296823148.05.5E10F16 Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf10.hostedemail.com (Postfix) with ESMTP id DFF1BC0013 for ; Fri, 4 Apr 2025 16:00:12 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b="GUYU/YR4"; spf=none (imf10.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743782413; 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=P5VYLYdEkeWgyeWX/EZa0WnpJ73Q8FAesiLU/ww7Cxs=; b=EMUNUCxUiXfYIpds3d9wBEWF7JpbrcsnhVrPC69rZRtv2LQDQFXI8foQFVsdHrHNBQOGFD uhk9JKA5LvnVE0+kJ3webNkiMFg+oWAoGOCafd25pp1BGrTyCees/OLpRGJWpczQf+GGC6 oa36nJBlTK/ZS1oBslNDhZBWiYDSp+I= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b="GUYU/YR4"; spf=none (imf10.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782413; a=rsa-sha256; cv=none; b=FByPbjzgPwegrdzwOqZkbc64ZRDxsHsbls3uTxrqNiUGEgvX0oRGmTh3w9j2zRDFao53xc 4uwzwu+pg0Mo4wZvSN7GQJ6nduycuMIY9ti1e317pdxHxS/QQVSUC6Hk/UxkdWsMsOi7ZM u4WRVJjOI2DUx/BkBCx/VpT2XpT2Dp4= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; 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=P5VYLYdEkeWgyeWX/EZa0WnpJ73Q8FAesiLU/ww7Cxs=; b=GUYU/YR47lcF88YQE7EH7TpKB2 zN7AKKvvGE+bbZSCVfqr/oyxCsvOKug18HG2HLPn2hzCCyr28tFqyGD9WE8XnLgGAI3tZkFoNGjRO OgjbHNJH1PDByFVu8pm8ZivdCL5MEV/GNaFUfd+wAfiibiI9zWlpJtBcaljmCVRXvO2F5RxGRDFcv n+kIPUAtdP9Y82yL00kM9ObdiypoF5byTbPDzb62xDr08XwYD5r8jUm8sLxrmkORJzVZ3UuKodDTs Em+8VmA6k36CwWivAtW5UVU9ugF9e40TqXDlsMyj8sHumr6FwIMVgjq+YOd/BBlhaaZ+R0N+DDoUj 9yqvaGVQ==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by desiato.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSc-00000007QOy-0YLc; Fri, 04 Apr 2025 16:00:02 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERSB-2cgL; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 1/7] mm: Introduce for_each_valid_pfn() and use it from reserve_bootmem_region() Date: Fri, 4 Apr 2025 16:59:53 +0100 Message-ID: <20250404155959.3442111-1-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by desiato.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Queue-Id: DFF1BC0013 X-Stat-Signature: nck9h5ykstiz3e3ktuku1wb468ykg77q X-Rspam-User: X-Rspamd-Server: rspam12 X-HE-Tag: 1743782412-329754 X-HE-Meta: U2FsdGVkX184qhR4n/WdrctrpO9r7mjm9Ay7UcgSHBmoQuYMSHt/421eo3nKu9YzcRErqM7OdlUkJ5y76ltSVpObm1fLY0CHv0DaR9XmvyaAUGy5y1ZfElPFSuT/TCs+soPYSs0HglG/Pa9vLyPVzlKYnWLqu4nVGNDTG8Nwmf1PElbRvUcjAdTbZaoPDZV+Z1CEPpBCVoamdZgjpMsLbD4C/qv+Bi3LRheCjGIGaEXEgv8e7plT65Qd51qKxgfIdfX762NFmnJz8oVwNX4F+01R8/ZDRjoTXcCwAddCg0sgMKd4NveMT5crCrhOex/PKN4fjG1k5NSJ488XXhCay2HvpAJ7mtC35O4jAEi9j19Cvf9ahCrsmestWkcHiJ8DFBgK+wklQYTFSC/ljJYw3NR82BLhFdJJ7Rt/POQ+W666idX25ZrHpkiIwZBy8JLdojMWGI+H6E98uBrTWb6+vJ2K3bUu5ptxCX173z3c/vXSl/ZrS+f4ZAsfQj4Dj3Nhra02pe2EFrYfW4gIyhFU6wbx+E+y69nI7JDVj1H4iKJPNl/VuTXp4jIsOdbBqEhCG0F/Xn3CQ+aXvFGxMSYcYTgEHBFtzKbbm0kxjJHp9Leshb0rbLnEFaTtnbEwM7JPYCAYuNUP632cNxvJiN16LieOmGrM2BJ6TomURdymME+JBT96myGa9pLw2XF0NbKBlm4DReMQgeJvUanCNaDyJzlAyPmX43O1m/uPykQI+LojLR8V8/PAnrhQ4rlz7vnWQxsw0lEf+J069tZwzcYSs0ea8wpla318ke85r0zZx7vAp7Oj6cynSkFQZtp+RpELSqtPQ/bP/7fcKV7qN+dMZ6iKuMIkWPthodHCOkWbtjB5VxeKTQB9x36ilU08JPqQ4jXKJrD8aY4zg5h8Wy/bJu0+J+Vl/4weOmtzT3NnbM24zwqEMQs7sTdggQ6mrZFyW9pyPwEZpXUDeNCWjKE iGq2n+KF cjkNnaMrcfrcspRjNDc7K2GQcK6qimzRZqmzA9YEU3170pma6zyLUFrox/WPbCZtKpwn2zvFCsLT0AckxQG94ts6xYHDFl5+8X4VoCejZJEU3bwYXUY+w832l9CvYgIW63LKFVilPt+vQqGEF9DlR1sNMqHt0Xazy2fVM2GfY1Ivy7sfCiCuw9a4Z/Lz2l411F14TsyTnJAkfTOsixrJz/FW8dsbzpQtDIoN13o63DOUlqN/xTx0DI4wIxxryuGDYBvlQapfiDTyq97lFo+wPTgp8Fhe04rW/2QfudVX3oZAG3ryg/3FvpiES7d2kVkyoL3cF54rka9ydUvwVXSnAh/uR3cl3zUGNjGUxa9c9VdegM2J2ySi//bybdKrCIz+AoYgIcjvCcsFvnwTX0Z/KPwf6WM9X7WjkFhLurGentMYeyNtOYFjirbc51hGyD/cLcBVg0ZnGwu3FsIISUWc1omaRO2xWx9lVgcQFmmeFitKrUZduh1vGbejkGS44L3LIw15RMNTqZaHszWhANpDpEoNUuuvqjhRIBS82ikgc5tgboJWdgVgNXQjntFmnXZUKCezXuqTUsTb+AXbettBWPwvbKonZb2IDiOdH 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: From: David Woodhouse Especially since commit 9092d4f7a1f8 ("memblock: update initialization of reserved pages"), the reserve_bootmem_region() function can spend a significant amount of time iterating over every 4KiB PFN in a range, calling pfn_valid() on each one, and ultimately doing absolutely nothing. On a platform used for virtualization, with large NOMAP regions that eventually get used for guest RAM, this leads to a significant increase in steal time experienced during kexec for a live update. Introduce for_each_valid_pfn() and use it from reserve_bootmem_region(). This implementation is precisely the same naïve loop that the function used to have, but subsequent commits will provide optimised versions for FLATMEM and SPARSEMEM, and this version will remain for those architectures which provide their own pfn_valid() implementation, until/unless they also provide a matching for_each_valid_pfn(). Signed-off-by: David Woodhouse Reviewed-by: Mike Rapoport (Microsoft) --- include/linux/mmzone.h | 10 ++++++++++ mm/mm_init.c | 23 ++++++++++------------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 25e80b2ca7f4..32ecb5cadbaf 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -2176,6 +2176,16 @@ void sparse_init(void); #define subsection_map_init(_pfn, _nr_pages) do {} while (0) #endif /* CONFIG_SPARSEMEM */ +/* + * Fallback case for when the architecture provides its own pfn_valid() but + * not a corresponding for_each_valid_pfn(). + */ +#ifndef for_each_valid_pfn +#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \ + for ((_pfn) = (_start_pfn); (_pfn) < (_end_pfn); (_pfn)++) \ + if (pfn_valid(_pfn)) +#endif + #endif /* !__GENERATING_BOUNDS.H */ #endif /* !__ASSEMBLY__ */ #endif /* _LINUX_MMZONE_H */ diff --git a/mm/mm_init.c b/mm/mm_init.c index a38a1909b407..7c699bad42ad 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -777,22 +777,19 @@ static inline void init_deferred_page(unsigned long pfn, int nid) void __meminit reserve_bootmem_region(phys_addr_t start, phys_addr_t end, int nid) { - unsigned long start_pfn = PFN_DOWN(start); - unsigned long end_pfn = PFN_UP(end); + unsigned long pfn; - for (; start_pfn < end_pfn; start_pfn++) { - if (pfn_valid(start_pfn)) { - struct page *page = pfn_to_page(start_pfn); + for_each_valid_pfn (pfn, PFN_DOWN(start), PFN_UP(end)) { + struct page *page = pfn_to_page(pfn); - init_deferred_page(start_pfn, nid); + init_deferred_page(pfn, nid); - /* - * no need for atomic set_bit because the struct - * page is not visible yet so nobody should - * access it yet. - */ - __SetPageReserved(page); - } + /* + * no need for atomic set_bit because the struct + * page is not visible yet so nobody should + * access it yet. + */ + __SetPageReserved(page); } } From patchwork Fri Apr 4 15:59:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038656 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 8F912C369A1 for ; Fri, 4 Apr 2025 16:00:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EE486280001; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DA7BF280009; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B56F6280007; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 9195D280009 for ; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 392E1AB026 for ; Fri, 4 Apr 2025 16:00:15 +0000 (UTC) X-FDA: 83296823190.12.1994B0B Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf07.hostedemail.com (Postfix) with ESMTP id 7EC9740007 for ; Fri, 4 Apr 2025 16:00:13 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=FXBcvlGe; spf=none (imf07.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743782413; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=bzhTX9e5Ndxofs9PWPQjKMiyjzcJ935BwY08z5T956o=; b=TLIOTJvs1XBMplDygxj9fqfHLfxyAIidnsblxaRo2JOdlPL582vawhIZYwg21VekS+5s8d 1vDeNihBKSZz6SaVgfdx/5BV3mYbb2x8HCfUVrutE7oTQco324an8pAvCXYJYrwM/Yb5YG Xi5ZZ7p5StfbiVg5rny6R3Fpeb9RaKI= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=FXBcvlGe; spf=none (imf07.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782413; a=rsa-sha256; cv=none; b=iUsiyjOEI+j82E7rPVHFaVp2PEcgmN7TPC9Wqu/6JDcWRhywbVkTyTO2r5G8CoitIzxBPf bprPg/qInGAuazvwO+3TACQ2kZoy6nVuSxp7PKqw6Mr9R8xeSVHikc5xp8WuOO2c9p5J0S tLZ0hCZjTnB+z+35gjj3HqJjK0AXENI= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=bzhTX9e5Ndxofs9PWPQjKMiyjzcJ935BwY08z5T956o=; b=FXBcvlGeZ+C24swIZknr5xL0p8 XJhae2JBOiSnCkqw22sW73oMle0AScGnnrrjrgRcsQsZKQse1RoOVdLIAp+dv1eKSBknP+k57ZXTz oWUMRnld+BtYXoPg9UHMvLAZzjw0c1r0zO6b6YuvPysev0lfnzXdLFdhNKt0M0ZRh4D85BOqRtvFd tK/plvL5cesPT7WqFT+JxUKBNBmTGj3rplsy2rhhCN5gtGHW7sANGWiNY+prH/0XWDK8ACkkP8KYO 0V/99vErEol0YusGdeIvCekK7OkuLDr72beS/ATKgCtccaGDE3fu936DgqYjnSi8OA0ZPVlXsvrGH 9UT0Bu0g==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by desiato.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSc-00000007QP0-0VvU; Fri, 04 Apr 2025 16:00:02 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERSE-2u5h; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 2/7] mm: Implement for_each_valid_pfn() for CONFIG_FLATMEM Date: Fri, 4 Apr 2025 16:59:54 +0100 Message-ID: <20250404155959.3442111-2-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250404155959.3442111-1-dwmw2@infradead.org> References: <20250404155959.3442111-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by desiato.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Queue-Id: 7EC9740007 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: qc6mdbttgmdj693j75zxtuynbir16drn X-HE-Tag: 1743782413-147659 X-HE-Meta: U2FsdGVkX18Va2bWJH+TfD//91YDHJWqieWD49k6Bp+z+MST4a2PfJBaCp7Rc9R1QFpIPOrn/JUA02WJnW4IexG1yu+aUkcjiO164j3SnctmH+S3j0WE+XWb02gPyTJD36uVMrVVFs8cpJ6D7S/BxJ/Q9kKR2/oIIgFD32VxzF1KB/3v4PA15LXIhAKlnN+xi7mwRGn8kRzDKyYUwSz9o29ZVcoekX2lowVItVScKojsQ5YNb5ocD2speT97waRillEbwi/VrOLLxBb25NIh+AKZXwsycLS6Iw6kmR6YpFbNRIMUVLbsw61ya0xHWmcY41CfGKWrxXb79axHZtWXYDXxD41ogmt5JVSrcuSNb5iZYA7gtkxgpXfk8Q6WIx+svtNfpd4tYbdhKG0ZSDOHecmmTlL4UICxq0rX7Ak+McrIczVeTjh6ccKTw1ZkMKHhZCngPHlW6Q/VgRn3EyEM3/oWooe8fElLYtu2ToVGT1qC2mcVe7eKEkuJ4N4XgMGJtdeZy0rIiQwMyrK90iUx/c3ErpgSrK/jiEkVKUrb5xLWyUPBHhZJXgTsm/PojfvIX1q2MA7fokztiew0Krubg4WC6zLXbwECazyXTMrH86CptuncVabbrmc33h5Z9WL4+sfB/p9UTdmO+DflaNDtZBmwXalJhb3NwHJYw1+DeAa1Ii5ED0qahityYLNfuYR0WbYNqvBz4yKzjkXzcUIm1zMWo0PuiG7n08QXokqB7MVRaKIJqimvq0oHqhDFBTZlqPCRnMhqzBraYmU8MgDotgpc5x8RBZh2J7V7QHbmwSMxQ2rynDzIgHeX4UA0RpHoXYEzZJHXdTr35toxQjSxgsY0hvEgF0d/nVD8ERGAn9PTjfLspPqfqzU3BUS3e3Y0rnh8lq/L77MMJPESXqCYE+fnInnjew6ZS486qJDiqf3Bta36dkOqQU3t/hoe/2web9sLZuGJMSdD5OD1sC9 pCMvZKE7 pDDfuo42OtVadIh9kpvwmGhi0ul+c8A6B6eNVKaV9WPyx2afdckJ1LPnPoRzIU7O3DoQcFaU+atU7nMhT1d9V6tuifvRLJPsTjQOjbJioZE+2UbMBwut53x/TofOKq8hPnTho0xuxxKrrGTW2XjIgwCAXb3k8vF1yLPy2VV3c91mf8y8dMmmhfwygyFIfG+7A026Ta7GNVHIFsU0T0N927Ah3xS6qSb8z02+Eg97N9jFsBEVTMThQVHWpSWXWi70i1YM6w/2xS2Qu45Xr3s4hVlWSRARK7D0WcQiN70nlYlNDRFfaF+UktCg1LdvKsdhLAOq5v1UH7Bvb60xwnVVR6bXyTR/Gdr5wYGhtx7tgkh419MK01tBUDgunxz5+Hlck6+Za7gaTPWb1P1Ago33fv8/K0Q/O7QrfI/FGxQV7iP3ANGTQqA/2YbY6SV4mYzb8/IPSQQp8/qPtdM74QhEuee2f9F2N9IepMIPVk4NrAvh13wQslOi0RAEj09EinKBWLph74IXMsF9Znk1sEg70mLA2OtTBtCG0L6pSLjZbMwS/SEV4vXe4eQhx8Q== 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: From: David Woodhouse In the FLATMEM case, the default pfn_valid() just checks that the PFN is within the range [ ARCH_PFN_OFFSET .. ARCH_PFN_OFFSET + max_mapnr ). The for_each_valid_pfn() function can therefore be a simple for() loop using those as min/max respectively. Signed-off-by: David Woodhouse Reviewed-by: Mike Rapoport (Microsoft) --- include/asm-generic/memory_model.h | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/include/asm-generic/memory_model.h b/include/asm-generic/memory_model.h index a3b5029aebbd..044536da3390 100644 --- a/include/asm-generic/memory_model.h +++ b/include/asm-generic/memory_model.h @@ -30,7 +30,31 @@ static inline int pfn_valid(unsigned long pfn) return pfn >= pfn_offset && (pfn - pfn_offset) < max_mapnr; } #define pfn_valid pfn_valid -#endif + +static inline bool first_valid_pfn(unsigned long *pfn) +{ + /* avoid include hell */ + extern unsigned long max_mapnr; + unsigned long pfn_offset = ARCH_PFN_OFFSET; + + if (*pfn < pfn_offset) { + *pfn = pfn_offset; + return true; + } + + if ((*pfn - pfn_offset) < max_mapnr) + return true; + + return false; +} + +#ifndef for_each_valid_pfn +#define for_each_valid_pfn(pfn, start_pfn, end_pfn) \ + for (pfn = max_t(unsigned long, start_pfn, ARCH_PFN_OFFSET); \ + pfn < min_t(unsigned long, end_pfn, ARCH_PFN_OFFSET + max_mapnr); \ + pfn++) +#endif /* for_each_valid_pfn */ +#endif /* valid_pfn */ #elif defined(CONFIG_SPARSEMEM_VMEMMAP) From patchwork Fri Apr 4 15:59:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038662 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 1816CC3601A for ; Fri, 4 Apr 2025 16:02:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6BC1C6B000A; Fri, 4 Apr 2025 12:01:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6695C6B000C; Fri, 4 Apr 2025 12:01:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 46CCF6B000D; Fri, 4 Apr 2025 12:01:56 -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 254CF6B000A for ; Fri, 4 Apr 2025 12:01:56 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E37E2AB08E for ; Fri, 4 Apr 2025 16:01:56 +0000 (UTC) X-FDA: 83296827432.08.A7FD119 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf20.hostedemail.com (Postfix) with ESMTP id 0AE221C000E for ; Fri, 4 Apr 2025 16:01:54 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=RWsr+E1e; dmarc=none; spf=none (imf20.hostedemail.com: domain of BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+be2fdb05a07bd611d225+7894+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=1743782515; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=MbqCUn6gz37WzeN1KZjuSX3PD2UQTnr+fmi1Atuk78g=; b=vDd3rG3JsOeC2MNIHzZHhLM+OvCOusmajjKEcR1xaDEklMdOyXF0DQew108nzRpdvIwyzv 0L74ONpRb0RiJXT6zWaWc90k3FYxnHHQoc4n89Ttk23+499nAt25C9Q/+MEpJB14p3mFbi ghUrMAhmD5/zt9L/5eBZ+a15So3xu58= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=RWsr+E1e; dmarc=none; spf=none (imf20.hostedemail.com: domain of BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782515; a=rsa-sha256; cv=none; b=yo2L+3k8+qJfFxpZwP5fbq53p8DVAgwpS7mWI4iqIMBvo3dWxnGwpXtYab8RZlf/9VDC4N YhCy0/nIGEyaipVYhSXrdkDfGA8XQ7Z0RO6k8zFuNJS095Gpt0HSM9roREsRkXRTUF1u+0 DIL/Doq8eUWTAvZY/7IiTdKFKiFqRcc= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=MbqCUn6gz37WzeN1KZjuSX3PD2UQTnr+fmi1Atuk78g=; b=RWsr+E1eF3WBGQC6oJ449g9gwA SsSn8lnsUC2YHgCc1DkPkPKUDY6p05kQ+DQHTMZxOHadeL32SbwkTwJzKhfQt/wfDVlQW8LT7jUZt VX02qdQbHulXzvoBi+9rj6QYyJI/ylZjTYb8TVl1afWmLJP+zM5u8vNCNCebmdlJ2y8SBe/ZXyXt/ JJSQzpsnNFWFUa2iVi2mxTLgNYe1QyHZhX8Ij0hjPdB6nmog4HCDepVSKqkH+UqV5YSpcns6K4gS4 9UCNGOU2P1ees86sHyldV/kbLqCzOHfVVIER2EGdjXCQetTdlO1ArY++q7RNBABd1DojRtj+sALb7 Zq45ERmg==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by casper.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSa-0000000GFHx-39D6; Fri, 04 Apr 2025 16:01:01 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERSH-3DUK; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 3/7] mm: Implement for_each_valid_pfn() for CONFIG_SPARSEMEM Date: Fri, 4 Apr 2025 16:59:55 +0100 Message-ID: <20250404155959.3442111-3-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250404155959.3442111-1-dwmw2@infradead.org> References: <20250404155959.3442111-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Server: rspam01 X-Stat-Signature: xj6fuixtzcbboe99kdmbb3w6dhh6rsnp X-Rspam-User: X-Rspamd-Queue-Id: 0AE221C000E X-HE-Tag: 1743782514-486669 X-HE-Meta: U2FsdGVkX19TAPMEYCttnQC41aFlOzBhPz5wLitcxEmPifeNLUtPIIy2/6AkGQ8J2WCa6JFFouUaOgq9F/UYRkspTYpXY1GsNLCWOSJhQ3q2brd4fkrQuEqY45XBIuGl/PnacJBIrZyOPH9pIUv++TYg9lS13qDKn6GCWQSfBrwwdxraWV6/nwSTyl9YEOMJG/IG1RU9Og5HqKOuRUNf78sRFlpUdCdqzQQNXi8l9nDdyv7YUVy9g5GpWFdPgShp0dWEWyqbsK0FbigL0/Jb2n2CC0dDT15LwtLFgvBpoY6GyKegWe/tZs1pYL57PmT/aVoZW3UcwJwbuN2Uu7S6A/727n3/NHMleUdnAFnRpM5iYKvq8QM1aPu7z368Ha5h2ZQAx2/SfZ/NWkSPYZ+E6gHYCtmWp0oyaOtLDcf5fvSRrkCHL8p5g1y7kBvaYLfeeCRA2S9J8Hv/C6WPB5UrP8nlUls7AFzpgl2gfbdfSvMD4uDxYhB65wiDlFk+D/yvr5I2BRJstwp1ylb/cB8P2KVp28Y0LVm3bmFMaoWnHC52h/oihFZm0twaZq6c5Q9AdoNOK7QskvBZTfqXZImucEplcR6Nl2GRvu5QJRERe81iDe+ECONWdBkAXW2ZDJ6p1XXH+UAyHgz75s3/EdL8wa+Yaf7to52CI7mOxKTF3Ukx8hnQwy7Q9LENm/svOc7IIYJGAdZapinmkeY/rw7xTzYYqAD/XUytguGkjNoroyLmotRTGHDwAfqpUyoRksAPy3FY7eihiifFJ7sglC3P0vFiiMGAh8QsJ/lgPfSYUlA8LVINlSwaRL3ddfLQq+1LQDuohvzEkAD/yj+zjdnAHnnscCLcXH/yrqoc5q5HM2llSMaQ2oW7Bk04rihxu3MyCijfJf160tfW86OExOiqTaqr7/gutw0WDNIUHTvOYFcTA0o6OX2ldupy1G5NIpocpZG+ObYNtvBIzCdcVNW 3R8tm48+ S4+ulBKbE2zSofIcQFYyxAF/LHhnzUJaYCLI5w7tusomSO/Tyc4fZwUgeTEV6v2sG5KnWTbKGtFBdszfb8AyGfYLhsCwLztNcsbuoghGrdf7fy0en0TO15DnaqVMv3e9e1kuYjphBB804zuMokfNOB9dM3ZIxnYsKiYYNZX7nRw8iyF9YYovZ5ohim/r3AW2Js0M5/YmOM5sZ/IfDH8E+38dMvJmB/oy4tVlm1ZVN2mLlbB6mvjWLlYm521vpcS9Kli3/DaRTw1bZcFDQkrFxOCrlEx6vUVbRKliMYN6TJCuk/VKmLe7HaicRFZtJ22BhuCXdq4+88AH9ge1TAcHlnG85mxXSpwZ0LNxhrnX4ds/BD9qmmF7IRpcxvs5TGNkw3aTqAdAZa3UvOPp6ZV1e9AucrVoW/LeP8nfuQbaOF4qdz05Wf4bUSUzefn1Qiiqaadln1u50eBpdI+BgoQOsfSo7hWjzBDmsUmpeGei8CPRXkfSLqfkqq0WlZzxWW4UDhWq5/12Euafkst+Lo643hmpzdLa+Axa6+ZsNoFqBZJB42R+sokkbdHUYyw== 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: From: David Woodhouse Introduce a pfn_first_valid() helper which takes a pointer to the PFN and updates it to point to the first valid PFN starting from that point, and returns true if a valid PFN was found. This largely mirrors pfn_valid(), calling into a pfn_section_first_valid() helper which is trivial for the !CONFIG_SPARSEMEM_VMEMMAP case, and in the VMEMMAP case will skip to the next subsection as needed. Signed-off-by: David Woodhouse Reviewed-by: Mike Rapoport (Microsoft) --- include/linux/mmzone.h | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 32ecb5cadbaf..67cdf675a4b9 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -2074,11 +2074,37 @@ static inline int pfn_section_valid(struct mem_section *ms, unsigned long pfn) return usage ? test_bit(idx, usage->subsection_map) : 0; } + +static inline bool pfn_section_first_valid(struct mem_section *ms, unsigned long *pfn) +{ + struct mem_section_usage *usage = READ_ONCE(ms->usage); + int idx = subsection_map_index(*pfn); + unsigned long bit; + + if (!usage) + return false; + + if (test_bit(idx, usage->subsection_map)) + return true; + + /* Find the next subsection that exists */ + bit = find_next_bit(usage->subsection_map, SUBSECTIONS_PER_SECTION, idx); + if (bit == SUBSECTIONS_PER_SECTION) + return false; + + *pfn = (*pfn & PAGE_SECTION_MASK) + (bit * PAGES_PER_SUBSECTION); + return true; +} #else static inline int pfn_section_valid(struct mem_section *ms, unsigned long pfn) { return 1; } + +static inline bool pfn_section_first_valid(struct mem_section *ms, unsigned long *pfn) +{ + return true; +} #endif void sparse_init_early_section(int nid, struct page *map, unsigned long pnum, @@ -2127,6 +2153,39 @@ static inline int pfn_valid(unsigned long pfn) return ret; } + +static inline bool first_valid_pfn(unsigned long *p_pfn) +{ + unsigned long pfn = *p_pfn; + unsigned long nr = pfn_to_section_nr(pfn); + + rcu_read_lock_sched(); + + while (nr <= __highest_present_section_nr) { + struct mem_section *ms = __pfn_to_section(pfn); + + if (valid_section(ms) && + (early_section(ms) || pfn_section_first_valid(ms, &pfn))) { + *p_pfn = pfn; + rcu_read_unlock_sched(); + return true; + } + + /* Nothing left in this section? Skip to next section */ + nr++; + pfn = section_nr_to_pfn(nr); + } + + rcu_read_unlock_sched(); + + return false; +} + +#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \ + for ((_pfn) = (_start_pfn); \ + first_valid_pfn(&(_pfn)) && (_pfn) < (_end_pfn); \ + (_pfn)++) + #endif static inline int pfn_in_present_section(unsigned long pfn) From patchwork Fri Apr 4 15:59:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038660 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 E9AC3C36010 for ; Fri, 4 Apr 2025 16:01:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 68EE76B0007; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6669C6B0008; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 476C26B000C; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 22F846B0007 for ; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id E5B0DAADBF for ; Fri, 4 Apr 2025 16:01:55 +0000 (UTC) X-FDA: 83296827390.14.BC33759 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf19.hostedemail.com (Postfix) with ESMTP id 68DB51A000B for ; Fri, 4 Apr 2025 16:01:53 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=DXHzSB3s; dmarc=none; spf=none (imf19.hostedemail.com: domain of BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782513; a=rsa-sha256; cv=none; b=te1Z9lifbZJb0S4alXxMjcm0m5EtgO0LP7rjOKmnvtAcb37yQc+ZeI6K60eUgixPr5mFjZ V4vDA4Oz2kvcRVYvq/1mWOtSI8enzoLtLgjyi3pIPmjXr7MseEniHTjgDcwwIfoFmsLa3Z HDDfCGIpONnkLupGxOmDqmb2KoU1N5k= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=DXHzSB3s; dmarc=none; spf=none (imf19.hostedemail.com: domain of BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+be2fdb05a07bd611d225+7894+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=1743782513; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=O+396y0rDBKXn/tGzn/xwAn8Ku375WZ2ZAT9PS+Ub5w=; b=1TPkLyAOwNJur1tuIKDfJCDxRfwTeJYViUgGqIiDCtqQ9ytuguHdoUzwY5W6VL/ecPc73X f7Iyd1n6JvBdUWFY4cRudiCf92f8LZvG5sPxnuoLaq41jyrAJ6qAp910WYLNy/op01Fonw VK7twacm956jrn2qZXNIeUSZxQh4ATI= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=O+396y0rDBKXn/tGzn/xwAn8Ku375WZ2ZAT9PS+Ub5w=; b=DXHzSB3si2aN61sd7dOw7Dkduk TfChbYRNdb3ACgbes0kuBN7Ps4Sy5/UipeFG8/Xla7pFYuFAZjAv8ghlbw60pID0KBmbGy7KhdoZX xFeg4W6Khe91Ifz1tB9jPFsxfe3bqKisa6rPuuYszWXM+JzP0nj3JG8rUww67uY/Mv9WHKvRsSeQX Ok99/gqCaltwnaMSZvz4drLWaLh2mGbx5jBswPyNZtO7LBeN9BcJh4IWoGNNd4OiLAnX2VY16JZlL QP6zoE/Go4gQZXoAjZGtme0XAK6mXGvw/o5DoYFynT49usw3UBp1GA3ggRsbCxmI+nr/eYZ4vp6BK LUawAvyw==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by casper.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSa-0000000GFHy-3ANo; Fri, 04 Apr 2025 16:01:01 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERSK-3V46; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 4/7] mm: Optimise SPARSEMEM implementation of for_each_valid_pfn() Date: Fri, 4 Apr 2025 16:59:56 +0100 Message-ID: <20250404155959.3442111-4-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250404155959.3442111-1-dwmw2@infradead.org> References: <20250404155959.3442111-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 68DB51A000B X-Stat-Signature: pd4hqymxhpakqnqre9tdwxxpxydojx3h X-HE-Tag: 1743782513-524709 X-HE-Meta: U2FsdGVkX19aMbCisULPSRYnbL4Y+99VT4wO0V+lLyXx+bgNqJZJxf9+RKbhKe3e96vIRtAQpoZw/uDkjJt73y1ic0527QCaevKIFGmiOv+BHGX29SWX6d5Pi8kXhq4S+VrJUI6IbmbLAeoMAEAEv6NFMeHYHK5UamSKAr/gURJ7SbKQTf3UgP4gbSAqp/Gi8xw3/c9yPSenQrEeluqPLc0gBNgPWpEPJ6oFCF/AiLdhH2P8kzpm+2kUdmUDw/zWe0daYmNW4ztNiQMRBDTZpbIBHkAtRfb3LulhRSpzOPCdF39IOjdxdAuc7JNjqSVCcSgjIVlD1qYyrYuZzDRBW9/ypRdhJd2O2X+gScFkhuMbF8s8AH4s80B74w4J1sAjvJUT+RFQZrVcIz0IW6f/kunsR8iQ0GkhtGYAXafpU8Hhw/nagoRJhAM4mDhqswXWSnGEGTj2TdEsRgocljjLQ8cY/PIeni3grBafOKcj1biA/fO4QBJSsvxka4YXLrErnUnro2lxem5MuGbDB0GzSGkr2ZhQr34w37lIR7Jnjqlru7c22YoO9IRUeZPDBWLSrJPV88qLA80XfYcLKM3CUDE41VVwTU9VeqyhCkp1KJgdV2LL5nWnhmYKQK3R5dLMYnMkTzPuZ8zjRM56cRBaxW5YkKH13z6iAEX/Ebb1IUXlOW5gqBjPIQFynXA0twcvIsXGwhrmVJmd1ZqlxiLg/EMXp0ZQty1YxxAKmniZrqhHxP+Pkv3s764D1VvNO86FFzvSf0ARsIDEDIGmqYOhRBCpiB9MVywsxyhls9p8y4Hob7eh3WRFyYAPjYqMgrLuXdDHgZP4DdAfJ0vm0OgqObr5dXnRbXBCmDIGxEauMnRkx/xPrSvYQ7PvTzaiHi7sZunIP7+7jGXgFbelOsEHjKPjCvY8zJ4gFG6iLpkONxFlsnpjbgTdavS9cb6aJRNPQwpn+mIbad7sBRtZvsr 0SWNfW+y 3MqyywD58KfarvuGsYaT92O8kdOVFXEzWzVeAUBqoZEN/hT3hvV197uggNCJ3nOZ4Asfx7ixvC1K8sOEJG1GYHdnBqFQqjjvAcInjlmqmotb/MWCrdtIhQPXK80M6HjA03oBvYeVHnhnMz+GA6Pie6GfhzoZV1MsI9yCgODKUAkbm2cf9yagA64Rk+ky+d7fxtQOTOiprgG78i0/J+3m9Cxld6N4Yfa+HMAIKfCqQgEWgQ/Kqf2cFX5WvvZon1G6M24q0CCR6yGa+NRzCjfz2aNr5TA0J6xH7RZ5TFmR8JlX8VA8oklVDcBA3vnfGbRglIK8W5K1KVySLttEv11r2NJw4yg4OfvXVorpPq37NJdPT/i6oxwWc9dDzuXUExKIg1gFBTtSvNcOoZLeLp6TX6fSmvMSxcvQwDF2popAsaRlnAXFhyYI8ai3NrGVN9+/MUljdKBeopxsLGZNTvGW0nBjdruxlUOv2R3oqLIpiV7xI2vKa7dmuxb3kWvrYcelh/SqAJDx7TAVe51maoOyXpbdmFPkfSw5pgPsg 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: From: David Woodhouse There's no point in checking the section and subsection bitmap for *every* PFN in the same section; they're either all valid or they aren't. Signed-off-by: David Woodhouse --- include/linux/mmzone.h | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 67cdf675a4b9..0da1b0ba5d9f 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -2154,21 +2154,20 @@ static inline int pfn_valid(unsigned long pfn) return ret; } -static inline bool first_valid_pfn(unsigned long *p_pfn) +/* Returns -1 (an invalid PFN) if no valid PFN remaining */ +static inline unsigned long first_valid_pfn(unsigned long pfn, unsigned long end_pfn) { - unsigned long pfn = *p_pfn; unsigned long nr = pfn_to_section_nr(pfn); rcu_read_lock_sched(); - while (nr <= __highest_present_section_nr) { + while (nr <= __highest_present_section_nr && pfn < end_pfn) { struct mem_section *ms = __pfn_to_section(pfn); if (valid_section(ms) && (early_section(ms) || pfn_section_first_valid(ms, &pfn))) { - *p_pfn = pfn; rcu_read_unlock_sched(); - return true; + return pfn; } /* Nothing left in this section? Skip to next section */ @@ -2177,14 +2176,34 @@ static inline bool first_valid_pfn(unsigned long *p_pfn) } rcu_read_unlock_sched(); + return (unsigned long)-1; +} - return false; +static inline unsigned long next_valid_pfn(unsigned long pfn, unsigned long end_pfn) +{ + pfn++; + + if (pfn >= end_pfn) + return (unsigned long)-1; + + /* + * Either every PFN within the section (or subsection for VMEMMAP) is + * valid, or none of them are. So there's no point repeating the check + * for every PFN; only call first_valid_pfn() the first time, and when + * crossing a (sub)section boundary (i.e. !(pfn & ~PFN_VALID_MASK)). + */ + if (pfn & (IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP) ? + PAGE_SUBSECTION_MASK : PAGE_SECTION_MASK)) + return pfn; + + return first_valid_pfn(pfn, end_pfn); } -#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \ - for ((_pfn) = (_start_pfn); \ - first_valid_pfn(&(_pfn)) && (_pfn) < (_end_pfn); \ - (_pfn)++) + +#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \ + for ((_pfn) = first_valid_pfn((_start_pfn), (_end_pfn)); \ + (_pfn) != (unsigned long)-1; \ + (_pfn) = next_valid_pfn((_pfn), (_end_pfn))) #endif From patchwork Fri Apr 4 15:59:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038654 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 22759C369A1 for ; Fri, 4 Apr 2025 16:00:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93E3B280005; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 762F2280006; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 406C2280001; Fri, 4 Apr 2025 12:00:14 -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 122A1280005 for ; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id A7F88160471 for ; Fri, 4 Apr 2025 16:00:14 +0000 (UTC) X-FDA: 83296823148.26.AC41695 Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf24.hostedemail.com (Postfix) with ESMTP id 0E65718000A for ; Fri, 4 Apr 2025 16:00:11 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=HX3tq7HI; spf=none (imf24.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743782412; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=EggTF7jgXyqw27ORwtXsCRX4H5aiRA/a+Rh2J8KLoHU=; b=oWFL+ZFQdaHw130x8dGDFk+fXEHT4rOY7KuQipDuUI4M3wPMUzGMr8HGKRJwmnvxM6sw6p lWww9Hwni5rJUZDe2bZRDTzNxt4xHlfBQ/rlsfGE1Q3SEHINNde2k2gl57uuk18LOrjRB4 f/xEMFRwlS+jz62cms5OXV8iEdZ+LN0= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=HX3tq7HI; spf=none (imf24.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782412; a=rsa-sha256; cv=none; b=5PhJhIme2e9V4Y9RGQ8KDj2+RYbA6aV2rF7sQU7/0yrrKHG/uzFnMcI6JHSWtXrcawfPkl kyJbgtrlP3skV9US4lJCVOemg/I1yIh+qSmgj335qf1BEaVlM4asahG84S6jwUOqHNhHPi 4CSGGCJBBp7eQfgvbx8WcqU+G81GoQw= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=EggTF7jgXyqw27ORwtXsCRX4H5aiRA/a+Rh2J8KLoHU=; b=HX3tq7HIzG2pG87fAq0XTCafH8 DkspEeMBkCy2NMH7zp0U9SyOEyHmpaU3H7Ofz669hMx9zaObkueGN/ZaHJDQQkbbsq/szbqDptC6j MEvAedrkC8t9fR5K0oL5RA2eStCojpgVZNK5eHYm29/U4EMZDp1rdB7mREiazKOw2ClJGF36A7NMb QIxbjBiyvvLDG2KkQFeEfwESWlQlq4Cqp751opuozo+zc7k9llxAs9HYO9i3oHJ5803HtEgylCLlr E2HjVkjQaue4zB/utadXeYQG1ct50Itrnag4GetbD68mpWhqmuyE9X0df0jP2ZmVnM5XfX1TrmFxG 1Owpd5BA==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by desiato.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSc-00000007QP1-0YK4; Fri, 04 Apr 2025 16:00:02 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERSN-3n5A; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 5/7] mm, PM: Use for_each_valid_pfn() in kernel/power/snapshot.c Date: Fri, 4 Apr 2025 16:59:57 +0100 Message-ID: <20250404155959.3442111-5-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250404155959.3442111-1-dwmw2@infradead.org> References: <20250404155959.3442111-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by desiato.infradead.org. See http://www.infradead.org/rpr.html X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 0E65718000A X-Stat-Signature: t8xnz1ctpfxjcxxmezm6uc9c9g66mjtr X-HE-Tag: 1743782411-701141 X-HE-Meta: U2FsdGVkX1/s6MVLU8y/XNGDZQHzzcpikcYKP61iVM8a785yMW34x297Op4wXWoam8cZNZNfXSLWNhOgYArWKDboXSbBzhH6aknS0DqaHijs18nGU4E0I00F6+Ys23fl4UNsqWfG6QVrZK+AJfXrKjgH93KQUPscCyhxkcuY6qflhdcv648NAi9ywOs+iJcbEflOSsoTNGM8gh2T7EgIvaarRNFWcwj0qVdVql6k38UHrgzsWd21Q9BUcfWrTyZKMuU2Vat1Atj00cYSLm5LPQFLh4eNPQl4SfiTQpw1yndFfyk0LqOarjps+ZduWa4MpQyGI8L5NnVI9wReTyBqPktwxw4lWwsrtFkpqmDLYWa5I3vPDIthtnjOBGNG01YfwKg9Ba5X6sX7OCKXs/dMPKyX4aNufPKyo/6q/BDY1kAq4Jns5dvVLy7T7l30hKOYERo8JTeYGhDBkEwnJG+hLEggKj83PliSDy/PPII5tdQFvFMebtfbdTMfcwiQla9eyqDO/pboJpqwHrE6YThJcVneeqSl25HkQz4xn0u7mf6mIPEykzFvgXpIhOj0zjaSUq2dY8o2+6sL6U/Gl9d2sp3Q883zntIL8Nc0/WZPOiNyoXX4kGhkkOcAW5WQCdZliY6fYbssvHT5cJKNZLYMVsv01cc/WoAH1TZvRDq3PjKlDW9NgEIGN2D+nsbmrFJxQldkuzyvIXEveRnJzXGdMREI5Dk+5vMfS58cu+9ZAdInzsmFIZULYFVVnqoQG8gObKt9sT7KH0DnhrBbe1BtEe56Ag3qQq0O9sVGnpkDT9EKvDzcwJgAEiAmyvr2fCQmxq0t23HrcOSsEHnggHxLVtkfkYxwyX0GnhyAX1Fg2HpTOrxT4vIi5aNMZmbuMCDEe/OI2VswX/4KNDSqJkwjihk/4VnQEHjvv8e8SgNDc0QqT1OeZENpZ3vALIT7GvtfG+yYMt1e7Fd5sb3uSic ew4V7Iaq brKgzPeoN5fRTGOkUWMuaLUyFg28m8Ssrr+b3jvkWKmNj9WxkUFXFqiM7N2jVtJ4bI671BwMnTO2dyyPqfrxjuBrb1qsr9+sA3asR2mXLXG5UhGudvfAws9dV8dMrDjhrG2j9HiyNzsCZl4rgzUBQBBn0foBUsar6IIJP5bZKV7lUXKGVvUgmgoUWmQwE6WvZb7jGg2lSQykxLH2bQHjcWnL7bv4AsFRhuJPW3MyfGdYxG+M8t0UgaY7Uo8vdLAfM6XK7A6LpcQvhW8ARdcr0Y9OcRpH9wmTURPaJ5VsCLwOM/CJod4nqp1ubJfmgRI00V/Rf3Un6LOKlxbuHxRKdVvp+Sb9dE/U7eGe5T2AiiKuF81b14oeK3zyrNEW2FfLdVbSr9Mkbrb9spyWVgBcz/Z3pKZSBDAUNz8IAFJSsSnRX8psAzF77P0WT+ibvqwrNNyUOG89eYn/AxEPaXxYS5DadW8U2VSCV4YuZePsdkNdLZIdkgVH7UG3FOJpBpRgEvwcszs+2uTt0HTqkyLlvVTrrBKDkx+TThEGB 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: From: David Woodhouse Signed-off-by: David Woodhouse --- kernel/power/snapshot.c | 42 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index 4e6e24e8b854..f151c7a45584 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c @@ -1094,16 +1094,15 @@ static void mark_nosave_pages(struct memory_bitmap *bm) ((unsigned long long) region->end_pfn << PAGE_SHIFT) - 1); - for (pfn = region->start_pfn; pfn < region->end_pfn; pfn++) - if (pfn_valid(pfn)) { - /* - * It is safe to ignore the result of - * mem_bm_set_bit_check() here, since we won't - * touch the PFNs for which the error is - * returned anyway. - */ - mem_bm_set_bit_check(bm, pfn); - } + for_each_valid_pfn (pfn, region->start_pfn, region->end_pfn) { + /* + * It is safe to ignore the result of + * mem_bm_set_bit_check() here, since we won't + * touch the PFNs for which the error is + * returned anyway. + */ + mem_bm_set_bit_check(bm, pfn); + } } } @@ -1255,21 +1254,20 @@ static void mark_free_pages(struct zone *zone) spin_lock_irqsave(&zone->lock, flags); max_zone_pfn = zone_end_pfn(zone); - for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++) - if (pfn_valid(pfn)) { - page = pfn_to_page(pfn); + for_each_valid_pfn(pfn, zone->zone_start_pfn, max_zone_pfn) { + page = pfn_to_page(pfn); - if (!--page_count) { - touch_nmi_watchdog(); - page_count = WD_PAGE_COUNT; - } + if (!--page_count) { + touch_nmi_watchdog(); + page_count = WD_PAGE_COUNT; + } - if (page_zone(page) != zone) - continue; + if (page_zone(page) != zone) + continue; - if (!swsusp_page_is_forbidden(page)) - swsusp_unset_page_free(page); - } + if (!swsusp_page_is_forbidden(page)) + swsusp_unset_page_free(page); + } for_each_migratetype_order(order, t) { list_for_each_entry(page, From patchwork Fri Apr 4 15:59:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038655 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 2043EC36010 for ; Fri, 4 Apr 2025 16:00:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C89EC280006; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 87769280001; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5D939280007; Fri, 4 Apr 2025 12:00:14 -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 23213280006 for ; Fri, 4 Apr 2025 12:00:14 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id C15981C7CA6 for ; Fri, 4 Apr 2025 16:00:14 +0000 (UTC) X-FDA: 83296823148.29.D78BFF2 Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf18.hostedemail.com (Postfix) with ESMTP id E5BA91C0005 for ; Fri, 4 Apr 2025 16:00:11 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b="d7l3I/9/"; spf=none (imf18.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743782412; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SAQbWjWGGmEWV/yrGcgLnMo50LiJ5Xc9HvWor5bjKpE=; b=8BgpqlD01dtxeZ4+aMwvLSB+L2HZZ4/tJ/lH3rYpTkYdh+UMtVyfmJoxKnPBv+RVGSe6xE cdHePrsWtoN5SUeYXuPQQBynazsyV/7/3g6QRtREU4oek/VdDiGyaisKc+oyNmo5iWzsBO taJEWgBLZovmPwE3jR099psRduoZto4= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b="d7l3I/9/"; spf=none (imf18.hostedemail.com: domain of BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=BATV+341917c36a2da2958cd5+7894+infradead.org+dwmw2@desiato.srs.infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782412; a=rsa-sha256; cv=none; b=in6UTSYr0zwi/A/G6WeTcua7CYynPqKu1M5heI373hTpf6f7+ILaKaZaDcXMuHnOM0/BW8 oStMcqu0O5U+/PpGHncnHG00M4+LUw3j0C0hBXw5J13T4IUimDpungcKCc0CQrGOnJWj62 nRLQC8cDdoHeW0aTdP4aEnZxX5W65es= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=SAQbWjWGGmEWV/yrGcgLnMo50LiJ5Xc9HvWor5bjKpE=; b=d7l3I/9/QLogRFJbAFJpwKuy6H B0t3Z7Upm6Db3cxysxtEATptTKPyFIjrvR1IiTqa6fj8zd+dQ8qw/mYXmi9eramZYOT01xjsBr9gv g3S8NHQZZWom5Th4kzq6dixygw3CD0iPWHeYGA+zJcTe5SD91Taidj9jqPX5gJFJP4ueN+seQocDD jPgCHdxWYs/rmNqy4h+MUxbebrc9j5fMAou3iLqAwi6nhlq91/43pUrP3Nh2E91NbF/NfMzh1yd1o cmGSfeUGIxkQ2VCvR8WSn2FWLQC/FlgQVqNRFhNpjyGM/f89o/R33M7cx3j005R7UGgMZUqNNonCz 5OSe/p9g==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by desiato.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSc-00000007QOz-0XcV; Fri, 04 Apr 2025 16:00:02 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERSQ-40aW; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 6/7] mm, x86: Use for_each_valid_pfn() from __ioremap_check_ram() Date: Fri, 4 Apr 2025 16:59:58 +0100 Message-ID: <20250404155959.3442111-6-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250404155959.3442111-1-dwmw2@infradead.org> References: <20250404155959.3442111-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by desiato.infradead.org. See http://www.infradead.org/rpr.html X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: E5BA91C0005 X-Stat-Signature: dbbjcfwdcmbt5yxgstfu9adg1trp3t9u X-HE-Tag: 1743782411-57594 X-HE-Meta: U2FsdGVkX19KFA/D58RJLf4fSmBrUVspjCD91KIlAonRFNilBXZHTFh36TWgQZlhFV/RnlGbJenxs50xhU8dy0ecJMQBRrsrnNWhICOuqQ4QcCw8x4PHsdbHFj/eY11Slo1JXhQV3Hb5FDMvkDvzdsCZw0Q7ekWnT3s8DFibLzkawvt9TigFGNkomEKDsv5quQo6xOKc5oPFjKVZppMr7tZFz7gmIOGnnoRtWk1SltumpwKAOkQGiTo5GbeYP6HV2J3xpu8Oj/+xmEfmKxGdCVMu16/zksjwLVSXbQesacwvtnbmeQokKnBSUDyo8lru8+g+Lz3gyyPUYKWDGxUNTtgwY93DIx02LQJBjlw5mc+Kwj2FaPl7fkLnYiRwd61ZLFBMfVuZHUV6Lnt22z/tYkOSxZmYqmSOY2S0yRaPr78CVOBD/opn0ynXjy8TIB+Fc22ervvwtxAUeNYm1iwG98alg3FX2fhPRNZ108+mFi8c1oBsLRyj1f1oXXvYd1j0qlH8OkQ9YylZSj58N5AEtH6gvL/Gz4oN2PO6uzpGD9vI/xNfG+aZXnzfotlDVW4Kh5H3JXa0NEROosCKEfKwEFdHaP2HKtnk8ECnUHj0WiEK7FR8+v0kOhyzP11nzrxAri3KkPWk8f38cY4oG0ffbuE4H4pPILOeI80Q+Cop74tKjEpYKimvGj54Vr0pLRdieIrWB1xhRYRDjp6rTGRZpnmVLLaKBT80cCaIurlxpdh7jk8/KzORD32uO5VnCSb+9uhBtn6P70gXTPZQiRgUViFYft9B7fFkoxuT+GfIGL1bSvVba5Eql0Fn0wqMdhjgABU2UroLWCnWVPNWYaWAIXrjpI9jqvltlhxPb0OwXQ/JXy2zsQ93GObtrjtNrpLYVnaywMO0ARZ4G+oA1GF2ijOBn+rL0zcqCI7kbmepb/qItLVcNFoOn7H8PDmhTJoahCHP6xSJZzdz2BJBIw0 xSTeYJfz F16pqI8RDjzjaDCNlt4jZjjHAbwZb/G4ExUro7RtZgBqUiCpgt6zAlysASUjXohn88ZkqiCF5nXhCoPssXo6J/U6NSaVlGnIsi+dGCmdStkFVDMx5+83qVmQ7kkkSh6KFDSkzfRF0CAapRAlu9Wfp9Qy7R3GO2NjoEZF/oDfTdqZCMEAsk6WMCOPItj8bFGdovg+QF3aWmDK1eCLtBCIF2ikGZ8Fbhm57TxBnDU+ORWB01kw7MULEzWMYFUdciICtLtqXmSp1mE9EAqs4l6ecLCHgxPPdmQiFXOji/Vz7Yl0WfJx+p+Vt8166R6HESZpavN3TwQHB9xzpNRSS48dyOt0brN54X6DAVrUzpdiGMvNrSDHpnMZmHJ05iKMM/jrGgd3lop9Ierw6OF7KM0WnU5SPR6i/NObwc9li8MZLVGw/FGyJMunrDmg1tH3XOemHvzHX0p3WTxcxpNXRR60V8C+DIM2zj0koMoWAwX6fVMWdF658agki+Ezs8sEYGf6egZYOmcwvv6Eb9a2ixWsD9LmTYy4W8ht45/98 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: From: David Woodhouse Instead of calling pfn_valid() separately for every single PFN in the range, use for_each_valid_pfn() and only look at the ones which are. Signed-off-by: David Woodhouse --- arch/x86/mm/ioremap.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 331e101bf801..12c8180ca1ba 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -71,7 +71,7 @@ int ioremap_change_attr(unsigned long vaddr, unsigned long size, static unsigned int __ioremap_check_ram(struct resource *res) { unsigned long start_pfn, stop_pfn; - unsigned long i; + unsigned long pfn; if ((res->flags & IORESOURCE_SYSTEM_RAM) != IORESOURCE_SYSTEM_RAM) return 0; @@ -79,9 +79,8 @@ static unsigned int __ioremap_check_ram(struct resource *res) start_pfn = (res->start + PAGE_SIZE - 1) >> PAGE_SHIFT; stop_pfn = (res->end + 1) >> PAGE_SHIFT; if (stop_pfn > start_pfn) { - for (i = 0; i < (stop_pfn - start_pfn); ++i) - if (pfn_valid(start_pfn + i) && - !PageReserved(pfn_to_page(start_pfn + i))) + for_each_valid_pfn(pfn, start_pfn, stop_pfn) + if (!PageReserved(pfn_to_page(pfn))) return IORES_MAP_SYSTEM_RAM; } From patchwork Fri Apr 4 15:59:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Woodhouse X-Patchwork-Id: 14038661 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 4389AC3601A for ; Fri, 4 Apr 2025 16:01:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 943946B0008; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8AE276B000C; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 615CB6B000D; Fri, 4 Apr 2025 12:01:55 -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 40E876B000A for ; Fri, 4 Apr 2025 12:01:55 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 027C5B771B for ; Fri, 4 Apr 2025 16:01:55 +0000 (UTC) X-FDA: 83296827432.25.DF31C5F Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf12.hostedemail.com (Postfix) with ESMTP id 4322640021 for ; Fri, 4 Apr 2025 16:01:52 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="rcQ/TZXn"; dmarc=none; spf=none (imf12.hostedemail.com: domain of BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743782513; a=rsa-sha256; cv=none; b=pHItXPFgHk+g219fStzuoJ+lV+LPGsp3CGHdT1Z54jeZR3UGkBS0JZHCGpGzYHvfCfF0/t 6KjKcoGedwW3adq1/MXCgGnGLGJdEv7ZBUmn8+JXUQVcg549xZu2CjHS15VZ008/EGRS3d sM+62FaOOWVoKMehvr2r360H7T6SzaE= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b="rcQ/TZXn"; dmarc=none; spf=none (imf12.hostedemail.com: domain of BATV+be2fdb05a07bd611d225+7894+infradead.org+dwmw2@casper.srs.infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=BATV+be2fdb05a07bd611d225+7894+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=1743782513; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=zwrAwVynWffEuxKPl0OEyEEBjA9QOQig2FF2bzdhEpA=; b=J663a1suryPtjNb6DvG/LGxWxlZISAzamZ4pIVPRDyVwVO1jwC1cJ94LLxI/XAxvtZGxnv L+VkFLj0bWNrvElU52v9cJRqx9AI2ljJ56zamm5dCthwWMpdbD2OmcFyscqXuHZbQ+g1/j /kbNi3o10rx6C3yUVnCUWlMfcMHfiA8= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=zwrAwVynWffEuxKPl0OEyEEBjA9QOQig2FF2bzdhEpA=; b=rcQ/TZXnLakdQxL4crd49SXX3c edNsEOVe5KuObd9N9FvHOyENAzG1hCUGVegfPjAUI+DESeHQ2QnvFHahouiLIKJXGm/9RbMSGbECY 3H7F9hOPYEdMTiEfgcGsbG7aWDxhy3ZY9WqpRK44a5vaJHV37Lx6OginK6lDUrp+urL++BV2mtbH5 p+ZFyzIAKAcSjEt2BvR0qBo1O4L3+1RqPBeKcN2MGAKLhzlFZ2wIbiVn+ohK9/LZ1v86JEJ+uw17N 4zNZ8gbxTQmZ4FYx30Cw1FcflV3mnJKiulvzObmjLOk24f6Y0o78MuVRM7S5DrvoDrcue1z65zfMb chjOXhaA==; Received: from [2001:8b0:10b:1::ebe] (helo=i7.infradead.org) by casper.infradead.org with esmtpsa (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSa-0000000GFHw-3A3Z; Fri, 04 Apr 2025 16:01:01 +0000 Received: from dwoodhou by i7.infradead.org with local (Exim 4.98.1 #2 (Red Hat Linux)) id 1u0jSZ-0000000ERST-48Ac; Fri, 04 Apr 2025 16:59:59 +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 Subject: [RFC PATCH v2 7/7] mm: use for_each_valid_pfn() in memory_hotplug Date: Fri, 4 Apr 2025 16:59:59 +0100 Message-ID: <20250404155959.3442111-7-dwmw2@infradead.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250404155959.3442111-1-dwmw2@infradead.org> References: <20250404155959.3442111-1-dwmw2@infradead.org> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 4322640021 X-Stat-Signature: wdg87u9dsxck1ocrpwut1r1tqzif9i1n X-HE-Tag: 1743782512-132928 X-HE-Meta: U2FsdGVkX1+Oo/2IIQXE6tjhFMgZer5857zfxdNmrrjnq644vf813FwI17M8XlbI3+MPbe76U7f3AaRwuVChT3j2wbkaXoBkANEaa6c6Rr0K8SZkEN00+fhOM99A2mDtOoji3FBiAIQJYBoo5fokzZa+GUviQSQEY59205/aN76TiSoW6mUbfEirMZg25a/UbkPI5NxtJ3Z/6dNy6PrQX/2ytQ/4IAeEcbFweSUmn6mGYEA9rxGK0aHw7Mwtb/q+NA8MUmLcUvEunojpD4vKoH70pxxTgSKhm3q3JnH8gOUG4cOzl9zKhY7lLLeoAni+CpVGj0lu+QgLid+Jgd64KIijuTyT/lN4Ncfj5aSRJa1Y8WnVESf1C8j8nDGKZ/jdOyES2MZFhBb1DsX6vMOm8CH0kuTglt989vR79NJZCxOInlwz3XGk9m58lq8xyK5wpWeoNlOvf9gle813qykhihK3lrV+DXGiGTBXki3SG+/f+VCYtWOkXiNlWE6T/910+lE91yUG898uYV24LHwdcmqk8wRZjiDTWKHbP3CevHxyoaVSLyznOgXcxSfnlCTk+P2mRhltn7b808TMi4TkZsgq73j7fWrk9a28e4z7kIqZugu7Kq0pYz9nvSH+BK6Q6ci+3XTt/Wlsctc6viU8P8NmS9DSL7isDfAMFhO3by4iYU5a95FWeb4fmPl+nWze/0VHMx+m0npqe7swfEXm5WXEWLIgdbky/LgjKVLek5yxlKcBhCHMd4wgR6ku0W2BZZDYOvzBJk+k2FG48YJuH9PzZb6grT2qNdDJ4egXlpjLYo2L+H/ArA3rDXNWkg8UShTtw+CBP94UOzVXIpYp1b78rFvsngIZqozs5IA0pBBMm0g47WA8TZyig2MnjqpNE/TMmCbKHwHsM+DlUOMQSrt3YB4Z5CnQU+uHJ7W+ufAelBfP2Kd6L5uLT+pvEHc/7h7hXUMoRym/5CMloXY 1qI51Ui3 /PakcblMDCPuWdt5AI3mgSnJJAf4+KXuHWrBlmhcbDJM1XhQWpFSzDGjJMqvh9ThL13BTGQR/KPDt5lLXw9T2HCRg0oFUbqNnfNcisFMYxk3X0ZYWkNrB8LPuym40gdX+GgCXzXnu1tLvMxC9LV9YK1iYTnzHeGKatzxZMsgdQDzTI5zmreSnu47zVQDGCJd7w6mBastCDbdpGWYr38L9W/mwq1b3X7mLJHI7G89sZ0Ag2Nw8dR09rMCM1/whUXHaS4d/Pv8542Igz2vDZkwsj3Pu04+i2GBUnlvQZyvnGUMTlz5LUvaEfxU9X54vYgkFHurGOwn7DrYIKGU1nNn+vHK0M6Z3zqqYrd/DAG+MSOGEl0yO3s3twXigDr5WCU+M4emXSxRIKDvReLz2YZrdTcNPuE7kqInH2+ev/GRrswYnYsb5eeIoxJnhWQGN5TI5jfx4R85iKROgqMERRQu8OCoYJJ6vefg00RrKdL0jvLDgvTq92rvwC5SNh78YHXyzRYNXArEtZfATZvAvouHpz4xB+Ch4X6ZjdvDz 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: From: David Woodhouse Signed-off-by: David Woodhouse --- mm/memory_hotplug.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 75401866fb76..20c39ae45016 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1756,12 +1756,10 @@ static int scan_movable_pages(unsigned long start, unsigned long end, { unsigned long pfn; - for (pfn = start; pfn < end; pfn++) { + for_each_valid_pfn (pfn, start, end) { struct page *page; struct folio *folio; - if (!pfn_valid(pfn)) - continue; page = pfn_to_page(pfn); if (PageLRU(page)) goto found; @@ -1805,11 +1803,9 @@ static void do_migrate_range(unsigned long start_pfn, unsigned long end_pfn) static DEFINE_RATELIMIT_STATE(migrate_rs, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST); - for (pfn = start_pfn; pfn < end_pfn; pfn++) { + for_each_valid_pfn (pfn, start_pfn, end_pfn) { struct page *page; - if (!pfn_valid(pfn)) - continue; page = pfn_to_page(pfn); folio = page_folio(page);