[PATCH] 2.5.68 Fix IO_APIC IRQ assignment bug

From: Chuck Ebbert (76306.1226@compuserve.com)
Date: Sun Apr 20 2003 - 17:06:51 EST


 Looks like the fix for the "ran out of interrupt sources" panic
has a problem. It will eventually assign a device the same IRQ
number as the first system vector, i.e. the local APIC timer.
I think this will fix it:

--- a/arch/i386/kernel/io_apic.c
+++ b/arch/i386/kernel/io_apic.c
@ -1117,7 +1117,7 @
         if (current_vector == SYSCALL_VECTOR)
                 goto next;
 
- if (current_vector > FIRST_SYSTEM_VECTOR) {
+ if (current_vector >= FIRST_SYSTEM_VECTOR) {
                 offset = (offset + 1) & 7;
                 current_vector = FIRST_DEVICE_VECTOR + offset;
         }

 I found this while trying to forward-port my .66 patch to make
the redirect table look like this:

 NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect:
 00 001 01 0 0 0 0 0 1 1 E7 <== timer at level E
 01 001 01 0 0 0 0 0 1 1 30 <== start at 30, not 31
 02 000 00 1 0 0 0 0 0 0 00
 03 001 01 0 0 0 0 0 1 1 38
 04 001 01 0 0 0 0 0 1 1 40
 05 001 01 0 0 0 0 0 1 1 48
 06 001 01 0 0 0 0 0 1 1 50
 07 001 01 0 0 0 0 0 1 1 58
 08 001 01 0 0 0 0 0 1 1 60
 09 001 01 0 0 0 0 0 1 1 68
 0a 001 01 0 0 0 0 0 1 1 70
 0b 001 01 0 0 0 0 0 1 1 78
 0c 001 01 0 0 0 0 0 1 1 88 <== only one device at 8
 0d 001 01 0 0 0 0 0 1 1 90
 0e 001 01 0 0 0 0 0 1 1 98
 0f 000 00 1 0 0 0 0 0 0 00
 10 001 01 1 1 0 1 0 1 1 A0
 11 001 01 1 1 0 1 0 1 1 A8
 12 001 01 1 1 0 1 0 1 1 B0
 13 001 01 1 1 0 1 0 1 1 B8
 14 001 01 0 0 0 0 0 1 1 C0
 15 000 00 1 0 0 0 0 0 0 00
 16 000 00 1 0 0 0 0 0 0 00
 17 000 00 1 0 0 0 0 0 0 00

------
 Chuck
-
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/



This archive was generated by hypermail 2b29 : Wed Apr 23 2003 - 22:00:28 EST