[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN RFC PATCH 34/40] xen: move numa_scan_nodes from x86 to common
After the previous patches preparations, numa_scan_nodes can be used by Arm and x86. So we move this function from x86 to common. As node_cover_memory will not be used cross files, we restore its static attribute in this patch. Signed-off-by: Wei Chen <wei.chen@xxxxxxx> --- xen/arch/x86/srat.c | 52 ------------------------------------ xen/common/numa.c | 54 +++++++++++++++++++++++++++++++++++++- xen/include/asm-x86/acpi.h | 3 --- xen/include/xen/numa.h | 3 ++- 4 files changed, 55 insertions(+), 57 deletions(-) diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c index c979939fdd..c9f019c307 100644 --- a/xen/arch/x86/srat.c +++ b/xen/arch/x86/srat.c @@ -361,58 +361,6 @@ void __init srat_parse_regions(u64 addr) pfn_pdx_hole_setup(mask >> PAGE_SHIFT); } -/* Use the information discovered above to actually set up the nodes. */ -int __init numa_scan_nodes(u64 start, u64 end) -{ - int i; - nodemask_t all_nodes_parsed; - - /* First clean up the node list */ - for (i = 0; i < MAX_NUMNODES; i++) - cutoff_node(i, start, end); - -#ifdef CONFIG_ACPI_NUMA - if (acpi_numa <= 0) - return -1; -#endif - - if (!nodes_cover_memory()) { - bad_srat(); - return -1; - } - - memnode_shift = compute_hash_shift(node_memblk_range, num_node_memblks, - memblk_nodeid); - - if (memnode_shift < 0) { - printk(KERN_ERR - "SRAT: No NUMA node hash function found. Contact maintainer\n"); - bad_srat(); - return -1; - } - - nodes_or(all_nodes_parsed, memory_nodes_parsed, processor_nodes_parsed); - - /* Finally register nodes */ - for_each_node_mask(i, all_nodes_parsed) - { - u64 size = nodes[i].end - nodes[i].start; - if ( size == 0 ) - printk(KERN_WARNING "SRAT: Node %u has no memory. " - "BIOS Bug or mis-configured hardware?\n", i); - - setup_node_bootmem(i, nodes[i].start, nodes[i].end); - } - for (i = 0; i < nr_cpu_ids; i++) { - if (cpu_to_node[i] == NUMA_NO_NODE) - continue; - if (!nodemask_test(cpu_to_node[i], &processor_nodes_parsed)) - numa_set_node(i, NUMA_NO_NODE); - } - numa_init_array(); - return 0; -} - static unsigned node_to_pxm(nodeid_t n) { unsigned i; diff --git a/xen/common/numa.c b/xen/common/numa.c index 4152bbe83b..8ca13e27d1 100644 --- a/xen/common/numa.c +++ b/xen/common/numa.c @@ -195,7 +195,7 @@ 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) +static int __init nodes_cover_memory(void) { int i; uint32_t nr_banks = arch_meminfo_get_nr_bank(); @@ -271,6 +271,58 @@ void __init numa_init_array(void) } } +/* Use the information discovered above to actually set up the nodes. */ +int __init numa_scan_nodes(u64 start, u64 end) +{ + int i; + nodemask_t all_nodes_parsed; + + /* First clean up the node list */ + for (i = 0; i < MAX_NUMNODES; i++) + cutoff_node(i, start, end); + +#ifdef CONFIG_ACPI_NUMA + if (acpi_numa <= 0) + return -1; +#endif + + if (!nodes_cover_memory()) { + bad_srat(); + return -1; + } + + memnode_shift = compute_hash_shift(node_memblk_range, num_node_memblks, + memblk_nodeid); + + if (memnode_shift < 0) { + printk(KERN_ERR + "SRAT: No NUMA node hash function found. Contact maintainer\n"); + bad_srat(); + return -1; + } + + nodes_or(all_nodes_parsed, memory_nodes_parsed, processor_nodes_parsed); + + /* Finally register nodes */ + for_each_node_mask(i, all_nodes_parsed) + { + u64 size = nodes[i].end - nodes[i].start; + if ( size == 0 ) + printk(KERN_WARNING "SRAT: Node %u has no memory. " + "BIOS Bug or mis-configured hardware?\n", i); + + setup_node_bootmem(i, nodes[i].start, nodes[i].end); + } + for (i = 0; i < nr_cpu_ids; i++) { + if (cpu_to_node[i] == NUMA_NO_NODE) + continue; + if (!nodemask_test(cpu_to_node[i], &processor_nodes_parsed)) + numa_set_node(i, NUMA_NO_NODE); + } + numa_init_array(); + return 0; +} + #ifdef CONFIG_NUMA_EMU int numa_fake __initdata = 0; diff --git a/xen/include/asm-x86/acpi.h b/xen/include/asm-x86/acpi.h index 33b71dfb3b..2140461ff3 100644 --- a/xen/include/asm-x86/acpi.h +++ b/xen/include/asm-x86/acpi.h @@ -101,9 +101,6 @@ extern unsigned long acpi_wakeup_address; #define ARCH_HAS_POWER_INIT 1 -extern s8 acpi_numa; -extern int numa_scan_nodes(u64 start, u64 end); - extern struct acpi_sleep_info acpi_sinfo; #define acpi_video_flags bootsym(video_flags) struct xenpf_enter_acpi_sleep; diff --git a/xen/include/xen/numa.h b/xen/include/xen/numa.h index 490381bd13..b9b5d1ad88 100644 --- a/xen/include/xen/numa.h +++ b/xen/include/xen/numa.h @@ -81,8 +81,10 @@ extern void bad_srat(void); extern void numa_init_array(void); extern void numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn); extern void numa_set_node(int cpu, nodeid_t node); +extern int numa_scan_nodes(u64 start, u64 end); extern bool numa_off; extern int numa_fake; +extern s8 acpi_numa; extern void setup_node_bootmem(nodeid_t nodeid, u64 start, u64 end); @@ -94,7 +96,6 @@ 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 |