On Fri, Sep 18 2026, Tarun Sahu wrote: > for_each_memblock_type() always starts the iteration at index 0 and its > body is a trivial 'for' loop, so it hides very little. It also gets in > the way of iterating from an arbitrary index, which the next patch > needs. > > Remove the macro and open code its three users: memblock_add_range(), > memblock_isolate_range() and memblock_dump(). While at it, move the > region pointer into the loop body scope. > > No functional change. > > Signed-off-by: Tarun Sahu <[email protected]> > --- > mm/memblock.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/mm/memblock.c b/mm/memblock.c > index 9ce86349a29f..5aae75d34dec 100644 > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -155,11 +155,6 @@ struct memblock_type physmem = { > */ > static __refdata struct memblock_type *memblock_memory = &memblock.memory; > > -#define for_each_memblock_type(i, memblock_type, rgn) > \ > - for (i = 0, rgn = &memblock_type->regions[0]; \ > - i < memblock_type->cnt; \ > - i++, rgn = &memblock_type->regions[i]) > - > #define memblock_dbg(fmt, ...) > \ > do { \ > if (memblock_debug) \ > @@ -651,7 +646,8 @@ static int __init_memblock memblock_add_range(struct > memblock_type *type, > base = obase; > nr_new = 0; > > - for_each_memblock_type(idx, type, rgn) { > + for (idx = 0; idx < type->cnt; idx++) { > + rgn = &type->regions[idx];
Nit: this is really odd to read. You assign rgn and then declare rbase and rend. Doesn't checkpatch complain? Regardless, I reckon it would be a lot nicer to read of you move the declaration of rgn into the loop. Same for the others below. LGTM otherwise, so after fixing this up, feel free to add: Reviewed-by: Pratyush Yadav <[email protected]> > phys_addr_t rbase = rgn->base; > phys_addr_t rend = rbase + rgn->size; > > @@ -827,7 +823,8 @@ static int __init_memblock memblock_isolate_range(struct > memblock_type *type, > if (memblock_double_array(type, base, size) < 0) > return -ENOMEM; > > - for_each_memblock_type(idx, type, rgn) { > + for (idx = 0; idx < type->cnt; idx++) { > + rgn = &type->regions[idx]; > phys_addr_t rbase = rgn->base; > phys_addr_t rend = rbase + rgn->size; > > @@ -2198,7 +2195,8 @@ static void __init_memblock memblock_dump(struct > memblock_type *type) > > pr_info(" %s.cnt = 0x%lx\n", type->name, type->cnt); > > - for_each_memblock_type(idx, type, rgn) { > + for (idx = 0; idx < type->cnt; idx++) { > + rgn = &type->regions[idx]; > char nid_buf[32] = ""; > > base = rgn->base; -- Regards, Pratyush Yadav
