diff options
author | ps <ps@FreeBSD.org> | 2000-10-25 10:40:20 +0000 |
---|---|---|
committer | ps <ps@FreeBSD.org> | 2000-10-25 10:40:20 +0000 |
commit | fd78b036689b66842fb4fdc879844147a382004b (patch) | |
tree | a5a1b1debe534ad9ecdb5acafc08f42f5d69ec53 /sys/i386/isa/nmi.c | |
parent | 71ac041c16a03dcf48f36548dd4a0d14c4a65b85 (diff) | |
download | FreeBSD-src-fd78b036689b66842fb4fdc879844147a382004b.zip FreeBSD-src-fd78b036689b66842fb4fdc879844147a382004b.tar.gz |
Fast interrupts have no associated process, therefore do not try
and schedule it. This fixes booting machines with broken MP tables.
Diffstat (limited to 'sys/i386/isa/nmi.c')
-rw-r--r-- | sys/i386/isa/nmi.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/sys/i386/isa/nmi.c b/sys/i386/isa/nmi.c index f659ee3..01b7669 100644 --- a/sys/i386/isa/nmi.c +++ b/sys/i386/isa/nmi.c @@ -695,18 +695,20 @@ inthand_remove(struct intrhand *idesc) icu_unset(ithd->irq, idesc->ih_handler); ithds[ithd->irq] = NULL; - mtx_enter(&sched_lock, MTX_SPIN); - if (ithd->it_proc->p_stat == SWAIT) { - ithd->it_proc->p_stat = SRUN; - setrunqueue(ithd->it_proc); - /* - * We don't do an ast here because we really - * don't care when it runs next. - * - * XXX: should we lower the threads priority? - */ + if ((idesc->ih_flags & INTR_FAST) == 0) { + mtx_enter(&sched_lock, MTX_SPIN); + if (ithd->it_proc->p_stat == SWAIT) { + ithd->it_proc->p_stat = SRUN; + setrunqueue(ithd->it_proc); + /* + * We don't do an ast here because we really + * don't care when it runs next. + * + * XXX: should we lower the threads priority? + */ + } + mtx_exit(&sched_lock, MTX_SPIN); } - mtx_exit(&sched_lock, MTX_SPIN); } free(idesc, M_DEVBUF); return (0); |