Fast interrupts have no associated process, therefore do not try

and schedule it.  This fixes booting machines with broken MP tables.
This commit is contained in:
Paul Saab 2000-10-25 10:40:20 +00:00
parent 2fd84f56d5
commit fbdfe15620
4 changed files with 52 additions and 44 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);