diff options
Diffstat (limited to 'arch/x86/kernel/numaq_32.c')
-rw-r--r-- | arch/x86/kernel/numaq_32.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/arch/x86/kernel/numaq_32.c b/arch/x86/kernel/numaq_32.c index e65281b1634b..5b20a5e7ac28 100644 --- a/arch/x86/kernel/numaq_32.c +++ b/arch/x86/kernel/numaq_32.c | |||
@@ -31,6 +31,8 @@ | |||
31 | #include <asm/numaq.h> | 31 | #include <asm/numaq.h> |
32 | #include <asm/topology.h> | 32 | #include <asm/topology.h> |
33 | #include <asm/processor.h> | 33 | #include <asm/processor.h> |
34 | #include <asm/mpspec.h> | ||
35 | #include <asm/e820.h> | ||
34 | 36 | ||
35 | #define MB_TO_PAGES(addr) ((addr) << (20 - PAGE_SHIFT)) | 37 | #define MB_TO_PAGES(addr) ((addr) << (20 - PAGE_SHIFT)) |
36 | 38 | ||
@@ -58,6 +60,8 @@ static void __init smp_dump_qct(void) | |||
58 | node_end_pfn[node] = MB_TO_PAGES( | 60 | node_end_pfn[node] = MB_TO_PAGES( |
59 | eq->hi_shrd_mem_start + eq->hi_shrd_mem_size); | 61 | eq->hi_shrd_mem_start + eq->hi_shrd_mem_size); |
60 | 62 | ||
63 | e820_register_active_regions(node, node_start_pfn[node], | ||
64 | node_end_pfn[node]); | ||
61 | memory_present(node, | 65 | memory_present(node, |
62 | node_start_pfn[node], node_end_pfn[node]); | 66 | node_start_pfn[node], node_end_pfn[node]); |
63 | node_remap_size[node] = node_memmap_size_bytes(node, | 67 | node_remap_size[node] = node_memmap_size_bytes(node, |
@@ -67,23 +71,35 @@ static void __init smp_dump_qct(void) | |||
67 | } | 71 | } |
68 | } | 72 | } |
69 | 73 | ||
70 | /* | 74 | static __init void early_check_numaq(void) |
71 | * Unlike Summit, we don't really care to let the NUMA-Q | 75 | { |
72 | * fall back to flat mode. Don't compile for NUMA-Q | 76 | /* |
73 | * unless you really need it! | 77 | * Find possible boot-time SMP configuration: |
74 | */ | 78 | */ |
79 | early_find_smp_config(); | ||
80 | /* | ||
81 | * get boot-time SMP configuration: | ||
82 | */ | ||
83 | if (smp_found_config) | ||
84 | early_get_smp_config(); | ||
85 | } | ||
86 | |||
75 | int __init get_memcfg_numaq(void) | 87 | int __init get_memcfg_numaq(void) |
76 | { | 88 | { |
89 | early_check_numaq(); | ||
90 | if (!found_numaq) | ||
91 | return 0; | ||
77 | smp_dump_qct(); | 92 | smp_dump_qct(); |
78 | return 1; | 93 | return 1; |
79 | } | 94 | } |
80 | 95 | ||
81 | static int __init numaq_tsc_disable(void) | 96 | void __init numaq_tsc_disable(void) |
82 | { | 97 | { |
98 | if (!found_numaq) | ||
99 | return -1; | ||
100 | |||
83 | if (num_online_nodes() > 1) { | 101 | if (num_online_nodes() > 1) { |
84 | printk(KERN_DEBUG "NUMAQ: disabling TSC\n"); | 102 | printk(KERN_DEBUG "NUMAQ: disabling TSC\n"); |
85 | setup_clear_cpu_cap(X86_FEATURE_TSC); | 103 | setup_clear_cpu_cap(X86_FEATURE_TSC); |
86 | } | 104 | } |
87 | return 0; | ||
88 | } | 105 | } |
89 | arch_initcall(numaq_tsc_disable); | ||