Re: [PATCH 13/15] arch, drivers: replace for_each_membock() with for_each_mem_range()
On Tue, 28 Jul 2020, 07:16 Mike Rapoport, wrote: > From: Mike Rapoport > > There are several occurrences of the following pattern: > > for_each_memblock(memory, reg) { > start = __pfn_to_phys(memblock_region_memory_base_pfn(reg); > end = __pfn_to_phys(memblock_region_memory_end_pfn(reg)); > > /* do something with start and end */ > } > > Using for_each_mem_range() iterator is more appropriate in such cases and > allows simpler and cleaner code. > > Signed-off-by: Mike Rapoport > --- > arch/arm/kernel/setup.c | 18 +++ > arch/arm/mm/mmu.c| 39 > arch/arm/mm/pmsa-v7.c| 20 ++-- > arch/arm/mm/pmsa-v8.c| 17 +-- > arch/arm/xen/mm.c| 7 +++-- > arch/arm64/mm/kasan_init.c | 8 ++--- > arch/arm64/mm/mmu.c | 11 ++- > arch/c6x/kernel/setup.c | 9 +++--- > arch/microblaze/mm/init.c| 9 +++--- > arch/mips/cavium-octeon/dma-octeon.c | 12 > arch/mips/kernel/setup.c | 31 +-- > arch/openrisc/mm/init.c | 8 +++-- > arch/powerpc/kernel/fadump.c | 27 +++- > arch/powerpc/mm/book3s64/hash_utils.c| 16 +- > arch/powerpc/mm/book3s64/radix_pgtable.c | 11 +++ > arch/powerpc/mm/kasan/kasan_init_32.c| 8 ++--- > arch/powerpc/mm/mem.c| 16 ++ > arch/powerpc/mm/pgtable_32.c | 8 ++--- > arch/riscv/mm/init.c | 24 ++- > arch/riscv/mm/kasan_init.c | 10 +++--- > arch/s390/kernel/setup.c | 27 ++-- > arch/s390/mm/vmem.c | 16 +- > arch/sparc/mm/init_64.c | 12 +++- > drivers/bus/mvebu-mbus.c | 12 > drivers/s390/char/zcore.c| 9 +++--- > 25 files changed, 187 insertions(+), 198 deletions(-) > > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > index d8e18cdd96d3..3f65d0ac9f63 100644 > --- a/arch/arm/kernel/setup.c > +++ b/arch/arm/kernel/setup.c > @@ -843,19 +843,25 @@ early_param("mem", early_mem); > > static void __init request_standard_resources(const struct machine_desc > *mdesc) > { > - struct memblock_region *region; > + phys_addr_t start, end, res_end; > struct resource *res; > + u64 i; > > kernel_code.start = virt_to_phys(_text); > kernel_code.end = virt_to_phys(__init_begin - 1); > kernel_data.start = virt_to_phys(_sdata); > kernel_data.end = virt_to_phys(_end - 1); > > - for_each_memblock(memory, region) { > - phys_addr_t start = > __pfn_to_phys(memblock_region_memory_base_pfn(region)); > - phys_addr_t end = > __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; > + for_each_mem_range(i, &start, &end) { > unsigned long boot_alias_start; > > + /* > +* In memblock, end points to the first byte after the > +* range while in resourses, end points to the last byte in > +* the range. > +*/ > + res_end = end - 1; > + > /* > * Some systems have a special memory alias which is only > * used for booting. We need to advertise this region to > @@ -869,7 +875,7 @@ static void __init request_standard_resources(const > struct machine_desc *mdesc) > __func__, sizeof(*res)); > res->name = "System RAM (boot alias)"; > res->start = boot_alias_start; > - res->end = phys_to_idmap(end); > + res->end = phys_to_idmap(res_end); > res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; > request_resource(&iomem_resource, res); > } > @@ -880,7 +886,7 @@ static void __init request_standard_resources(const > struct machine_desc *mdesc) > sizeof(*res)); > res->name = "System RAM"; > res->start = start; > - res->end = end; > + res->end = res_end; > res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; > > request_resource(&iomem_resource, res); > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > index 628028bfbb92..a149d9cb4fdb 100644 > --- a/arch/arm/mm/mmu.c > +++ b/arch/arm/mm/mmu.c > @@ -1155,9 +1155,8 @@ phys_addr_t arm_lowmem_limit __initdata = 0; > > void __init adjust_lowmem_bounds(void) > { > - phys_addr_t memblock_limit = 0; > - u64 vmalloc_limit; > - struct memblock_region *reg; > + phys_addr_t block_start, block_end, memb
[PATCH 13/15] arch, drivers: replace for_each_membock() with for_each_mem_range()
From: Mike Rapoport There are several occurrences of the following pattern: for_each_memblock(memory, reg) { start = __pfn_to_phys(memblock_region_memory_base_pfn(reg); end = __pfn_to_phys(memblock_region_memory_end_pfn(reg)); /* do something with start and end */ } Using for_each_mem_range() iterator is more appropriate in such cases and allows simpler and cleaner code. Signed-off-by: Mike Rapoport --- arch/arm/kernel/setup.c | 18 +++ arch/arm/mm/mmu.c| 39 arch/arm/mm/pmsa-v7.c| 20 ++-- arch/arm/mm/pmsa-v8.c| 17 +-- arch/arm/xen/mm.c| 7 +++-- arch/arm64/mm/kasan_init.c | 8 ++--- arch/arm64/mm/mmu.c | 11 ++- arch/c6x/kernel/setup.c | 9 +++--- arch/microblaze/mm/init.c| 9 +++--- arch/mips/cavium-octeon/dma-octeon.c | 12 arch/mips/kernel/setup.c | 31 +-- arch/openrisc/mm/init.c | 8 +++-- arch/powerpc/kernel/fadump.c | 27 +++- arch/powerpc/mm/book3s64/hash_utils.c| 16 +- arch/powerpc/mm/book3s64/radix_pgtable.c | 11 +++ arch/powerpc/mm/kasan/kasan_init_32.c| 8 ++--- arch/powerpc/mm/mem.c| 16 ++ arch/powerpc/mm/pgtable_32.c | 8 ++--- arch/riscv/mm/init.c | 24 ++- arch/riscv/mm/kasan_init.c | 10 +++--- arch/s390/kernel/setup.c | 27 ++-- arch/s390/mm/vmem.c | 16 +- arch/sparc/mm/init_64.c | 12 +++- drivers/bus/mvebu-mbus.c | 12 drivers/s390/char/zcore.c| 9 +++--- 25 files changed, 187 insertions(+), 198 deletions(-) diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index d8e18cdd96d3..3f65d0ac9f63 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -843,19 +843,25 @@ early_param("mem", early_mem); static void __init request_standard_resources(const struct machine_desc *mdesc) { - struct memblock_region *region; + phys_addr_t start, end, res_end; struct resource *res; + u64 i; kernel_code.start = virt_to_phys(_text); kernel_code.end = virt_to_phys(__init_begin - 1); kernel_data.start = virt_to_phys(_sdata); kernel_data.end = virt_to_phys(_end - 1); - for_each_memblock(memory, region) { - phys_addr_t start = __pfn_to_phys(memblock_region_memory_base_pfn(region)); - phys_addr_t end = __pfn_to_phys(memblock_region_memory_end_pfn(region)) - 1; + for_each_mem_range(i, &start, &end) { unsigned long boot_alias_start; + /* +* In memblock, end points to the first byte after the +* range while in resourses, end points to the last byte in +* the range. +*/ + res_end = end - 1; + /* * Some systems have a special memory alias which is only * used for booting. We need to advertise this region to @@ -869,7 +875,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) __func__, sizeof(*res)); res->name = "System RAM (boot alias)"; res->start = boot_alias_start; - res->end = phys_to_idmap(end); + res->end = phys_to_idmap(res_end); res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; request_resource(&iomem_resource, res); } @@ -880,7 +886,7 @@ static void __init request_standard_resources(const struct machine_desc *mdesc) sizeof(*res)); res->name = "System RAM"; res->start = start; - res->end = end; + res->end = res_end; res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; request_resource(&iomem_resource, res); diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 628028bfbb92..a149d9cb4fdb 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -1155,9 +1155,8 @@ phys_addr_t arm_lowmem_limit __initdata = 0; void __init adjust_lowmem_bounds(void) { - phys_addr_t memblock_limit = 0; - u64 vmalloc_limit; - struct memblock_region *reg; + phys_addr_t block_start, block_end, memblock_limit = 0; + u64 vmalloc_limit, i; phys_addr_t lowmem_limit = 0; /* @@ -1173,26 +1172,18 @@ void __init adjust_lowmem_bounds(void) * The first usable region must be PMD aligned. Mark its start * as MEMBLOCK