summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2003-11-14 21:02:49 +0000
committerjhb <jhb@FreeBSD.org>2003-11-14 21:02:49 +0000
commit5d2ca7489321484dd03f7fe16c04f2c09a4e58e5 (patch)
tree7b689e32ec365b3fabe95d678db44ab1aff3dfd5 /sys/i386/isa
parentde48630dfbd4851b73c7b9665f35c4b6dda706f6 (diff)
downloadFreeBSD-src-5d2ca7489321484dd03f7fe16c04f2c09a4e58e5.zip
FreeBSD-src-5d2ca7489321484dd03f7fe16c04f2c09a4e58e5.tar.gz
Always install IDT entries for ATPIC interrupt sources. The APIC no
longer uses these interrupt vectors for its ISA interrupt pins, so these entries will not be overwritten. If we get a spurious interrupt from the ATPIC when using the APIC, it will be treated as a stray interrupt instead of causing a panic.
Diffstat (limited to 'sys/i386/isa')
-rw-r--r--sys/i386/isa/atpic.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/sys/i386/isa/atpic.c b/sys/i386/isa/atpic.c
index 8a1aa7c..ba44094 100644
--- a/sys/i386/isa/atpic.c
+++ b/sys/i386/isa/atpic.c
@@ -215,16 +215,6 @@ atpic_eoi_slave(struct intsrc *isrc)
static void
atpic_enable_intr(struct intsrc *isrc)
{
- struct atpic_intsrc *ai = (struct atpic_intsrc *)isrc;
- struct atpic *ap = (struct atpic *)isrc->is_pic;
- register_t eflags;
-
- mtx_lock_spin(&icu_lock);
- eflags = intr_disable();
- setidt(ap->at_intbase + ai->at_irq, ai->at_intr, SDT_SYS386IGT,
- SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
- intr_restore(eflags);
- mtx_unlock_spin(&icu_lock);
}
static int
@@ -326,6 +316,9 @@ atpic_init(void *dummy __unused)
if (i == ICU_SLAVEID)
continue;
ai = &atintrs[i];
+ setidt(((struct atpic *)ai->at_intsrc.is_pic)->at_intbase +
+ ai->at_irq, ai->at_intr, SDT_SYS386IGT, SEL_KPL,
+ GSEL(GCODE_SEL, SEL_KPL));
intr_register_source(&ai->at_intsrc);
}
}
OpenPOWER on IntegriCloud