[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN RFC PATCH 31/40] xen/x86: move nodes_cover_memory to common
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 <wei.chen@xxxxxxx> --- 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |