Revert "x86, apic: Use logical flat on intel with <= 8 logical cpus"

Revert commit 2fbd07a5f5, as this commit
breaks an IBM platform with quad-core Xeon cpu's.

According to Suresh, this might be an IBM platform issue, as on other
Intel platforms with <= 8 logical cpu's, logical flat mode works fine
irespective of physical apic id values (inline with the xapic
architecture).

Revert this for now because of the IBM platform breakage.

Another version will be re-submitted after the complete analysis.

Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Ananth N Mavinakayanahalli 2010-01-11 15:51:04 -08:00 committed by Linus Torvalds
parent 1b4d40a517
commit 066000dd85
2 changed files with 22 additions and 19 deletions

View File

@ -62,7 +62,7 @@ unsigned int boot_cpu_physical_apicid = -1U;
/* /*
* The highest APIC ID seen during enumeration. * The highest APIC ID seen during enumeration.
* *
* On AMD, this determines the messaging protocol we can use: if all APIC IDs * This determines the messaging protocol we can use: if all APIC IDs
* are in the 0 ... 7 range, then we can use logical addressing which * are in the 0 ... 7 range, then we can use logical addressing which
* has some performance advantages (better broadcasting). * has some performance advantages (better broadcasting).
* *
@ -1898,14 +1898,24 @@ void __cpuinit generic_processor_info(int apicid, int version)
max_physical_apicid = apicid; max_physical_apicid = apicid;
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
switch (boot_cpu_data.x86_vendor) { /*
case X86_VENDOR_INTEL: * Would be preferable to switch to bigsmp when CONFIG_HOTPLUG_CPU=y
if (num_processors > 8) * but we need to work other dependencies like SMP_SUSPEND etc
def_to_bigsmp = 1; * before this can be done without some confusion.
break; * if (CPU_HOTPLUG_ENABLED || num_processors > 8)
case X86_VENDOR_AMD: * - Ashok Raj <ashok.raj@intel.com>
if (max_physical_apicid >= 8) */
if (max_physical_apicid >= 8) {
switch (boot_cpu_data.x86_vendor) {
case X86_VENDOR_INTEL:
if (!APIC_XAPIC(version)) {
def_to_bigsmp = 0;
break;
}
/* If P4 and above fall through */
case X86_VENDOR_AMD:
def_to_bigsmp = 1; def_to_bigsmp = 1;
}
} }
#endif #endif

View File

@ -64,23 +64,16 @@ void __init default_setup_apic_routing(void)
apic = &apic_x2apic_phys; apic = &apic_x2apic_phys;
else else
apic = &apic_x2apic_cluster; apic = &apic_x2apic_cluster;
printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);
} }
#endif #endif
if (apic == &apic_flat) { if (apic == &apic_flat) {
switch (boot_cpu_data.x86_vendor) { if (max_physical_apicid >= 8)
case X86_VENDOR_INTEL: apic = &apic_physflat;
if (num_processors > 8) printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);
apic = &apic_physflat;
break;
case X86_VENDOR_AMD:
if (max_physical_apicid >= 8)
apic = &apic_physflat;
}
} }
printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);
if (is_vsmp_box()) { if (is_vsmp_box()) {
/* need to update phys_pkg_id */ /* need to update phys_pkg_id */
apic->phys_pkg_id = apicid_phys_pkg_id; apic->phys_pkg_id = apicid_phys_pkg_id;