From 0fc44159bfcb5b0afa178f9c3f50db23aebc76ff Mon Sep 17 00:00:00 2001 From: Yasunori Goto Date: Tue, 27 Jun 2006 02:53:38 -0700 Subject: [PATCH] Register sysfs file for hotplugged new node When new node becomes enable by hot-add, new sysfs file must be created for new node. So, if new node is enabled by add_memory(), register_one_node() is called to create it. In addition, I386's arch_register_node() and a part of register_nodes() of powerpc are consolidated to register_one_node() as a generic_code(). This is tested by Tiger4(IPF) with node hot-plug emulation. Signed-off-by: Keiichiro Tokunaga Signed-off-by: Yasunori Goto Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/i386/kernel/topology.c | 9 +++------ arch/ia64/kernel/topology.c | 15 +++------------ arch/powerpc/kernel/sysfs.c | 15 ++------------- 3 files changed, 8 insertions(+), 31 deletions(-) (limited to 'arch') diff --git a/arch/i386/kernel/topology.c b/arch/i386/kernel/topology.c index 296355292c7c..1eecc2e1bd4b 100644 --- a/arch/i386/kernel/topology.c +++ b/arch/i386/kernel/topology.c @@ -38,7 +38,7 @@ int arch_register_cpu(int num){ #ifdef CONFIG_NUMA int node = cpu_to_node(num); if (node_online(node)) - parent = &node_devices[node].node; + parent = &node_devices[parent_node(node)]; #endif /* CONFIG_NUMA */ /* @@ -61,7 +61,7 @@ void arch_unregister_cpu(int num) { #ifdef CONFIG_NUMA int node = cpu_to_node(num); if (node_online(node)) - parent = &node_devices[node].node; + parent = &node_devices[parent_node(node)]; #endif /* CONFIG_NUMA */ return unregister_cpu(&cpu_devices[num].cpu, parent); @@ -74,16 +74,13 @@ EXPORT_SYMBOL(arch_unregister_cpu); #ifdef CONFIG_NUMA #include -#include - -struct i386_node node_devices[MAX_NUMNODES]; static int __init topology_init(void) { int i; for_each_online_node(i) - arch_register_node(i); + register_one_node(i); for_each_present_cpu(i) arch_register_cpu(i); diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index 879edb51d1e0..42cb05bdc680 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c @@ -26,9 +26,6 @@ #include #include -#ifdef CONFIG_NUMA -static struct node *sysfs_nodes; -#endif static struct ia64_cpu *sysfs_cpus; int arch_register_cpu(int num) @@ -36,7 +33,7 @@ int arch_register_cpu(int num) struct node *parent = NULL; #ifdef CONFIG_NUMA - parent = &sysfs_nodes[cpu_to_node(num)]; + parent = &node_devices[cpu_to_node(num)]; #endif /* CONFIG_NUMA */ #if defined (CONFIG_ACPI) && defined (CONFIG_HOTPLUG_CPU) @@ -59,7 +56,7 @@ void arch_unregister_cpu(int num) #ifdef CONFIG_NUMA int node = cpu_to_node(num); - parent = &sysfs_nodes[node]; + parent = &node_devices[node]; #endif /* CONFIG_NUMA */ return unregister_cpu(&sysfs_cpus[num].cpu, parent); @@ -74,17 +71,11 @@ static int __init topology_init(void) int i, err = 0; #ifdef CONFIG_NUMA - sysfs_nodes = kzalloc(sizeof(struct node) * MAX_NUMNODES, GFP_KERNEL); - if (!sysfs_nodes) { - err = -ENOMEM; - goto out; - } - /* * MCD - Do we want to register all ONLINE nodes, or all POSSIBLE nodes? */ for_each_online_node(i) { - if ((err = register_node(&sysfs_nodes[i], i, 0))) + if ((err = register_one_node(i))) goto out; } #endif diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c index 5bc2585c8036..338491d1604a 100644 --- a/arch/powerpc/kernel/sysfs.c +++ b/arch/powerpc/kernel/sysfs.c @@ -304,23 +304,12 @@ static struct notifier_block sysfs_cpu_nb = { /* NUMA stuff */ #ifdef CONFIG_NUMA -static struct node node_devices[MAX_NUMNODES]; - static void register_nodes(void) { int i; - for (i = 0; i < MAX_NUMNODES; i++) { - if (node_online(i)) { - int p_node = parent_node(i); - struct node *parent = NULL; - - if (p_node != i) - parent = &node_devices[p_node]; - - register_node(&node_devices[i], i, parent); - } - } + for (i = 0; i < MAX_NUMNODES; i++) + register_one_node(i); } int sysfs_add_device_to_node(struct sys_device *dev, int nid) -- cgit v1.2.3