Index: sys/kern/subr_intr.c =================================================================== --- sys/kern/subr_intr.c +++ sys/kern/subr_intr.c @@ -418,6 +418,9 @@ goto found; } + log(LOG_WARNING, "interrupt table full when allocating for \"%s\"", + isrc->isrc_name); + irq_next_free = maxirqs; return (ENOSPC); @@ -445,6 +448,10 @@ if (irq_sources[isrc->isrc_irq] != isrc) return (EINVAL); + /* signal availability to isrc_alloc_irq(), if needed */ + if (irq_next_free >= maxirqs) + irq_next_free = isrc->isrc_irq; + irq_sources[isrc->isrc_irq] = NULL; isrc->isrc_irq = INTR_IRQ_INVALID; /* just to be safe */ return (0);