Skip to content

Commit cc6de16

Browse files
rppttorvalds
authored andcommitted
memblock: use separate iterators for memory and reserved regions
for_each_memblock() is used to iterate over memblock.memory in a few places that use data from memblock_region rather than the memory ranges. Introduce separate for_each_mem_region() and for_each_reserved_mem_region() to improve encapsulation of memblock internals from its users. Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Baoquan He <bhe@redhat.com> Acked-by: Ingo Molnar <mingo@kernel.org> [x86] Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> [MIPS] Acked-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> [.clang-format] Cc: Andy Lutomirski <luto@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Daniel Axtens <dja@axtens.net> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Emil Renner Berthing <kernel@esmil.dk> Cc: Hari Bathini <hbathini@linux.ibm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Simek <monstr@monstr.eu> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Russell King <linux@armlinux.org.uk> Cc: Stafford Horne <shorne@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Deacon <will@kernel.org> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Link: https://lkml.kernel.org/r/20200818151634.14343-18-rppt@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 9f3d5ea commit cc6de16

9 files changed

Lines changed: 29 additions & 15 deletions

File tree

.clang-format

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ ForEachMacros:
203203
- 'for_each_matching_node'
204204
- 'for_each_matching_node_and_match'
205205
- 'for_each_member'
206-
- 'for_each_memblock'
206+
- 'for_each_mem_region'
207207
- 'for_each_memblock_type'
208208
- 'for_each_memcg_cache_index'
209209
- 'for_each_mem_pfn_range'
@@ -274,6 +274,7 @@ ForEachMacros:
274274
- 'for_each_requested_gpio'
275275
- 'for_each_requested_gpio_in_range'
276276
- 'for_each_reserved_mem_range'
277+
- 'for_each_reserved_mem_region'
277278
- 'for_each_rtd_codec_dais'
278279
- 'for_each_rtd_codec_dais_rollback'
279280
- 'for_each_rtd_components'

arch/arm64/kernel/setup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ static void __init request_standard_resources(void)
217217
if (!standard_resources)
218218
panic("%s: Failed to allocate %zu bytes\n", __func__, res_size);
219219

220-
for_each_memblock(memory, region) {
220+
for_each_mem_region(region) {
221221
res = &standard_resources[i++];
222222
if (memblock_is_nomap(region)) {
223223
res->name = "reserved";

arch/arm64/mm/numa.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ static int __init numa_register_nodes(void)
354354
struct memblock_region *mblk;
355355

356356
/* Check that valid nid is set to memblks */
357-
for_each_memblock(memory, mblk) {
357+
for_each_mem_region(mblk) {
358358
int mblk_nid = memblock_get_region_node(mblk);
359359

360360
if (mblk_nid == NUMA_NO_NODE || mblk_nid >= MAX_NUMNODES) {

arch/mips/netlogic/xlp/setup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static void nlm_fixup_mem(void)
7070
const int pref_backup = 512;
7171
struct memblock_region *mem;
7272

73-
for_each_memblock(memory, mem) {
73+
for_each_mem_region(mem) {
7474
memblock_remove(mem->base + mem->size - pref_backup,
7575
pref_backup);
7676
}

arch/riscv/mm/init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ static void __init resource_init(void)
531531
{
532532
struct memblock_region *region;
533533

534-
for_each_memblock(memory, region) {
534+
for_each_mem_region(region) {
535535
struct resource *res;
536536

537537
res = memblock_alloc(sizeof(struct resource), SMP_CACHE_BYTES);

arch/x86/mm/numa.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
514514
* memory ranges, because quirks such as trim_snb_memory()
515515
* reserve specific pages for Sandy Bridge graphics. ]
516516
*/
517-
for_each_memblock(reserved, mb_region) {
517+
for_each_reserved_mem_region(mb_region) {
518518
int nid = memblock_get_region_node(mb_region);
519519

520520
if (nid != MAX_NUMNODES)

include/linux/memblock.h

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -553,9 +553,22 @@ static inline unsigned long memblock_region_reserved_end_pfn(const struct memblo
553553
return PFN_UP(reg->base + reg->size);
554554
}
555555

556-
#define for_each_memblock(memblock_type, region) \
557-
for (region = memblock.memblock_type.regions; \
558-
region < (memblock.memblock_type.regions + memblock.memblock_type.cnt); \
556+
/**
557+
* for_each_mem_region - itereate over memory regions
558+
* @region: loop variable
559+
*/
560+
#define for_each_mem_region(region) \
561+
for (region = memblock.memory.regions; \
562+
region < (memblock.memory.regions + memblock.memory.cnt); \
563+
region++)
564+
565+
/**
566+
* for_each_reserved_mem_region - itereate over reserved memory regions
567+
* @region: loop variable
568+
*/
569+
#define for_each_reserved_mem_region(region) \
570+
for (region = memblock.reserved.regions; \
571+
region < (memblock.reserved.regions + memblock.reserved.cnt); \
559572
region++)
560573

561574
extern void *alloc_large_system_hash(const char *tablename,

mm/memblock.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,7 +1667,7 @@ static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)
16671667
* the memory memblock regions, if the @limit exceeds the total size
16681668
* of those regions, max_addr will keep original value PHYS_ADDR_MAX
16691669
*/
1670-
for_each_memblock(memory, r) {
1670+
for_each_mem_region(r) {
16711671
if (limit <= r->size) {
16721672
max_addr = r->base + limit;
16731673
break;
@@ -1837,7 +1837,7 @@ void __init_memblock memblock_trim_memory(phys_addr_t align)
18371837
phys_addr_t start, end, orig_start, orig_end;
18381838
struct memblock_region *r;
18391839

1840-
for_each_memblock(memory, r) {
1840+
for_each_mem_region(r) {
18411841
orig_start = r->base;
18421842
orig_end = r->base + r->size;
18431843
start = round_up(orig_start, align);

mm/page_alloc.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5961,7 +5961,7 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn)
59615961

59625962
if (mirrored_kernelcore && zone == ZONE_MOVABLE) {
59635963
if (!r || *pfn >= memblock_region_memory_end_pfn(r)) {
5964-
for_each_memblock(memory, r) {
5964+
for_each_mem_region(r) {
59655965
if (*pfn < memblock_region_memory_end_pfn(r))
59665966
break;
59675967
}
@@ -6546,7 +6546,7 @@ static unsigned long __init zone_absent_pages_in_node(int nid,
65466546
unsigned long start_pfn, end_pfn;
65476547
struct memblock_region *r;
65486548

6549-
for_each_memblock(memory, r) {
6549+
for_each_mem_region(r) {
65506550
start_pfn = clamp(memblock_region_memory_base_pfn(r),
65516551
zone_start_pfn, zone_end_pfn);
65526552
end_pfn = clamp(memblock_region_memory_end_pfn(r),
@@ -7140,7 +7140,7 @@ static void __init find_zone_movable_pfns_for_nodes(void)
71407140
* options.
71417141
*/
71427142
if (movable_node_is_enabled()) {
7143-
for_each_memblock(memory, r) {
7143+
for_each_mem_region(r) {
71447144
if (!memblock_is_hotpluggable(r))
71457145
continue;
71467146

@@ -7161,7 +7161,7 @@ static void __init find_zone_movable_pfns_for_nodes(void)
71617161
if (mirrored_kernelcore) {
71627162
bool mem_below_4gb_not_mirrored = false;
71637163

7164-
for_each_memblock(memory, r) {
7164+
for_each_mem_region(r) {
71657165
if (memblock_is_mirror(r))
71667166
continue;
71677167

0 commit comments

Comments
 (0)