* [PATCH 0/2] drivers/base/node: fold node register and unregister functions
@ 2025-09-24 18:40 Donet Tom
2025-09-24 18:40 ` [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function Donet Tom
` (2 more replies)
0 siblings, 3 replies; 14+ messages in thread
From: Donet Tom @ 2025-09-24 18:40 UTC (permalink / raw)
To: Andrew Morton, David Hildenbrand, Oscar Salvador
Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel,
Madhavan Srinivasan, linuxppc-dev, Christophe Leroy,
Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman,
Danilo Krummrich, Mike Rapoport, Dave Jiang, Donet Tom
This change came from the discussion in [1]. It consists of two patches:
The first patch merges register_one_node() and register_node(), leaving a
single register_node() function.
The second patch merges unregister_one_node() and unregister_node(), leaving
a single unregister_node() function.
There is no functional change in these patches.
[1] https://lore.kernel.org/all/5512b1b6-31f8-4322-8a5f-add8d1e9b22f@redhat.com/
Donet Tom (2):
drivers/base/node: merge register_one_node() and register_node() to a
single function.
drivers/base/node: merge unregister_one_node() and unregister_node()
to a single function.
arch/powerpc/platforms/pseries/pci_dlpar.c | 2 +-
arch/x86/mm/numa.c | 4 +-
drivers/base/node.c | 89 +++++++++-------------
include/linux/node.h | 10 +--
mm/memory_hotplug.c | 8 +-
mm/mm_init.c | 2 +-
6 files changed, 49 insertions(+), 66 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 14+ messages in thread* [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-24 18:40 [PATCH 0/2] drivers/base/node: fold node register and unregister functions Donet Tom @ 2025-09-24 18:40 ` Donet Tom 2025-09-24 19:15 ` Christophe Leroy 2025-09-25 8:54 ` David Hildenbrand 2025-09-24 18:40 ` [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() " Donet Tom 2025-09-25 9:36 ` [PATCH 0/2] drivers/base/node: fold node register and unregister functions Mike Rapoport 2 siblings, 2 replies; 14+ messages in thread From: Donet Tom @ 2025-09-24 18:40 UTC (permalink / raw) To: Andrew Morton, David Hildenbrand, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang, Donet Tom register_one_node() and register_node() are small functions. This patch merges them into a single function named register_node() to improve code readability. No functional changes are introduced. Signed-off-by: Donet Tom <donettom@linux.ibm.com> --- arch/powerpc/platforms/pseries/pci_dlpar.c | 2 +- arch/x86/mm/numa.c | 4 +- drivers/base/node.c | 52 +++++++++------------- include/linux/node.h | 4 +- mm/memory_hotplug.c | 4 +- mm/mm_init.c | 2 +- 6 files changed, 28 insertions(+), 40 deletions(-) diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c index aeb8633a3d00..8c77ec7980de 100644 --- a/arch/powerpc/platforms/pseries/pci_dlpar.c +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c @@ -29,7 +29,7 @@ struct pci_controller *init_phb_dynamic(struct device_node *dn) nid = of_node_to_nid(dn); if (likely((nid) >= 0)) { if (!node_online(nid)) { - if (register_one_node(nid)) { + if (register_node(nid)) { pr_err("PCI: Failed to register node %d\n", nid); } else { update_numa_distance(dn); diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index c24890c40138..7a97327140df 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c @@ -262,7 +262,7 @@ void __init init_gi_nodes(void) * bringup_nonboot_cpus * cpu_up * __try_online_node - * register_one_node + * register_node * because node_subsys is not initialized yet. * TODO remove dependency on node_online */ @@ -303,7 +303,7 @@ void __init init_cpu_to_node(void) * bringup_nonboot_cpus * cpu_up * __try_online_node - * register_one_node + * register_node * because node_subsys is not initialized yet. * TODO remove dependency on node_online */ diff --git a/drivers/base/node.c b/drivers/base/node.c index 6b6e55a98b79..eab620e29c78 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -638,33 +638,6 @@ static void node_device_release(struct device *dev) kfree(to_node(dev)); } -/* - * register_node - Setup a sysfs device for a node. - * @num - Node number to use when creating the device. - * - * Initialize and register the node device. - */ -static int register_node(struct node *node, int num) -{ - int error; - - node->dev.id = num; - node->dev.bus = &node_subsys; - node->dev.release = node_device_release; - node->dev.groups = node_dev_groups; - error = device_register(&node->dev); - - if (error) { - put_device(&node->dev); - } else { - hugetlb_register_node(node); - compaction_register_node(node); - reclaim_register_node(node); - } - - return error; -} - /** * unregister_node - unregister a node device * @node: node going away @@ -869,7 +842,13 @@ void register_memory_blocks_under_node_hotplug(int nid, unsigned long start_pfn, } #endif /* CONFIG_MEMORY_HOTPLUG */ -int register_one_node(int nid) +/* + * register_node - Setup a sysfs device for a node. + * @nid - Node number to use when creating the device. + * + * Initialize and register the node device. + */ +int register_node(int nid) { int error; int cpu; @@ -880,14 +859,23 @@ int register_one_node(int nid) return -ENOMEM; INIT_LIST_HEAD(&node->access_list); - node_devices[nid] = node; - error = register_node(node_devices[nid], nid); + node->dev.id = nid; + node->dev.bus = &node_subsys; + node->dev.release = node_device_release; + node->dev.groups = node_dev_groups; + + error = device_register(&node->dev); if (error) { - node_devices[nid] = NULL; + put_device(&node->dev); return error; } + node_devices[nid] = node; + hugetlb_register_node(node); + compaction_register_node(node); + reclaim_register_node(node); + /* link cpu under this node */ for_each_present_cpu(cpu) { if (cpu_to_node(cpu) == nid) @@ -980,7 +968,7 @@ void __init node_dev_init(void) * to already created cpu devices. */ for_each_online_node(i) { - ret = register_one_node(i); + ret = register_node(i); if (ret) panic("%s() failed to add node: %d\n", __func__, ret); } diff --git a/include/linux/node.h b/include/linux/node.h index 2c7529335b21..4dcf876cd0b4 100644 --- a/include/linux/node.h +++ b/include/linux/node.h @@ -168,7 +168,7 @@ static inline int hotplug_node_notifier(notifier_fn_t fn, int pri) #ifdef CONFIG_NUMA extern void node_dev_init(void); /* Core of the node registration - only memory hotplug should use this */ -extern int register_one_node(int nid); +extern int register_node(int nid); extern void unregister_one_node(int nid); extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); @@ -181,7 +181,7 @@ extern int register_memory_node_under_compute_node(unsigned int mem_nid, static inline void node_dev_init(void) { } -static inline int register_one_node(int nid) +static inline int register_node(int nid) { return 0; } diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 0be83039c3b5..6c050d867031 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1311,7 +1311,7 @@ static int __try_online_node(int nid, bool set_node_online) if (set_node_online) { node_set_online(nid); - ret = register_one_node(nid); + ret = register_node(nid); BUG_ON(ret); } out: @@ -1542,7 +1542,7 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) goto error_memblock_remove; if (ret) { node_set_online(nid); - ret = register_one_node(nid); + ret = register_node(nid); if (WARN_ON(ret)) { node_set_offline(nid); goto error_memblock_remove; diff --git a/mm/mm_init.c b/mm/mm_init.c index df614556741a..e1a19a3dadd7 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -1909,7 +1909,7 @@ void __init free_area_init(unsigned long *max_zone_pfn) free_area_init_node(nid); /* - * No sysfs hierarchy will be created via register_one_node() + * No sysfs hierarchy will be created via register_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 -- 2.51.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-24 18:40 ` [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function Donet Tom @ 2025-09-24 19:15 ` Christophe Leroy 2025-09-25 5:01 ` Donet Tom 2025-09-25 8:54 ` David Hildenbrand 1 sibling, 1 reply; 14+ messages in thread From: Christophe Leroy @ 2025-09-24 19:15 UTC (permalink / raw) To: Donet Tom, Andrew Morton, David Hildenbrand, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang Le 24/09/2025 à 20:40, Donet Tom a écrit : > register_one_node() and register_node() are small functions. > This patch merges them into a single function named register_node() > to improve code readability. This is unclear. What it really does is it folds register_node() into its only caller which is register_one_node() and then it renames register_one_node() into register_node(). > > No functional changes are introduced. > > Signed-off-by: Donet Tom <donettom@linux.ibm.com> > --- > arch/powerpc/platforms/pseries/pci_dlpar.c | 2 +- > arch/x86/mm/numa.c | 4 +- > drivers/base/node.c | 52 +++++++++------------- > include/linux/node.h | 4 +- > mm/memory_hotplug.c | 4 +- > mm/mm_init.c | 2 +- > 6 files changed, 28 insertions(+), 40 deletions(-) > > diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c > index aeb8633a3d00..8c77ec7980de 100644 > --- a/arch/powerpc/platforms/pseries/pci_dlpar.c > +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c > @@ -29,7 +29,7 @@ struct pci_controller *init_phb_dynamic(struct device_node *dn) > nid = of_node_to_nid(dn); > if (likely((nid) >= 0)) { > if (!node_online(nid)) { > - if (register_one_node(nid)) { > + if (register_node(nid)) { > pr_err("PCI: Failed to register node %d\n", nid); > } else { > update_numa_distance(dn); > diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c > index c24890c40138..7a97327140df 100644 > --- a/arch/x86/mm/numa.c > +++ b/arch/x86/mm/numa.c > @@ -262,7 +262,7 @@ void __init init_gi_nodes(void) > * bringup_nonboot_cpus > * cpu_up > * __try_online_node > - * register_one_node > + * register_node > * because node_subsys is not initialized yet. > * TODO remove dependency on node_online > */ > @@ -303,7 +303,7 @@ void __init init_cpu_to_node(void) > * bringup_nonboot_cpus > * cpu_up > * __try_online_node > - * register_one_node > + * register_node > * because node_subsys is not initialized yet. > * TODO remove dependency on node_online > */ > diff --git a/drivers/base/node.c b/drivers/base/node.c > index 6b6e55a98b79..eab620e29c78 100644 > --- a/drivers/base/node.c > +++ b/drivers/base/node.c > @@ -638,33 +638,6 @@ static void node_device_release(struct device *dev) > kfree(to_node(dev)); > } > > -/* > - * register_node - Setup a sysfs device for a node. > - * @num - Node number to use when creating the device. > - * > - * Initialize and register the node device. > - */ > -static int register_node(struct node *node, int num) > -{ > - int error; > - > - node->dev.id = num; > - node->dev.bus = &node_subsys; > - node->dev.release = node_device_release; > - node->dev.groups = node_dev_groups; > - error = device_register(&node->dev); > - > - if (error) { > - put_device(&node->dev); > - } else { > - hugetlb_register_node(node); > - compaction_register_node(node); > - reclaim_register_node(node); > - } > - > - return error; > -} > - > /** > * unregister_node - unregister a node device > * @node: node going away > @@ -869,7 +842,13 @@ void register_memory_blocks_under_node_hotplug(int nid, unsigned long start_pfn, > } > #endif /* CONFIG_MEMORY_HOTPLUG */ > > -int register_one_node(int nid) > +/* > + * register_node - Setup a sysfs device for a node. > + * @nid - Node number to use when creating the device. > + * > + * Initialize and register the node device. > + */ > +int register_node(int nid) > { > int error; > int cpu; > @@ -880,14 +859,23 @@ int register_one_node(int nid) > return -ENOMEM; > > INIT_LIST_HEAD(&node->access_list); > - node_devices[nid] = node; > > - error = register_node(node_devices[nid], nid); > + node->dev.id = nid; > + node->dev.bus = &node_subsys; > + node->dev.release = node_device_release; > + node->dev.groups = node_dev_groups; > + > + error = device_register(&node->dev); > if (error) { > - node_devices[nid] = NULL; > + put_device(&node->dev); > return error; > } > > + node_devices[nid] = node; > + hugetlb_register_node(node); > + compaction_register_node(node); > + reclaim_register_node(node); > + > /* link cpu under this node */ > for_each_present_cpu(cpu) { > if (cpu_to_node(cpu) == nid) > @@ -980,7 +968,7 @@ void __init node_dev_init(void) > * to already created cpu devices. > */ > for_each_online_node(i) { > - ret = register_one_node(i); > + ret = register_node(i); > if (ret) > panic("%s() failed to add node: %d\n", __func__, ret); > } > diff --git a/include/linux/node.h b/include/linux/node.h > index 2c7529335b21..4dcf876cd0b4 100644 > --- a/include/linux/node.h > +++ b/include/linux/node.h > @@ -168,7 +168,7 @@ static inline int hotplug_node_notifier(notifier_fn_t fn, int pri) > #ifdef CONFIG_NUMA > extern void node_dev_init(void); > /* Core of the node registration - only memory hotplug should use this */ > -extern int register_one_node(int nid); > +extern int register_node(int nid); extern keyword is pointless on functions prototypes. checkpatch.pl usually complains about that. I know previous prototype was extern and all surrounding also are, but it is not because mistakes were done in the past that you have to continue doing the same mistakes. > extern void unregister_one_node(int nid); > extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); > extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); > @@ -181,7 +181,7 @@ extern int register_memory_node_under_compute_node(unsigned int mem_nid, > static inline void node_dev_init(void) > { > } > -static inline int register_one_node(int nid) > +static inline int register_node(int nid) > { > return 0; > } > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 0be83039c3b5..6c050d867031 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1311,7 +1311,7 @@ static int __try_online_node(int nid, bool set_node_online) > > if (set_node_online) { > node_set_online(nid); > - ret = register_one_node(nid); > + ret = register_node(nid); > BUG_ON(ret); > } > out: > @@ -1542,7 +1542,7 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) > goto error_memblock_remove; > if (ret) { > node_set_online(nid); > - ret = register_one_node(nid); > + ret = register_node(nid); > if (WARN_ON(ret)) { > node_set_offline(nid); > goto error_memblock_remove; > diff --git a/mm/mm_init.c b/mm/mm_init.c > index df614556741a..e1a19a3dadd7 100644 > --- a/mm/mm_init.c > +++ b/mm/mm_init.c > @@ -1909,7 +1909,7 @@ void __init free_area_init(unsigned long *max_zone_pfn) > free_area_init_node(nid); > > /* > - * No sysfs hierarchy will be created via register_one_node() > + * No sysfs hierarchy will be created via register_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 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-24 19:15 ` Christophe Leroy @ 2025-09-25 5:01 ` Donet Tom 0 siblings, 0 replies; 14+ messages in thread From: Donet Tom @ 2025-09-25 5:01 UTC (permalink / raw) To: Christophe Leroy, Andrew Morton, David Hildenbrand, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang On 9/25/25 12:45 AM, Christophe Leroy wrote: > > > Le 24/09/2025 à 20:40, Donet Tom a écrit : >> register_one_node() and register_node() are small functions. >> This patch merges them into a single function named register_node() >> to improve code readability. > > This is unclear. > > What it really does is it folds register_node() into its only caller > which is register_one_node() and then it renames register_one_node() > into register_node(). Yes, you are right. I will add proper explanations in the next version. > >> >> No functional changes are introduced. >> >> Signed-off-by: Donet Tom <donettom@linux.ibm.com> >> --- >> arch/powerpc/platforms/pseries/pci_dlpar.c | 2 +- >> arch/x86/mm/numa.c | 4 +- >> drivers/base/node.c | 52 +++++++++------------- >> include/linux/node.h | 4 +- >> mm/memory_hotplug.c | 4 +- >> mm/mm_init.c | 2 +- >> 6 files changed, 28 insertions(+), 40 deletions(-) >> >> diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c >> b/arch/powerpc/platforms/pseries/pci_dlpar.c >> index aeb8633a3d00..8c77ec7980de 100644 >> --- a/arch/powerpc/platforms/pseries/pci_dlpar.c >> +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c >> @@ -29,7 +29,7 @@ struct pci_controller *init_phb_dynamic(struct >> device_node *dn) >> nid = of_node_to_nid(dn); >> if (likely((nid) >= 0)) { >> if (!node_online(nid)) { >> - if (register_one_node(nid)) { >> + if (register_node(nid)) { >> pr_err("PCI: Failed to register node %d\n", nid); >> } else { >> update_numa_distance(dn); >> diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c >> index c24890c40138..7a97327140df 100644 >> --- a/arch/x86/mm/numa.c >> +++ b/arch/x86/mm/numa.c >> @@ -262,7 +262,7 @@ void __init init_gi_nodes(void) >> * bringup_nonboot_cpus >> * cpu_up >> * __try_online_node >> - * register_one_node >> + * register_node >> * because node_subsys is not initialized yet. >> * TODO remove dependency on node_online >> */ >> @@ -303,7 +303,7 @@ void __init init_cpu_to_node(void) >> * bringup_nonboot_cpus >> * cpu_up >> * __try_online_node >> - * register_one_node >> + * register_node >> * because node_subsys is not initialized yet. >> * TODO remove dependency on node_online >> */ >> diff --git a/drivers/base/node.c b/drivers/base/node.c >> index 6b6e55a98b79..eab620e29c78 100644 >> --- a/drivers/base/node.c >> +++ b/drivers/base/node.c >> @@ -638,33 +638,6 @@ static void node_device_release(struct device *dev) >> kfree(to_node(dev)); >> } >> -/* >> - * register_node - Setup a sysfs device for a node. >> - * @num - Node number to use when creating the device. >> - * >> - * Initialize and register the node device. >> - */ >> -static int register_node(struct node *node, int num) >> -{ >> - int error; >> - >> - node->dev.id = num; >> - node->dev.bus = &node_subsys; >> - node->dev.release = node_device_release; >> - node->dev.groups = node_dev_groups; >> - error = device_register(&node->dev); >> - >> - if (error) { >> - put_device(&node->dev); >> - } else { >> - hugetlb_register_node(node); >> - compaction_register_node(node); >> - reclaim_register_node(node); >> - } >> - >> - return error; >> -} >> - >> /** >> * unregister_node - unregister a node device >> * @node: node going away >> @@ -869,7 +842,13 @@ void >> register_memory_blocks_under_node_hotplug(int nid, unsigned long >> start_pfn, >> } >> #endif /* CONFIG_MEMORY_HOTPLUG */ >> -int register_one_node(int nid) >> +/* >> + * register_node - Setup a sysfs device for a node. >> + * @nid - Node number to use when creating the device. >> + * >> + * Initialize and register the node device. >> + */ >> +int register_node(int nid) >> { >> int error; >> int cpu; >> @@ -880,14 +859,23 @@ int register_one_node(int nid) >> return -ENOMEM; >> INIT_LIST_HEAD(&node->access_list); >> - node_devices[nid] = node; >> - error = register_node(node_devices[nid], nid); >> + node->dev.id = nid; >> + node->dev.bus = &node_subsys; >> + node->dev.release = node_device_release; >> + node->dev.groups = node_dev_groups; >> + >> + error = device_register(&node->dev); >> if (error) { >> - node_devices[nid] = NULL; >> + put_device(&node->dev); >> return error; >> } >> + node_devices[nid] = node; >> + hugetlb_register_node(node); >> + compaction_register_node(node); >> + reclaim_register_node(node); >> + >> /* link cpu under this node */ >> for_each_present_cpu(cpu) { >> if (cpu_to_node(cpu) == nid) >> @@ -980,7 +968,7 @@ void __init node_dev_init(void) >> * to already created cpu devices. >> */ >> for_each_online_node(i) { >> - ret = register_one_node(i); >> + ret = register_node(i); >> if (ret) >> panic("%s() failed to add node: %d\n", __func__, ret); >> } >> diff --git a/include/linux/node.h b/include/linux/node.h >> index 2c7529335b21..4dcf876cd0b4 100644 >> --- a/include/linux/node.h >> +++ b/include/linux/node.h >> @@ -168,7 +168,7 @@ static inline int >> hotplug_node_notifier(notifier_fn_t fn, int pri) >> #ifdef CONFIG_NUMA >> extern void node_dev_init(void); >> /* Core of the node registration - only memory hotplug should use >> this */ >> -extern int register_one_node(int nid); >> +extern int register_node(int nid); > > extern keyword is pointless on functions prototypes. > > checkpatch.pl usually complains about that. > > I know previous prototype was extern and all surrounding also are, but > it is not because mistakes were done in the past that you have to > continue doing the same mistakes. > Thank you for the comment. I will address it in the next version. > > >> extern void unregister_one_node(int nid); >> extern int register_cpu_under_node(unsigned int cpu, unsigned int >> nid); >> extern int unregister_cpu_under_node(unsigned int cpu, unsigned int >> nid); >> @@ -181,7 +181,7 @@ extern int >> register_memory_node_under_compute_node(unsigned int mem_nid, >> static inline void node_dev_init(void) >> { >> } >> -static inline int register_one_node(int nid) >> +static inline int register_node(int nid) >> { >> return 0; >> } >> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c >> index 0be83039c3b5..6c050d867031 100644 >> --- a/mm/memory_hotplug.c >> +++ b/mm/memory_hotplug.c >> @@ -1311,7 +1311,7 @@ static int __try_online_node(int nid, bool >> set_node_online) >> if (set_node_online) { >> node_set_online(nid); >> - ret = register_one_node(nid); >> + ret = register_node(nid); >> BUG_ON(ret); >> } >> out: >> @@ -1542,7 +1542,7 @@ int add_memory_resource(int nid, struct >> resource *res, mhp_t mhp_flags) >> goto error_memblock_remove; >> if (ret) { >> node_set_online(nid); >> - ret = register_one_node(nid); >> + ret = register_node(nid); >> if (WARN_ON(ret)) { >> node_set_offline(nid); >> goto error_memblock_remove; >> diff --git a/mm/mm_init.c b/mm/mm_init.c >> index df614556741a..e1a19a3dadd7 100644 >> --- a/mm/mm_init.c >> +++ b/mm/mm_init.c >> @@ -1909,7 +1909,7 @@ void __init free_area_init(unsigned long >> *max_zone_pfn) >> free_area_init_node(nid); >> /* >> - * No sysfs hierarchy will be created via register_one_node() >> + * No sysfs hierarchy will be created via register_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 > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-24 18:40 ` [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function Donet Tom 2025-09-24 19:15 ` Christophe Leroy @ 2025-09-25 8:54 ` David Hildenbrand 2025-09-25 9:34 ` Mike Rapoport 2025-09-25 13:20 ` Donet Tom 1 sibling, 2 replies; 14+ messages in thread From: David Hildenbrand @ 2025-09-25 8:54 UTC (permalink / raw) To: Donet Tom, Andrew Morton, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang On 24.09.25 20:40, Donet Tom wrote: > register_one_node() and register_node() are small functions. > This patch merges them into a single function named register_node() > to improve code readability. > > No functional changes are introduced. > > Signed-off-by: Donet Tom <donettom@linux.ibm.com> > --- [...] > /** > * unregister_node - unregister a node device > * @node: node going away > @@ -869,7 +842,13 @@ void register_memory_blocks_under_node_hotplug(int nid, unsigned long start_pfn, > } > #endif /* CONFIG_MEMORY_HOTPLUG */ > > -int register_one_node(int nid) > +/* We can directly convert this to proper kernel doc by using /** > + * register_node - Setup a sysfs device for a node. > + * @nid - Node number to use when creating the device. > + * > + * Initialize and register the node device. and briefly describing what the return value means "Returns 0 on success, ..." > + */ > +int register_node(int nid) > { > int error; > int cpu; > @@ -880,14 +859,23 @@ int register_one_node(int nid) > return -ENOMEM; > > INIT_LIST_HEAD(&node->access_list); > - node_devices[nid] = node; > > - error = register_node(node_devices[nid], nid); > + node->dev.id = nid; > + node->dev.bus = &node_subsys; > + node->dev.release = node_device_release; > + node->dev.groups = node_dev_groups; > + > + error = device_register(&node->dev); > if (error) { > - node_devices[nid] = NULL; Wondering why we did have this temporary setting of the node_devices[] in there. But I cannot immediately spot why it was required. -- Cheers David / dhildenb ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-25 8:54 ` David Hildenbrand @ 2025-09-25 9:34 ` Mike Rapoport 2025-09-25 9:37 ` David Hildenbrand 2025-09-25 13:21 ` Donet Tom 2025-09-25 13:20 ` Donet Tom 1 sibling, 2 replies; 14+ messages in thread From: Mike Rapoport @ 2025-09-25 9:34 UTC (permalink / raw) To: David Hildenbrand Cc: Donet Tom, Andrew Morton, Oscar Salvador, Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Dave Jiang On Thu, Sep 25, 2025 at 10:54:07AM +0200, David Hildenbrand wrote: > On 24.09.25 20:40, Donet Tom wrote: > > register_one_node() and register_node() are small functions. > > This patch merges them into a single function named register_node() > > to improve code readability. > > > > No functional changes are introduced. > > > > Signed-off-by: Donet Tom <donettom@linux.ibm.com> > > --- > > [...] > > > /** > > * unregister_node - unregister a node device > > * @node: node going away > > @@ -869,7 +842,13 @@ void register_memory_blocks_under_node_hotplug(int nid, unsigned long start_pfn, > > } > > #endif /* CONFIG_MEMORY_HOTPLUG */ > > -int register_one_node(int nid) > > +/* > > We can directly convert this to proper kernel doc by using /** > > > + * register_node - Setup a sysfs device for a node. > > + * @nid - Node number to use when creating the device. > > + * > > + * Initialize and register the node device. > > and briefly describing what the return value means > > "Returns 0 on success, ..." For kernel-doc it should be Return: 0 on success, ... > > > + */ > > +int register_node(int nid) > > { > > int error; > > int cpu; > > @@ -880,14 +859,23 @@ int register_one_node(int nid) > > return -ENOMEM; > > INIT_LIST_HEAD(&node->access_list); > > - node_devices[nid] = node; > > - error = register_node(node_devices[nid], nid); > > + node->dev.id = nid; > > + node->dev.bus = &node_subsys; > > + node->dev.release = node_device_release; > > + node->dev.groups = node_dev_groups; > > + > > + error = device_register(&node->dev); > > if (error) { > > - node_devices[nid] = NULL; > > Wondering why we did have this temporary setting of the node_devices[] in > there. But I cannot immediately spot why it was required. register_cpu_under_node() references node_devices, so that assignment can be moved just before the loop that adds CPUs to node. > -- > Cheers > > David / dhildenb > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-25 9:34 ` Mike Rapoport @ 2025-09-25 9:37 ` David Hildenbrand 2025-09-25 13:21 ` Donet Tom 1 sibling, 0 replies; 14+ messages in thread From: David Hildenbrand @ 2025-09-25 9:37 UTC (permalink / raw) To: Mike Rapoport Cc: Donet Tom, Andrew Morton, Oscar Salvador, Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Dave Jiang On 25.09.25 11:34, Mike Rapoport wrote: > On Thu, Sep 25, 2025 at 10:54:07AM +0200, David Hildenbrand wrote: >> On 24.09.25 20:40, Donet Tom wrote: >>> register_one_node() and register_node() are small functions. >>> This patch merges them into a single function named register_node() >>> to improve code readability. >>> >>> No functional changes are introduced. >>> >>> Signed-off-by: Donet Tom <donettom@linux.ibm.com> >>> --- >> >> [...] >> >>> /** >>> * unregister_node - unregister a node device >>> * @node: node going away >>> @@ -869,7 +842,13 @@ void register_memory_blocks_under_node_hotplug(int nid, unsigned long start_pfn, >>> } >>> #endif /* CONFIG_MEMORY_HOTPLUG */ >>> -int register_one_node(int nid) >>> +/* >> >> We can directly convert this to proper kernel doc by using /** >> >>> + * register_node - Setup a sysfs device for a node. >>> + * @nid - Node number to use when creating the device. >>> + * >>> + * Initialize and register the node device. >> >> and briefly describing what the return value means >> >> "Returns 0 on success, ..." > > For kernel-doc it should be > > Return: 0 on success, ... Yeah; I recall that kerneldoc does not complain when using "Returns ...", but probably it will not be indicated accordingly. -- Cheers David / dhildenb ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-25 9:34 ` Mike Rapoport 2025-09-25 9:37 ` David Hildenbrand @ 2025-09-25 13:21 ` Donet Tom 1 sibling, 0 replies; 14+ messages in thread From: Donet Tom @ 2025-09-25 13:21 UTC (permalink / raw) To: Mike Rapoport, David Hildenbrand Cc: Andrew Morton, Oscar Salvador, Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Dave Jiang On 9/25/25 3:04 PM, Mike Rapoport wrote: > On Thu, Sep 25, 2025 at 10:54:07AM +0200, David Hildenbrand wrote: >> On 24.09.25 20:40, Donet Tom wrote: >>> register_one_node() and register_node() are small functions. >>> This patch merges them into a single function named register_node() >>> to improve code readability. >>> >>> No functional changes are introduced. >>> >>> Signed-off-by: Donet Tom <donettom@linux.ibm.com> >>> --- >> [...] >> >>> /** >>> * unregister_node - unregister a node device >>> * @node: node going away >>> @@ -869,7 +842,13 @@ void register_memory_blocks_under_node_hotplug(int nid, unsigned long start_pfn, >>> } >>> #endif /* CONFIG_MEMORY_HOTPLUG */ >>> -int register_one_node(int nid) >>> +/* >> We can directly convert this to proper kernel doc by using /** >> >>> + * register_node - Setup a sysfs device for a node. >>> + * @nid - Node number to use when creating the device. >>> + * >>> + * Initialize and register the node device. >> and briefly describing what the return value means >> >> "Returns 0 on success, ..." > For kernel-doc it should be > > Return: 0 on success, ... > Sure I will change it. > >>> + */ >>> +int register_node(int nid) >>> { >>> int error; >>> int cpu; >>> @@ -880,14 +859,23 @@ int register_one_node(int nid) >>> return -ENOMEM; >>> INIT_LIST_HEAD(&node->access_list); >>> - node_devices[nid] = node; >>> - error = register_node(node_devices[nid], nid); >>> + node->dev.id = nid; >>> + node->dev.bus = &node_subsys; >>> + node->dev.release = node_device_release; >>> + node->dev.groups = node_dev_groups; >>> + >>> + error = device_register(&node->dev); >>> if (error) { >>> - node_devices[nid] = NULL; >> Wondering why we did have this temporary setting of the node_devices[] in >> there. But I cannot immediately spot why it was required. > register_cpu_under_node() references node_devices, so that assignment can > be moved just before the loop that adds CPUs to node. Sure. Thank you > >> -- >> Cheers >> >> David / dhildenb >> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function. 2025-09-25 8:54 ` David Hildenbrand 2025-09-25 9:34 ` Mike Rapoport @ 2025-09-25 13:20 ` Donet Tom 1 sibling, 0 replies; 14+ messages in thread From: Donet Tom @ 2025-09-25 13:20 UTC (permalink / raw) To: David Hildenbrand, Andrew Morton, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang On 9/25/25 2:24 PM, David Hildenbrand wrote: > On 24.09.25 20:40, Donet Tom wrote: >> register_one_node() and register_node() are small functions. >> This patch merges them into a single function named register_node() >> to improve code readability. >> >> No functional changes are introduced. >> >> Signed-off-by: Donet Tom <donettom@linux.ibm.com> >> --- > > [...] > >> /** >> * unregister_node - unregister a node device >> * @node: node going away >> @@ -869,7 +842,13 @@ void >> register_memory_blocks_under_node_hotplug(int nid, unsigned long >> start_pfn, >> } >> #endif /* CONFIG_MEMORY_HOTPLUG */ >> -int register_one_node(int nid) >> +/* > > We can directly convert this to proper kernel doc by using /** > Sure I will add it. > >> + * register_node - Setup a sysfs device for a node. >> + * @nid - Node number to use when creating the device. >> + * >> + * Initialize and register the node device. > > and briefly describing what the return value means > > "Returns 0 on success, ..." > Sure >> + */ >> +int register_node(int nid) >> { >> int error; >> int cpu; >> @@ -880,14 +859,23 @@ int register_one_node(int nid) >> return -ENOMEM; >> INIT_LIST_HEAD(&node->access_list); >> - node_devices[nid] = node; >> - error = register_node(node_devices[nid], nid); >> + node->dev.id = nid; >> + node->dev.bus = &node_subsys; >> + node->dev.release = node_device_release; >> + node->dev.groups = node_dev_groups; >> + >> + error = device_register(&node->dev); >> if (error) { >> - node_devices[nid] = NULL; > > Wondering why we did have this temporary setting of the node_devices[] > in there. But I cannot immediately spot why it was required. node_devices[] is used in many places to access node data. In the previous code, immediately after allocating the node structure, it was stored in node_devices[]. On error paths, we were clearing the node structure entry from node_devices[]. With the new code, the node structure is now stored in node_devices[] only after the device has been registered, and just before calling register_cpu_under_node(), since node_devices[] is accessed inside that function. It is also used outside of node.c, in hugetlb_register_all_nodes() . Do you think we could use a different mechanism instead of this? ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() to a single function. 2025-09-24 18:40 [PATCH 0/2] drivers/base/node: fold node register and unregister functions Donet Tom 2025-09-24 18:40 ` [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function Donet Tom @ 2025-09-24 18:40 ` Donet Tom 2025-09-24 19:19 ` Christophe Leroy 2025-09-25 8:55 ` David Hildenbrand 2025-09-25 9:36 ` [PATCH 0/2] drivers/base/node: fold node register and unregister functions Mike Rapoport 2 siblings, 2 replies; 14+ messages in thread From: Donet Tom @ 2025-09-24 18:40 UTC (permalink / raw) To: Andrew Morton, David Hildenbrand, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang, Donet Tom unregister_one_node() and unregister_node() are small functions. This patch merges them into a single function named unregister_node() to improve code readability. No functional changes are introduced. Signed-off-by: Donet Tom <donettom@linux.ibm.com> --- drivers/base/node.c | 37 +++++++++++++++++-------------------- include/linux/node.h | 6 ++---- mm/memory_hotplug.c | 4 ++-- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/drivers/base/node.c b/drivers/base/node.c index eab620e29c78..d460c1675c77 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -638,23 +638,6 @@ static void node_device_release(struct device *dev) kfree(to_node(dev)); } -/** - * unregister_node - unregister a node device - * @node: node going away - * - * Unregisters a node device @node. All the devices on the node must be - * unregistered before calling this function. - */ -void unregister_node(struct node *node) -{ - hugetlb_unregister_node(node); - compaction_unregister_node(node); - reclaim_unregister_node(node); - node_remove_accesses(node); - node_remove_caches(node); - device_unregister(&node->dev); -} - struct node *node_devices[MAX_NUMNODES]; /* @@ -887,12 +870,26 @@ int register_node(int nid) return error; } -void unregister_one_node(int nid) +/** + * unregister_node - unregister a node device + * @nid: nid of the node going away + * + * Unregisters the node device at node id @nid. All the devices on the + * node must be unregistered before calling this function. + */ +void unregister_node(int nid) { - if (!node_devices[nid]) + struct node *node = node_devices[nid]; + + if (!node) return; - unregister_node(node_devices[nid]); + hugetlb_unregister_node(node); + compaction_unregister_node(node); + reclaim_unregister_node(node); + node_remove_accesses(node); + node_remove_caches(node); + device_unregister(&node->dev); node_devices[nid] = NULL; } diff --git a/include/linux/node.h b/include/linux/node.h index 4dcf876cd0b4..d721127964b3 100644 --- a/include/linux/node.h +++ b/include/linux/node.h @@ -124,8 +124,6 @@ static inline void register_memory_blocks_under_nodes(void) } #endif -extern void unregister_node(struct node *node); - struct node_notify { int nid; }; @@ -169,7 +167,7 @@ static inline int hotplug_node_notifier(notifier_fn_t fn, int pri) extern void node_dev_init(void); /* Core of the node registration - only memory hotplug should use this */ extern int register_node(int nid); -extern void unregister_one_node(int nid); +extern void unregister_node(int nid); extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); extern void unregister_memory_block_under_nodes(struct memory_block *mem_blk); @@ -185,7 +183,7 @@ static inline int register_node(int nid) { return 0; } -static inline int unregister_one_node(int nid) +static inline int unregister_node(int nid) { return 0; } diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 6c050d867031..94a8f6e8811a 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1596,7 +1596,7 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) error: if (new_node) { node_set_offline(nid); - unregister_one_node(nid); + unregister_node(nid); } error_memblock_remove: if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) @@ -2201,7 +2201,7 @@ void try_offline_node(int nid) * node now. */ node_set_offline(nid); - unregister_one_node(nid); + unregister_node(nid); } EXPORT_SYMBOL(try_offline_node); -- 2.51.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() to a single function. 2025-09-24 18:40 ` [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() " Donet Tom @ 2025-09-24 19:19 ` Christophe Leroy 2025-09-25 5:03 ` Donet Tom 2025-09-25 8:55 ` David Hildenbrand 1 sibling, 1 reply; 14+ messages in thread From: Christophe Leroy @ 2025-09-24 19:19 UTC (permalink / raw) To: Donet Tom, Andrew Morton, David Hildenbrand, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang Le 24/09/2025 à 20:40, Donet Tom a écrit : > unregister_one_node() and unregister_node() are small functions. > This patch merges them into a single function named unregister_node() > to improve code readability. Same comment than patch 1. It is not only because they are small that you merge them, it is primarily because unregister_node() only has one caller. > > No functional changes are introduced. > > Signed-off-by: Donet Tom <donettom@linux.ibm.com> > --- > drivers/base/node.c | 37 +++++++++++++++++-------------------- > include/linux/node.h | 6 ++---- > mm/memory_hotplug.c | 4 ++-- > 3 files changed, 21 insertions(+), 26 deletions(-) > > diff --git a/drivers/base/node.c b/drivers/base/node.c > index eab620e29c78..d460c1675c77 100644 > --- a/drivers/base/node.c > +++ b/drivers/base/node.c > @@ -638,23 +638,6 @@ static void node_device_release(struct device *dev) > kfree(to_node(dev)); > } > > -/** > - * unregister_node - unregister a node device > - * @node: node going away > - * > - * Unregisters a node device @node. All the devices on the node must be > - * unregistered before calling this function. > - */ > -void unregister_node(struct node *node) > -{ > - hugetlb_unregister_node(node); > - compaction_unregister_node(node); > - reclaim_unregister_node(node); > - node_remove_accesses(node); > - node_remove_caches(node); > - device_unregister(&node->dev); > -} > - > struct node *node_devices[MAX_NUMNODES]; > > /* > @@ -887,12 +870,26 @@ int register_node(int nid) > return error; > } > > -void unregister_one_node(int nid) > +/** > + * unregister_node - unregister a node device > + * @nid: nid of the node going away > + * > + * Unregisters the node device at node id @nid. All the devices on the > + * node must be unregistered before calling this function. > + */ > +void unregister_node(int nid) > { > - if (!node_devices[nid]) > + struct node *node = node_devices[nid]; > + > + if (!node) > return; > > - unregister_node(node_devices[nid]); > + hugetlb_unregister_node(node); > + compaction_unregister_node(node); > + reclaim_unregister_node(node); > + node_remove_accesses(node); > + node_remove_caches(node); > + device_unregister(&node->dev); > node_devices[nid] = NULL; > } > > diff --git a/include/linux/node.h b/include/linux/node.h > index 4dcf876cd0b4..d721127964b3 100644 > --- a/include/linux/node.h > +++ b/include/linux/node.h > @@ -124,8 +124,6 @@ static inline void register_memory_blocks_under_nodes(void) > } > #endif > > -extern void unregister_node(struct node *node); > - > struct node_notify { > int nid; > }; > @@ -169,7 +167,7 @@ static inline int hotplug_node_notifier(notifier_fn_t fn, int pri) > extern void node_dev_init(void); > /* Core of the node registration - only memory hotplug should use this */ > extern int register_node(int nid); > -extern void unregister_one_node(int nid); > +extern void unregister_node(int nid); No 'extern' on function prototypes. > extern int register_cpu_under_node(unsigned int cpu, unsigned int nid); > extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid); > extern void unregister_memory_block_under_nodes(struct memory_block *mem_blk); > @@ -185,7 +183,7 @@ static inline int register_node(int nid) > { > return 0; > } > -static inline int unregister_one_node(int nid) > +static inline int unregister_node(int nid) > { > return 0; > } > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 6c050d867031..94a8f6e8811a 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1596,7 +1596,7 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) > error: > if (new_node) { > node_set_offline(nid); > - unregister_one_node(nid); > + unregister_node(nid); > } > error_memblock_remove: > if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) > @@ -2201,7 +2201,7 @@ void try_offline_node(int nid) > * node now. > */ > node_set_offline(nid); > - unregister_one_node(nid); > + unregister_node(nid); > } > EXPORT_SYMBOL(try_offline_node); > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() to a single function. 2025-09-24 19:19 ` Christophe Leroy @ 2025-09-25 5:03 ` Donet Tom 0 siblings, 0 replies; 14+ messages in thread From: Donet Tom @ 2025-09-25 5:03 UTC (permalink / raw) To: Christophe Leroy, Andrew Morton, David Hildenbrand, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang On 9/25/25 12:49 AM, Christophe Leroy wrote: > > > Le 24/09/2025 à 20:40, Donet Tom a écrit : >> unregister_one_node() and unregister_node() are small functions. >> This patch merges them into a single function named unregister_node() >> to improve code readability. > > Same comment than patch 1. It is not only because they are small that > you merge them, it is primarily because unregister_node() only has one > caller. Will update it in the next version. > >> >> No functional changes are introduced. >> >> Signed-off-by: Donet Tom <donettom@linux.ibm.com> >> --- >> drivers/base/node.c | 37 +++++++++++++++++-------------------- >> include/linux/node.h | 6 ++---- >> mm/memory_hotplug.c | 4 ++-- >> 3 files changed, 21 insertions(+), 26 deletions(-) >> >> diff --git a/drivers/base/node.c b/drivers/base/node.c >> index eab620e29c78..d460c1675c77 100644 >> --- a/drivers/base/node.c >> +++ b/drivers/base/node.c >> @@ -638,23 +638,6 @@ static void node_device_release(struct device *dev) >> kfree(to_node(dev)); >> } >> -/** >> - * unregister_node - unregister a node device >> - * @node: node going away >> - * >> - * Unregisters a node device @node. All the devices on the node >> must be >> - * unregistered before calling this function. >> - */ >> -void unregister_node(struct node *node) >> -{ >> - hugetlb_unregister_node(node); >> - compaction_unregister_node(node); >> - reclaim_unregister_node(node); >> - node_remove_accesses(node); >> - node_remove_caches(node); >> - device_unregister(&node->dev); >> -} >> - >> struct node *node_devices[MAX_NUMNODES]; >> /* >> @@ -887,12 +870,26 @@ int register_node(int nid) >> return error; >> } >> -void unregister_one_node(int nid) >> +/** >> + * unregister_node - unregister a node device >> + * @nid: nid of the node going away >> + * >> + * Unregisters the node device at node id @nid. All the devices on >> the >> + * node must be unregistered before calling this function. >> + */ >> +void unregister_node(int nid) >> { >> - if (!node_devices[nid]) >> + struct node *node = node_devices[nid]; >> + >> + if (!node) >> return; >> - unregister_node(node_devices[nid]); >> + hugetlb_unregister_node(node); >> + compaction_unregister_node(node); >> + reclaim_unregister_node(node); >> + node_remove_accesses(node); >> + node_remove_caches(node); >> + device_unregister(&node->dev); >> node_devices[nid] = NULL; >> } >> diff --git a/include/linux/node.h b/include/linux/node.h >> index 4dcf876cd0b4..d721127964b3 100644 >> --- a/include/linux/node.h >> +++ b/include/linux/node.h >> @@ -124,8 +124,6 @@ static inline void >> register_memory_blocks_under_nodes(void) >> } >> #endif >> -extern void unregister_node(struct node *node); >> - >> struct node_notify { >> int nid; >> }; >> @@ -169,7 +167,7 @@ static inline int >> hotplug_node_notifier(notifier_fn_t fn, int pri) >> extern void node_dev_init(void); >> /* Core of the node registration - only memory hotplug should use >> this */ >> extern int register_node(int nid); >> -extern void unregister_one_node(int nid); >> +extern void unregister_node(int nid); > > No 'extern' on function prototypes. Sure. Thank you very much > >> extern int register_cpu_under_node(unsigned int cpu, unsigned int >> nid); >> extern int unregister_cpu_under_node(unsigned int cpu, unsigned int >> nid); >> extern void unregister_memory_block_under_nodes(struct memory_block >> *mem_blk); >> @@ -185,7 +183,7 @@ static inline int register_node(int nid) >> { >> return 0; >> } >> -static inline int unregister_one_node(int nid) >> +static inline int unregister_node(int nid) >> { >> return 0; >> } >> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c >> index 6c050d867031..94a8f6e8811a 100644 >> --- a/mm/memory_hotplug.c >> +++ b/mm/memory_hotplug.c >> @@ -1596,7 +1596,7 @@ int add_memory_resource(int nid, struct >> resource *res, mhp_t mhp_flags) >> error: >> if (new_node) { >> node_set_offline(nid); >> - unregister_one_node(nid); >> + unregister_node(nid); >> } >> error_memblock_remove: >> if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) >> @@ -2201,7 +2201,7 @@ void try_offline_node(int nid) >> * node now. >> */ >> node_set_offline(nid); >> - unregister_one_node(nid); >> + unregister_node(nid); >> } >> EXPORT_SYMBOL(try_offline_node); > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() to a single function. 2025-09-24 18:40 ` [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() " Donet Tom 2025-09-24 19:19 ` Christophe Leroy @ 2025-09-25 8:55 ` David Hildenbrand 1 sibling, 0 replies; 14+ messages in thread From: David Hildenbrand @ 2025-09-25 8:55 UTC (permalink / raw) To: Donet Tom, Andrew Morton, Oscar Salvador Cc: Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Mike Rapoport, Dave Jiang On 24.09.25 20:40, Donet Tom wrote: > unregister_one_node() and unregister_node() are small functions. > This patch merges them into a single function named unregister_node() > to improve code readability. > > No functional changes are introduced. > > Signed-off-by: Donet Tom <donettom@linux.ibm.com> > --- LGTM with the description adjusted and "extern" dropped Acked-by: David Hildenbrand <david@redhat.com> -- Cheers David / dhildenb ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/2] drivers/base/node: fold node register and unregister functions 2025-09-24 18:40 [PATCH 0/2] drivers/base/node: fold node register and unregister functions Donet Tom 2025-09-24 18:40 ` [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function Donet Tom 2025-09-24 18:40 ` [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() " Donet Tom @ 2025-09-25 9:36 ` Mike Rapoport 2 siblings, 0 replies; 14+ messages in thread From: Mike Rapoport @ 2025-09-25 9:36 UTC (permalink / raw) To: Donet Tom Cc: Andrew Morton, David Hildenbrand, Oscar Salvador, Ritesh Harjani, Aboorva Devarajan, linux-mm, linux-kernel, Madhavan Srinivasan, linuxppc-dev, Christophe Leroy, Peter Zijlstra, Ingo Molnar, x86, Greg Kroah-Hartman, Danilo Krummrich, Dave Jiang On Thu, Sep 25, 2025 at 12:10:49AM +0530, Donet Tom wrote: > This change came from the discussion in [1]. It consists of two patches: > > The first patch merges register_one_node() and register_node(), leaving a > single register_node() function. > > The second patch merges unregister_one_node() and unregister_node(), leaving > a single unregister_node() function. > > There is no functional change in these patches. > > [1] https://lore.kernel.org/all/5512b1b6-31f8-4322-8a5f-add8d1e9b22f@redhat.com/ > > Donet Tom (2): > drivers/base/node: merge register_one_node() and register_node() to a > single function. > drivers/base/node: merge unregister_one_node() and unregister_node() > to a single function. Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> > arch/powerpc/platforms/pseries/pci_dlpar.c | 2 +- > arch/x86/mm/numa.c | 4 +- > drivers/base/node.c | 89 +++++++++------------- > include/linux/node.h | 10 +-- > mm/memory_hotplug.c | 8 +- > mm/mm_init.c | 2 +- > 6 files changed, 49 insertions(+), 66 deletions(-) > > -- > 2.51.0 > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-09-25 13:22 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-09-24 18:40 [PATCH 0/2] drivers/base/node: fold node register and unregister functions Donet Tom 2025-09-24 18:40 ` [PATCH 1/2] drivers/base/node: merge register_one_node() and register_node() to a single function Donet Tom 2025-09-24 19:15 ` Christophe Leroy 2025-09-25 5:01 ` Donet Tom 2025-09-25 8:54 ` David Hildenbrand 2025-09-25 9:34 ` Mike Rapoport 2025-09-25 9:37 ` David Hildenbrand 2025-09-25 13:21 ` Donet Tom 2025-09-25 13:20 ` Donet Tom 2025-09-24 18:40 ` [PATCH 2/2] drivers/base/node: merge unregister_one_node() and unregister_node() " Donet Tom 2025-09-24 19:19 ` Christophe Leroy 2025-09-25 5:03 ` Donet Tom 2025-09-25 8:55 ` David Hildenbrand 2025-09-25 9:36 ` [PATCH 0/2] drivers/base/node: fold node register and unregister functions Mike Rapoport
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).