[RFC][PATCH] linux-2.5.69_clear-smi-fix_A0

john stultz (johnstul@us.ibm.com)
06 May 2003 14:58:40 -0700


All,
I've been having problems with ACPI on a box here in our lab, it ends
up that when we clear_IO_APIC() at boot time, we clear the SMI pin that
is setup by the BIOS. This basically clobbers the SMI and we can then
never make the transition into ACPI mode.

I'm not sure if this is the right solution, but I figured I'd post it
and take the flamage if I'm just being dumb. Basically in
clear_IO_APIC_pin, I read the apic entry to make sure the delivery_mode
isn't dest_SMI. If it is, we leave the apic entry alone and return.

With this patch, the box boots and SMIs appear to function properly.

Let me know if you have any thoughts or suggestions.

thanks
-john

diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
--- a/arch/i386/kernel/io_apic.c Tue May 6 14:46:58 2003
+++ b/arch/i386/kernel/io_apic.c Tue May 6 14:46:58 2003
@@ -219,6 +219,14 @@
{
struct IO_APIC_route_entry entry;
unsigned long flags;
+
+ /* Check delivery_mode to be sure we're not clearing an SMI pin */
+ *(((int*)&entry) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
+ *(((int*)&entry) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
+ if (entry.delivery_mode == dest_SMI){
+ printk(KERN_INFO "apic %i pin %i is an SMI pin!\n", apic, pin);
+ return;
+ }

/*
* Disable it in the IO-APIC irq-routing table:

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