Not only ACPU NUMA, but also Arm device tree based NUMA
will use nodes_cover_memory to do sanity check. So we move
this function from arch/x86 to common.

Signed-off-by: Wei Chen <[email protected]>
---
 xen/arch/x86/srat.c    | 40 ----------------------------------------
 xen/common/numa.c      | 40 ++++++++++++++++++++++++++++++++++++++++
 xen/include/xen/numa.h |  1 +
 3 files changed, 41 insertions(+), 40 deletions(-)

diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c
index dd3aa30843..dcebc7adec 100644
--- a/xen/arch/x86/srat.c
+++ b/xen/arch/x86/srat.c
@@ -308,46 +308,6 @@ acpi_numa_memory_affinity_init(const struct 
acpi_srat_mem_affinity *ma)
        num_node_memblks++;
 }
 
-/* Sanity check to catch more bad SRATs (they are amazingly common).
-   Make sure the PXMs cover all memory. */
-static int __init nodes_cover_memory(void)
-{
-       int i;
-       uint32_t nr_banks = arch_meminfo_get_nr_bank();
-
-       for (i = 0; i < nr_banks; i++) {
-               int j, found;
-               unsigned long long start, end;
-
-               if (arch_meminfo_get_ram_bank_range(i, &start, &end)) {
-                       continue;
-               }
-
-               do {
-                       found = 0;
-                       for_each_node_mask(j, memory_nodes_parsed)
-                               if (start < nodes[j].end
-                                   && end > nodes[j].start) {
-                                       if (start >= nodes[j].start) {
-                                               start = nodes[j].end;
-                                               found = 1;
-                                       }
-                                       if (end <= nodes[j].end) {
-                                               end = nodes[j].start;
-                                               found = 1;
-                                       }
-                               }
-               } while (found && start < end);
-
-               if (start < end) {
-                       printk(KERN_ERR "SRAT: No PXM for e820 range: "
-                               "%016Lx - %016Lx\n", start, end);
-                       return 0;
-               }
-       }
-       return 1;
-}
-
 void __init acpi_numa_arch_fixup(void) {}
 
 static uint64_t __initdata srat_region_mask;
diff --git a/xen/common/numa.c b/xen/common/numa.c
index 79ab250543..74960885a6 100644
--- a/xen/common/numa.c
+++ b/xen/common/numa.c
@@ -193,6 +193,46 @@ void __init cutoff_node(int i, u64 start, u64 end)
        }
 }
 
+/* Sanity check to catch more bad SRATs (they are amazingly common).
+   Make sure the PXMs cover all memory. */
+int __init nodes_cover_memory(void)
+{
+       int i;
+       uint32_t nr_banks = arch_meminfo_get_nr_bank();
+
+       for (i = 0; i < nr_banks; i++) {
+               int j, found;
+               unsigned long long start, end;
+
+               if (arch_meminfo_get_ram_bank_range(i, &start, &end)) {
+                       continue;
+               }
+
+               do {
+                       found = 0;
+                       for_each_node_mask(j, memory_nodes_parsed)
+                               if (start < nodes[j].end
+                                   && end > nodes[j].start) {
+                                       if (start >= nodes[j].start) {
+                                               start = nodes[j].end;
+                                               found = 1;
+                                       }
+                                       if (end <= nodes[j].end) {
+                                               end = nodes[j].start;
+                                               found = 1;
+                                       }
+                               }
+               } while (found && start < end);
+
+               if (start < end) {
+                       printk(KERN_ERR "SRAT: No PXM for e820 range: "
+                               "%016Lx - %016Lx\n", start, end);
+                       return 0;
+               }
+       }
+       return 1;
+}
+
 void numa_add_cpu(int cpu)
 {
     cpumask_set_cpu(cpu, &node_to_cpumask[cpu_to_node(cpu)]);
diff --git a/xen/include/xen/numa.h b/xen/include/xen/numa.h
index 6d18059bcd..094ab904c9 100644
--- a/xen/include/xen/numa.h
+++ b/xen/include/xen/numa.h
@@ -92,6 +92,7 @@ static inline void clear_node_cpumask(int cpu)
 extern uint32_t arch_meminfo_get_nr_bank(void);
 extern int arch_meminfo_get_ram_bank_range(int bank,
     unsigned long long *start, unsigned long long *end);
+extern int nodes_cover_memory(void);
 
 #endif /* CONFIG_NUMA */
 
-- 
2.25.1


Reply via email to