On Thu, Apr 04, 2024 at 11:23:51AM +0800, Baoquan He wrote: > On 04/02/24 at 11:32am, Mike Rapoport wrote: > > On Tue, Mar 26, 2024 at 02:11:28PM +0800, Baoquan He wrote: > > > Because memory-less node's ->node_present_pages and its > > > zone's ->present_pages are all 0, the judgement before calling > > > node_set_state() to set N_MEMORY, N_HIGH_MEMORY, N_NORMAL_MEMORY for > > > node is enough to skip memory-less node. The 'continue;' statement > > > inside for_each_node() loop of free_area_init() is gilding the lily. > > > > > > Here, remove the special handling to make memory-less node share the > > > same code flow as normal node. And the code comment above the 'continue' > > > statement is not needed either. > > > > > > Signed-off-by: Baoquan He <bhe@xxxxxxxxxx> > > > --- > > > mm/mm_init.c | 18 +++--------------- > > > 1 file changed, 3 insertions(+), 15 deletions(-) > > > > > > diff --git a/mm/mm_init.c b/mm/mm_init.c > > > index 089dc60159e9..99681ffb9091 100644 > > > --- a/mm/mm_init.c > > > +++ b/mm/mm_init.c > > > @@ -1834,28 +1834,16 @@ void __init free_area_init(unsigned long *max_zone_pfn) > > > panic("Cannot allocate %zuB for node %d.\n", > > > sizeof(*pgdat), nid); > > > arch_refresh_nodedata(nid, pgdat); > > > - free_area_init_node(nid); > > > - > > > - /* > > > - * We do not want to confuse userspace by sysfs > > > - * files/directories for node without any memory > > > - * attached to it, so this node is not marked as > > > - * N_MEMORY and not marked online so that no sysfs > > > - * hierarchy will be created via register_one_node for > > > - * it. The pgdat will get fully initialized by > > > - * hotadd_init_pgdat() when memory is hotplugged into > > > - * this node. > > > - */ > > > > I think this comment is still valuable. Maybe rephrase it a bit and move it > > before 'if (pgdat->node_present_pages)'? > > Fair enough. > > Do you think below paragraph is OK to you? Please help polish or > rephrase it. > > diff --git a/mm/mm_init.c b/mm/mm_init.c > index dd875f943cbb..3ce0f29637ba 100644 > --- a/mm/mm_init.c > +++ b/mm/mm_init.c > @@ -1839,7 +1839,14 @@ void __init free_area_init(unsigned long *max_zone_pfn) > pgdat = NODE_DATA(nid); > free_area_init_node(nid); > > - /* Any memory on that node */ > + /* > + * No sysfs hierarcy will be created via register_one_node() > + *for memory-less node because here it's not marked as N_MEMORY > + *and won't be set online later. The benefit is userspace > + *program won't be confused by sysfs files/directories of > + *memory-less node. The pgdat will get fully initialized by > + *hotadd_init_pgdat() when memory is hotplugged into this node. > + */ Ack > if (pgdat->node_present_pages) { > node_set_state(nid, N_MEMORY); > check_for_memory(pgdat); > -- Sincerely yours, Mike.