x86-64, NUMA: Simplify hotplug node handling in acpi_numa_memory_affinity_init()
authorTejun Heo <tj@kernel.org>
Wed, 16 Feb 2011 11:13:06 +0000 (12:13 +0100)
committerTejun Heo <tj@kernel.org>
Wed, 16 Feb 2011 11:13:06 +0000 (12:13 +0100)
Hotplug node handling in acpi_numa_memory_affinity_init() was
unnecessarily complicated with storing the original nodes[] entry and
restoring it afterwards.  Simplify it by not modifying the nodes[]
entry for hotplug nodes from the beginning.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Shaohui Zheng <shaohui.zheng@intel.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: H. Peter Anvin <hpa@linux.intel.com>
arch/x86/mm/srat_64.c

index 23498f8b09a2d7c800aaef0cae9ce54fd098138a..988b0b70ff39df15940ab9a1f99472ca41e48ccc 100644 (file)
@@ -251,7 +251,7 @@ update_nodes_add(int node, unsigned long start, unsigned long end)
 void __init
 acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
 {
-       struct bootnode *nd, oldnode;
+       struct bootnode *nd;
        unsigned long start, end;
        int node, pxm;
        int i;
@@ -289,28 +289,23 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
                bad_srat();
                return;
        }
-       nd = &nodes[node];
-       oldnode = *nd;
-       if (!node_test_and_set(node, nodes_parsed)) {
-               nd->start = start;
-               nd->end = end;
-       } else {
-               if (start < nd->start)
-                       nd->start = start;
-               if (nd->end < end)
-                       nd->end = end;
-       }
 
        printk(KERN_INFO "SRAT: Node %u PXM %u %lx-%lx\n", node, pxm,
               start, end);
 
-       if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) {
+       if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) {
+               nd = &nodes[node];
+               if (!node_test_and_set(node, nodes_parsed)) {
+                       nd->start = start;
+                       nd->end = end;
+               } else {
+                       if (start < nd->start)
+                               nd->start = start;
+                       if (nd->end < end)
+                               nd->end = end;
+               }
+       } else
                update_nodes_add(node, start, end);
-               /* restore nodes[node] */
-               *nd = oldnode;
-               if ((nd->start | nd->end) == 0)
-                       node_clear(node, nodes_parsed);
-       }
 
        node_memblk_range[num_node_memblks].start = start;
        node_memblk_range[num_node_memblks].end = end;