aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/kernel/apic/apic.c26
-rw-r--r--arch/x86/kernel/apic/probe_64.c15
2 files changed, 19 insertions, 22 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 79e5b92a5800..072aea6c630b 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -61,7 +61,7 @@ unsigned int boot_cpu_physical_apicid = -1U;
61/* 61/*
62 * The highest APIC ID seen during enumeration. 62 * The highest APIC ID seen during enumeration.
63 * 63 *
64 * This determines the messaging protocol we can use: if all APIC IDs 64 * On AMD, this determines the messaging protocol we can use: if all APIC IDs
65 * are in the 0 ... 7 range, then we can use logical addressing which 65 * are in the 0 ... 7 range, then we can use logical addressing which
66 * has some performance advantages (better broadcasting). 66 * has some performance advantages (better broadcasting).
67 * 67 *
@@ -1915,24 +1915,14 @@ void __cpuinit generic_processor_info(int apicid, int version)
1915 max_physical_apicid = apicid; 1915 max_physical_apicid = apicid;
1916 1916
1917#ifdef CONFIG_X86_32 1917#ifdef CONFIG_X86_32
1918 /* 1918 switch (boot_cpu_data.x86_vendor) {
1919 * Would be preferable to switch to bigsmp when CONFIG_HOTPLUG_CPU=y 1919 case X86_VENDOR_INTEL:
1920 * but we need to work other dependencies like SMP_SUSPEND etc 1920 if (num_processors > 8)
1921 * before this can be done without some confusion. 1921 def_to_bigsmp = 1;
1922 * if (CPU_HOTPLUG_ENABLED || num_processors > 8) 1922 break;
1923 * - Ashok Raj <ashok.raj@intel.com> 1923 case X86_VENDOR_AMD:
1924 */ 1924 if (max_physical_apicid >= 8)
1925 if (max_physical_apicid >= 8) {
1926 switch (boot_cpu_data.x86_vendor) {
1927 case X86_VENDOR_INTEL:
1928 if (!APIC_XAPIC(version)) {
1929 def_to_bigsmp = 0;
1930 break;
1931 }
1932 /* If P4 and above fall through */
1933 case X86_VENDOR_AMD:
1934 def_to_bigsmp = 1; 1925 def_to_bigsmp = 1;
1935 }
1936 } 1926 }
1937#endif 1927#endif
1938 1928
diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c
index 65edc180fc82..c4cbd3080c1c 100644
--- a/arch/x86/kernel/apic/probe_64.c
+++ b/arch/x86/kernel/apic/probe_64.c
@@ -64,16 +64,23 @@ void __init default_setup_apic_routing(void)
64 apic = &apic_x2apic_phys; 64 apic = &apic_x2apic_phys;
65 else 65 else
66 apic = &apic_x2apic_cluster; 66 apic = &apic_x2apic_cluster;
67 printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);
68 } 67 }
69#endif 68#endif
70 69
71 if (apic == &apic_flat) { 70 if (apic == &apic_flat) {
72 if (max_physical_apicid >= 8) 71 switch (boot_cpu_data.x86_vendor) {
73 apic = &apic_physflat; 72 case X86_VENDOR_INTEL:
74 printk(KERN_INFO "Setting APIC routing to %s\n", apic->name); 73 if (num_processors > 8)
74 apic = &apic_physflat;
75 break;
76 case X86_VENDOR_AMD:
77 if (max_physical_apicid >= 8)
78 apic = &apic_physflat;
79 }
75 } 80 }
76 81
82 printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);
83
77 if (is_vsmp_box()) { 84 if (is_vsmp_box()) {
78 /* need to update phys_pkg_id */ 85 /* need to update phys_pkg_id */
79 apic->phys_pkg_id = apicid_phys_pkg_id; 86 apic->phys_pkg_id = apicid_phys_pkg_id;