diff options
Diffstat (limited to 'arch/x86_64/kernel/setup.c')
-rw-r--r-- | arch/x86_64/kernel/setup.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c index 351d8d64c2f..cb28df14ff6 100644 --- a/arch/x86_64/kernel/setup.c +++ b/arch/x86_64/kernel/setup.c | |||
@@ -836,6 +836,23 @@ static int __init init_amd(struct cpuinfo_x86 *c) | |||
836 | int r; | 836 | int r; |
837 | int level; | 837 | int level; |
838 | 838 | ||
839 | #ifdef CONFIG_SMP | ||
840 | unsigned long value; | ||
841 | |||
842 | /* | ||
843 | * Disable TLB flush filter by setting HWCR.FFDIS on K8 | ||
844 | * bit 6 of msr C001_0015 | ||
845 | * | ||
846 | * Errata 63 for SH-B3 steppings | ||
847 | * Errata 122 for all steppings (F+ have it disabled by default) | ||
848 | */ | ||
849 | if (c->x86 == 15) { | ||
850 | rdmsrl(MSR_K8_HWCR, value); | ||
851 | value |= 1 << 6; | ||
852 | wrmsrl(MSR_K8_HWCR, value); | ||
853 | } | ||
854 | #endif | ||
855 | |||
839 | /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; | 856 | /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; |
840 | 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ | 857 | 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ |
841 | clear_bit(0*32+31, &c->x86_capability); | 858 | clear_bit(0*32+31, &c->x86_capability); |
@@ -950,13 +967,12 @@ static int __cpuinit intel_num_cpu_cores(struct cpuinfo_x86 *c) | |||
950 | static void srat_detect_node(void) | 967 | static void srat_detect_node(void) |
951 | { | 968 | { |
952 | #ifdef CONFIG_NUMA | 969 | #ifdef CONFIG_NUMA |
953 | unsigned apicid, node; | 970 | unsigned node; |
954 | int cpu = smp_processor_id(); | 971 | int cpu = smp_processor_id(); |
955 | 972 | ||
956 | /* Don't do the funky fallback heuristics the AMD version employs | 973 | /* Don't do the funky fallback heuristics the AMD version employs |
957 | for now. */ | 974 | for now. */ |
958 | apicid = phys_proc_id[cpu]; | 975 | node = apicid_to_node[hard_smp_processor_id()]; |
959 | node = apicid_to_node[apicid]; | ||
960 | if (node == NUMA_NO_NODE) | 976 | if (node == NUMA_NO_NODE) |
961 | node = 0; | 977 | node = 0; |
962 | cpu_to_node[cpu] = node; | 978 | cpu_to_node[cpu] = node; |