ioapic: Don't allow interrupt source overrides to GSI 0 (ExtINT)
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 21 Mar 2011 13:25:07 +0000 (21:25 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 21 Mar 2011 13:25:07 +0000 (21:25 +0800)
sys/platform/pc32/apic/mpapic.c
sys/platform/pc64/apic/mpapic.c

index 5b9be8f..b65259b 100644 (file)
@@ -1267,7 +1267,15 @@ ioapic_add(void *addr, int gsi_base, int npin)
 void
 ioapic_intsrc(int irq, int gsi)
 {
+       KKASSERT(irq != gsi);
        KKASSERT(irq < 16);
+
+       if (gsi == 0) {
+               /* Don't allow mixed mode */
+               kprintf("IOAPIC: warning intsrc irq %d -> gsi 0\n", irq);
+               return;
+       }
+
        if (ioapic_conf.ioc_intsrc[irq] != -1 &&
            ioapic_conf.ioc_intsrc[irq] != gsi) {
                kprintf("IOAPIC: warning intsrc irq %d, gsi %d -> gsi %d\n",
index 849d555..c6abb0e 100644 (file)
@@ -1329,7 +1329,15 @@ ioapic_add(void *addr, int gsi_base, int npin)
 void
 ioapic_intsrc(int irq, int gsi)
 {
+       KKASSERT(irq != gsi);
        KKASSERT(irq < 16);
+
+       if (gsi == 0) {
+               /* Don't allow mixed mode */
+               kprintf("IOAPIC: warning intsrc irq %d -> gsi 0\n", irq);
+               return;
+       }
+
        if (ioapic_conf.ioc_intsrc[irq] != -1 &&
            ioapic_conf.ioc_intsrc[irq] != gsi) {
                kprintf("IOAPIC: warning intsrc irq %d, gsi %d -> gsi %d\n",