[patch] boot+hang on 2.1.90+SMP, IOAPIC

MOLNAR Ingo (mingo@chiara.csoma.elte.hu)
Mon, 23 Mar 1998 22:27:29 +0100 (CET)


those experiencing hangs/keyboard timeouts during bootup on SMP systems,
does the following patch help? It creates a custom mptable for systems
where we have found no IRQ entries in the mptable.

-- mingo

--- linux/arch/i386/kernel/io_apic.c.orig Sat Mar 21 06:48:48 1998
+++ linux/arch/i386/kernel/io_apic.c Sat Mar 21 09:21:25 1998
@@ -604,7 +604,24 @@
return in_ioapic_list(ioapic_blacklist);
}

+static void construct_default_ISA_mptable (void)
+{
+ int i;

+ for (i=0; i<16; i++) {
+ if (!IO_APIC_IRQ(i))
+ continue;
+
+ mp_irqs[i].mpc_irqtype = 0;
+ mp_irqs[i].mpc_irqflag = 0;
+ mp_irqs[i].mpc_srcbus = 0;
+ mp_irqs[i].mpc_srcbusirq = i;
+ mp_irqs[i].mpc_dstapic = 0;
+ mp_irqs[i].mpc_dstirq = i;
+ }
+ mp_irq_entries = i;
+}
+
void setup_IO_APIC (void)
{
int i;
@@ -630,11 +647,15 @@
for (i=0; i<nr_ioapic_registers; i++)
clear_IO_APIC_irq (i);

-#if DEBUG_1
- for (i=0; i<16; i++)
- if (IO_APIC_IRQ(i))
- setup_IO_APIC_irq_ISA_default (i);
-#endif
+ /*
+ * If there are no explicit mp irq entries: it's either one of the
+ * default configuration types or we are broken. In both cases it's
+ * fine to set up most of the low 16 IOAPIC pins to ISA defaults.
+ */
+ if (!mp_irq_entries) {
+ printk("no explicit IRQ entries, using default mptable\n");
+ construct_default_ISA_mptable();
+ }

/*
* the following IO-APIC's can be enabled:
@@ -660,6 +681,7 @@
}

init_IO_APIC_traps();
+
setup_IO_APIC_irqs ();

if (nmi_pin == -1)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu