On Tue, Mar 11, 2025 at 01:41:26PM +0000, Wei Yang wrote: > On Tue, Mar 11, 2025 at 07:27:23AM +0200, Mike Rapoport wrote: > >> >> > >> > > >> >I took another look into this commit. There maybe a very corner case in which > >> >will leave a reserved region with no nid set. > >> > > >> >memmap_init_reserved_pages() > >> > for_each_mem_region() { > >> > ... > >> > memblock_set_node(start, end, &memblock.reserved, nid); > >> > } > >> > > >> >We leverage the iteration here to set nid to all regions in memblock.reserved. > >> >But memblock_set_node() may call memblock_double_array() to expand the array, > >> >which may get a range before current start. So we would miss to set the > >> >correct nid to the new reserved region. > >> > > >> >I have tried to create a case in memblock test. This would happen when there > >> >are 126 memblock.reserved regions. And the last region is across the last two > >> >node. > >> > > >> >One way to fix this is compare type->max in memblock_set_node(). Then check > >> >this return value in memmap_init_reserved_pages(). If we found the size > >> >changes, repeat the iteration. > >> > > >> >But this is a very trivial one, not sure it worth fix. > >> > > >> > >> Hi, Mike > >> > >> I have done a user space test which shows we may have a chance to leave a > >> region with non-nid set. > >> > >> Not sure you are ok with my approach of fixing. > > > >Wouldn't it be better to check for a change in reserved.max in > >memmap_init_reserved_pages()? > > > > Sounds better. > > Previously I thought we need to hide detail from user, but actually it is > already in memblock.c :-) > > If you agree, I would like to prepare a fix. Sure :) > >> -- > >> Wei Yang > >> Help you, Help me -- Sincerely yours, Mike.