| From foo@baz Tue Aug 14 16:14:56 CEST 2018 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Wed, 6 Jun 2018 00:57:38 +0200 |
| Subject: x86/cpu/AMD: Evaluate smp_num_siblings early |
| |
| From: Thomas Gleixner <tglx@linutronix.de> |
| |
| commit 1e1d7e25fd759eddf96d8ab39d0a90a1979b2d8c upstream |
| |
| To support force disabling of SMT it's required to know the number of |
| thread siblings early. amd_get_topology() cannot be called before the APIC |
| driver is selected, so split out the part which initializes |
| smp_num_siblings and invoke it from amd_early_init(). |
| |
| [dwmw2: Backport to 4.9] |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Acked-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kernel/cpu/amd.c | 15 ++++++++++++++- |
| 1 file changed, 14 insertions(+), 1 deletion(-) |
| |
| --- a/arch/x86/kernel/cpu/amd.c |
| +++ b/arch/x86/kernel/cpu/amd.c |
| @@ -296,13 +296,24 @@ static int nearby_node(int apicid) |
| } |
| #endif |
| |
| +#ifdef CONFIG_SMP |
| + |
| +static void amd_get_topology_early(struct cpuinfo_x86 *c) |
| +{ |
| + if (boot_cpu_has(X86_FEATURE_TOPOEXT)) { |
| + u32 eax, ebx, ecx, edx; |
| + |
| + cpuid(0x8000001e, &eax, &ebx, &ecx, &edx); |
| + smp_num_siblings = ((ebx >> 8) & 0xff) + 1; |
| + } |
| +} |
| + |
| /* |
| * Fixup core topology information for |
| * (1) AMD multi-node processors |
| * Assumption: Number of cores in each internal node is the same. |
| * (2) AMD processors supporting compute units |
| */ |
| -#ifdef CONFIG_SMP |
| static void amd_get_topology(struct cpuinfo_x86 *c) |
| { |
| u8 node_id; |
| @@ -633,6 +644,8 @@ static void early_init_amd(struct cpuinf |
| */ |
| if (cpu_has_amd_erratum(c, amd_erratum_400)) |
| set_cpu_bug(c, X86_BUG_AMD_E400); |
| + |
| + amd_get_topology_early(c); |
| } |
| |
| static void init_amd_k8(struct cpuinfo_x86 *c) |