x86/srat: Simplify memory affinity init error handling
[platform/adaptation/renesas_rcar/renesas_kernel.git] / arch / x86 / mm / srat.c
index 4ddf497..cdd0da9 100644 (file)
@@ -149,39 +149,40 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
        int node, pxm;
 
        if (srat_disabled())
-               return -1;
-       if (ma->header.length != sizeof(struct acpi_srat_mem_affinity)) {
-               bad_srat();
-               return -1;
-       }
+               goto out_err;
+       if (ma->header.length != sizeof(struct acpi_srat_mem_affinity))
+               goto out_err_bad_srat;
        if ((ma->flags & ACPI_SRAT_MEM_ENABLED) == 0)
-               return -1;
-
+               goto out_err;
        if ((ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE) && !save_add_info())
-               return -1;
+               goto out_err;
+
        start = ma->base_address;
        end = start + ma->length;
        pxm = ma->proximity_domain;
        if (acpi_srat_revision <= 1)
                pxm &= 0xff;
+
        node = setup_node(pxm);
        if (node < 0) {
                printk(KERN_ERR "SRAT: Too many proximity domains.\n");
-               bad_srat();
-               return -1;
+               goto out_err_bad_srat;
        }
 
-       if (numa_add_memblk(node, start, end) < 0) {
-               bad_srat();
-               return -1;
-       }
+       if (numa_add_memblk(node, start, end) < 0)
+               goto out_err_bad_srat;
 
        node_set(node, numa_nodes_parsed);
 
        printk(KERN_INFO "SRAT: Node %u PXM %u [mem %#010Lx-%#010Lx]\n",
               node, pxm,
               (unsigned long long) start, (unsigned long long) end - 1);
+
        return 0;
+out_err_bad_srat:
+       bad_srat();
+out_err:
+       return -1;
 }
 
 void __init acpi_numa_arch_fixup(void) {}