diff options
author | Daniel J Blueman <daniel@numascale-asia.com> | 2011-12-05 03:20:37 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-12-05 11:17:21 -0500 |
commit | 64be4c1c2428e148de6081af235e2418e6a66dda (patch) | |
tree | 40c9e75b84e5deae48a3012da59c2c64be1fe369 /arch/x86/kernel/cpu | |
parent | 9a0ebfbe3f1007008d198ccc6b86783cdb312fec (diff) |
x86: Add x86_init platform override to fix up NUMA core numbering
Add an x86_init vector for handling inconsistent core numbering.
This is useful for multi-fabric platforms, such as Numascale
NumaConnect.
v2:
- use struct x86_cpuinit_ops
- provide default fall-back function to warn
Signed-off-by: Daniel J Blueman <daniel@numascale-asia.com>
Cc: Steffen Persvold <sp@numascale.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Link: http://lkml.kernel.org/r/1323073238-32686-2-git-send-email-daniel@numascale-asia.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/cpu')
-rw-r--r-- | arch/x86/kernel/cpu/amd.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/common.c | 9 |
2 files changed, 16 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index 0bab2b18bb20..ef21bdccd674 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c | |||
@@ -353,6 +353,13 @@ static void __cpuinit srat_detect_node(struct cpuinfo_x86 *c) | |||
353 | if (node == NUMA_NO_NODE) | 353 | if (node == NUMA_NO_NODE) |
354 | node = per_cpu(cpu_llc_id, cpu); | 354 | node = per_cpu(cpu_llc_id, cpu); |
355 | 355 | ||
356 | /* | ||
357 | * If core numbers are inconsistent, it's likely a multi-fabric platform, | ||
358 | * so invoke platform-specific handler | ||
359 | */ | ||
360 | if (c->phys_proc_id != node) | ||
361 | x86_cpuinit.fixup_cpu_id(c, node); | ||
362 | |||
356 | if (!node_online(node)) { | 363 | if (!node_online(node)) { |
357 | /* | 364 | /* |
358 | * Two possibilities here: | 365 | * Two possibilities here: |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index aa003b13a831..ad4da45effb9 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -1141,6 +1141,15 @@ static void dbg_restore_debug_regs(void) | |||
1141 | #endif /* ! CONFIG_KGDB */ | 1141 | #endif /* ! CONFIG_KGDB */ |
1142 | 1142 | ||
1143 | /* | 1143 | /* |
1144 | * Prints an error where the NUMA and configured core-number mismatch and the | ||
1145 | * platform didn't override this to fix it up | ||
1146 | */ | ||
1147 | void __cpuinit x86_default_fixup_cpu_id(struct cpuinfo_x86 *c, int node) | ||
1148 | { | ||
1149 | pr_err("NUMA core number %d differs from configured core number %d\n", node, c->phys_proc_id); | ||
1150 | } | ||
1151 | |||
1152 | /* | ||
1144 | * cpu_init() initializes state that is per-CPU. Some data is already | 1153 | * cpu_init() initializes state that is per-CPU. Some data is already |
1145 | * initialized (naturally) in the bootstrap process, such as the GDT | 1154 | * initialized (naturally) in the bootstrap process, such as the GDT |
1146 | * and IDT. We reload them nevertheless, this function acts as a | 1155 | * and IDT. We reload them nevertheless, this function acts as a |