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 X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5084C4345A for ; Tue, 28 Jul 2020 05:14:14 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6A9C622B48 for ; Tue, 28 Jul 2020 05:14:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="zI6O4WxG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6A9C622B48 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 15ED78D000C; Tue, 28 Jul 2020 01:14:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 110428D0002; Tue, 28 Jul 2020 01:14:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EA29D8D000C; Tue, 28 Jul 2020 01:14:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0177.hostedemail.com [216.40.44.177]) by kanga.kvack.org (Postfix) with ESMTP id D3CC68D0002 for ; Tue, 28 Jul 2020 01:14:13 -0400 (EDT) Received: from smtpin02.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 893A5181AC9B6 for ; Tue, 28 Jul 2020 05:14:13 +0000 (UTC) X-FDA: 77086318386.02.coil67_5d04a6a26f67 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin02.hostedemail.com (Postfix) with ESMTP id 61E3210097AA3 for ; Tue, 28 Jul 2020 05:14:13 +0000 (UTC) X-HE-Tag: coil67_5d04a6a26f67 X-Filterd-Recvd-Size: 11670 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by imf34.hostedemail.com (Postfix) with ESMTP for ; Tue, 28 Jul 2020 05:14:12 +0000 (UTC) Received: from aquarius.haifa.ibm.com (nesher1.haifa.il.ibm.com [195.110.40.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id AE1BB2177B; Tue, 28 Jul 2020 05:14:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1595913252; bh=bF6u1b2xSJfR5LFcmr0wMIvbICUVRWRo3SVxT3/BRkA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zI6O4WxGRHtN69TBHy6P1q7jtlTY61K+2UeaGKxUPdpVjDPb59Zh5VVyy9qmeOtXI yD6PMQi5AAzFDxeV8MvEVlVNU9NQbubABmx0w898OV9szgIG4ym3AfVG9IIh1boSMa LlBz47EyMi2hkAVTdRGR5MxaWlSQegTXZTFeCqjw= From: Mike Rapoport To: Andrew Morton Cc: Andy Lutomirski , Benjamin Herrenschmidt , Borislav Petkov , Catalin Marinas , Christoph Hellwig , Dave Hansen , Ingo Molnar , Marek Szyprowski , Max Filippov , Michael Ellerman , Michal Simek , Mike Rapoport , Mike Rapoport , Palmer Dabbelt , Paul Mackerras , Paul Walmsley , Peter Zijlstra , Russell King , Stafford Horne , Thomas Gleixner , Will Deacon , Yoshinori Sato , clang-built-linux@googlegroups.com, iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org, linux-c6x-dev@linux-c6x.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linux-xtensa@linux-xtensa.org, linuxppc-dev@lists.ozlabs.org, openrisc@lists.librecores.org, sparclinux@vger.kernel.org, uclinux-h8-devel@lists.sourceforge.jp, x86@kernel.org Subject: [PATCH 12/15] arch, mm: replace for_each_memblock() with for_each_mem_pfn_range() Date: Tue, 28 Jul 2020 08:11:50 +0300 Message-Id: <20200728051153.1590-13-rppt@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200728051153.1590-1-rppt@kernel.org> References: <20200728051153.1590-1-rppt@kernel.org> MIME-Version: 1.0 X-Rspamd-Queue-Id: 61E3210097AA3 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam02 Content-Transfer-Encoding: quoted-printable 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: From: Mike Rapoport There are several occurrences of the following pattern: for_each_memblock(memory, reg) { start_pfn =3D memblock_region_memory_base_pfn(reg); end_pfn =3D memblock_region_memory_end_pfn(reg); /* do something with start_pfn and end_pfn */ } Rather than iterate over all memblock.memory regions and each time query for their start and end PFNs, use for_each_mem_pfn_range() iterator to ge= t simpler and clearer code. Signed-off-by: Mike Rapoport --- arch/arm/mm/init.c | 11 ++++------- arch/arm64/mm/init.c | 11 ++++------- arch/powerpc/kernel/fadump.c | 11 ++++++----- arch/powerpc/mm/mem.c | 15 ++++++++------- arch/powerpc/mm/numa.c | 7 ++----- arch/s390/mm/page-states.c | 6 ++---- arch/sh/mm/init.c | 9 +++------ mm/memblock.c | 6 ++---- mm/sparse.c | 10 ++++------ 9 files changed, 35 insertions(+), 51 deletions(-) diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 626af348eb8f..bb56668b4f54 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -304,16 +304,14 @@ free_memmap(unsigned long start_pfn, unsigned long = end_pfn) */ static void __init free_unused_memmap(void) { - unsigned long start, prev_end =3D 0; - struct memblock_region *reg; + unsigned long start, end, prev_end =3D 0; + int i; =20 /* * This relies on each bank being in address order. * The banks are sorted previously in bootmem_init(). */ - for_each_memblock(memory, reg) { - start =3D memblock_region_memory_base_pfn(reg); - + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start, &end, NULL) { #ifdef CONFIG_SPARSEMEM /* * Take care not to free memmap entries that don't exist @@ -341,8 +339,7 @@ static void __init free_unused_memmap(void) * memmap entries are valid from the bank end aligned to * MAX_ORDER_NR_PAGES. */ - prev_end =3D ALIGN(memblock_region_memory_end_pfn(reg), - MAX_ORDER_NR_PAGES); + prev_end =3D ALIGN(end, MAX_ORDER_NR_PAGES); } =20 #ifdef CONFIG_SPARSEMEM diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 1e93cfc7c47a..271a8ea32482 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -473,12 +473,10 @@ static inline void free_memmap(unsigned long start_= pfn, unsigned long end_pfn) */ static void __init free_unused_memmap(void) { - unsigned long start, prev_end =3D 0; - struct memblock_region *reg; - - for_each_memblock(memory, reg) { - start =3D __phys_to_pfn(reg->base); + unsigned long start, end, prev_end =3D 0; + int i; =20 + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start, &end, NULL) { #ifdef CONFIG_SPARSEMEM /* * Take care not to free memmap entries that don't exist due @@ -498,8 +496,7 @@ static void __init free_unused_memmap(void) * memmap entries are valid from the bank end aligned to * MAX_ORDER_NR_PAGES. */ - prev_end =3D ALIGN(__phys_to_pfn(reg->base + reg->size), - MAX_ORDER_NR_PAGES); + prev_end =3D ALIGN(end, MAX_ORDER_NR_PAGES); } =20 #ifdef CONFIG_SPARSEMEM diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c index 2446a61e3c25..fdbafe417139 100644 --- a/arch/powerpc/kernel/fadump.c +++ b/arch/powerpc/kernel/fadump.c @@ -1216,14 +1216,15 @@ static void fadump_free_reserved_memory(unsigned = long start_pfn, */ static void fadump_release_reserved_area(u64 start, u64 end) { - u64 tstart, tend, spfn, epfn; - struct memblock_region *reg; + u64 tstart, tend, spfn, epfn, reg_spfn, reg_epfn, i; =20 spfn =3D PHYS_PFN(start); epfn =3D PHYS_PFN(end); - for_each_memblock(memory, reg) { - tstart =3D max_t(u64, spfn, memblock_region_memory_base_pfn(reg)); - tend =3D min_t(u64, epfn, memblock_region_memory_end_pfn(reg)); + + for_each_mem_pfn_range(i, NUMA_NO_NODE, ®_spfn, ®_epfn, NULL) { + tstart =3D max_t(u64, spfn, reg_spfn); + tend =3D min_t(u64, epfn, reg_epfn); + if (tstart < tend) { fadump_free_reserved_memory(tstart, tend); =20 diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index c2c11eb8dcfc..38d1acd7c8ef 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -192,15 +192,16 @@ void __init initmem_init(void) /* mark pages that don't exist as nosave */ static int __init mark_nonram_nosave(void) { - struct memblock_region *reg, *prev =3D NULL; + unsigned long spfn, epfn, prev =3D 0; + int i; =20 - for_each_memblock(memory, reg) { - if (prev && - memblock_region_memory_end_pfn(prev) < memblock_region_memory_base= _pfn(reg)) - register_nosave_region(memblock_region_memory_end_pfn(prev), - memblock_region_memory_base_pfn(reg)); - prev =3D reg; + for_each_mem_pfn_range(i, NUMA_NO_NODE, &spfn, &epfn, NULL) { + if (prev && prev < spfn) + register_nosave_region(prev, spfn); + + prev =3D epfn; } + return 0; } #else /* CONFIG_NEED_MULTIPLE_NODES */ diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 9fcf2d195830..53254afae725 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -800,17 +800,14 @@ static void __init setup_nonnuma(void) unsigned long total_ram =3D memblock_phys_mem_size(); unsigned long start_pfn, end_pfn; unsigned int nid =3D 0; - struct memblock_region *reg; + int i; =20 printk(KERN_DEBUG "Top of RAM: 0x%lx, Total RAM: 0x%lx\n", top_of_ram, total_ram); printk(KERN_DEBUG "Memory hole size: %ldMB\n", (top_of_ram - total_ram) >> 20); =20 - for_each_memblock(memory, reg) { - start_pfn =3D memblock_region_memory_base_pfn(reg); - end_pfn =3D memblock_region_memory_end_pfn(reg); - + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start_pfn, &end_pfn, NULL) { fake_numa_create_new_node(end_pfn, &nid); memblock_set_node(PFN_PHYS(start_pfn), PFN_PHYS(end_pfn - start_pfn), diff --git a/arch/s390/mm/page-states.c b/arch/s390/mm/page-states.c index fc141893d028..8909f7b7b053 100644 --- a/arch/s390/mm/page-states.c +++ b/arch/s390/mm/page-states.c @@ -183,9 +183,9 @@ static void mark_kernel_pgd(void) =20 void __init cmma_init_nodat(void) { - struct memblock_region *reg; struct page *page; unsigned long start, end, ix; + int i; =20 if (cmma_flag < 2) return; @@ -193,9 +193,7 @@ void __init cmma_init_nodat(void) mark_kernel_pgd(); =20 /* Set all kernel pages not used for page tables to stable/no-dat */ - for_each_memblock(memory, reg) { - start =3D memblock_region_memory_base_pfn(reg); - end =3D memblock_region_memory_end_pfn(reg); + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start, &end, NULL) { page =3D pfn_to_page(start); for (ix =3D start; ix < end; ix++, page++) { if (__test_and_clear_bit(PG_arch_1, &page->flags)) diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 62b8f03ffc80..398ee363e3e3 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c @@ -224,15 +224,12 @@ void __init allocate_pgdat(unsigned int nid) =20 static void __init do_init_bootmem(void) { - struct memblock_region *reg; + unsigned long start_pfn, end_pfn; + int i; =20 /* Add active regions with valid PFNs. */ - for_each_memblock(memory, reg) { - unsigned long start_pfn, end_pfn; - start_pfn =3D memblock_region_memory_base_pfn(reg); - end_pfn =3D memblock_region_memory_end_pfn(reg); + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start_pfn, &end_pfn, NULL) __add_active_range(0, start_pfn, end_pfn); - } =20 /* All of system RAM sits in node 0 for the non-NUMA case */ allocate_pgdat(0); diff --git a/mm/memblock.c b/mm/memblock.c index 824938849f6d..2ad5e6e47215 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1659,12 +1659,10 @@ phys_addr_t __init_memblock memblock_reserved_siz= e(void) phys_addr_t __init memblock_mem_size(unsigned long limit_pfn) { unsigned long pages =3D 0; - struct memblock_region *r; unsigned long start_pfn, end_pfn; + int i; =20 - for_each_memblock(memory, r) { - start_pfn =3D memblock_region_memory_base_pfn(r); - end_pfn =3D memblock_region_memory_end_pfn(r); + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start_pfn, &end_pfn, NULL) { start_pfn =3D min_t(unsigned long, start_pfn, limit_pfn); end_pfn =3D min_t(unsigned long, end_pfn, limit_pfn); pages +=3D end_pfn - start_pfn; diff --git a/mm/sparse.c b/mm/sparse.c index b2b9a3e34696..8bdaddb40453 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -292,13 +292,11 @@ void __init memory_present(int nid, unsigned long s= tart, unsigned long end) */ void __init memblocks_present(void) { - struct memblock_region *reg; + unsigned long start, end; + int i, nid; =20 - for_each_memblock(memory, reg) { - memory_present(memblock_get_region_node(reg), - memblock_region_memory_base_pfn(reg), - memblock_region_memory_end_pfn(reg)); - } + for_each_mem_pfn_range(i, NUMA_NO_NODE, &start, &end, &nid) + memory_present(nid, start, end); } =20 /* --=20 2.26.2