[rfc -tip 3/4] x86,apic: fix missed handling of discrete apics

From: Cyrill Gorcunov
Date: Mon Aug 24 2009 - 13:56:13 EST


In case of discrete (pretty old) apics we may have
cpu_has_apic bit not set but have to check if
smp_found_config (MP spec) is there and apic was
not disabled. So in case of discrete apic we need
to proceed apic handling.

Also don't forget to print apic/io-apic for such
case as well.

Signed-off-by: Cyrill Gorcunov <gorcunov@xxxxxxxxxx>
CC: "Maciej W. Rozycki" <macro@xxxxxxxxxxxxxx>
---

Perhaps this smp_found_config,disable_apic (which are
useful for insoectation in x86-32 only apart of cpu_has_apic)
are good candidate for helper function, say lapic_from_mp.
Dunno.Please comment.

arch/x86/kernel/apic/apic.c | 2 +-
arch/x86/kernel/apic/io_apic.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6.git/arch/x86/kernel/apic/apic.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/apic.c
+++ linux-2.6.git/arch/x86/kernel/apic/apic.c
@@ -978,7 +978,7 @@ void lapic_shutdown(void)
{
unsigned long flags;

- if (!cpu_has_apic)
+ if (!cpu_has_apic && (!smp_found_config || disable_apic))
return;

local_irq_save(flags);
Index: linux-2.6.git/arch/x86/kernel/apic/io_apic.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6.git/arch/x86/kernel/apic/io_apic.c
@@ -1860,7 +1860,7 @@ __apicdebuginit(int) print_all_ICs(void)
print_PIC();

/* don't print out if apic is not there */
- if (!cpu_has_apic || disable_apic)
+ if (!cpu_has_apic && (!smp_found_config || disable_apic))
return 0;

print_all_local_APICs();
@@ -1978,7 +1978,7 @@ void disable_IO_APIC(void)
/*
* Use virtual wire A mode when interrupt remapping is enabled.
*/
- if (cpu_has_apic)
+ if (cpu_has_apic || (smp_found_config && !disable_apic))
disconnect_bsp_APIC(!intr_remapping_enabled &&
ioapic_i8259.pin != -1);
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/