DF-5179 / fix.diff
--- a/sys/dev/misc/atkbd/atkbd_isa.c +++ b/sys/dev/misc/atkbd/atkbd_isa.c @@ -118,8 +118,21 @@ /* declare our interrupt handler */ rid = 0; sc->intr = bus_alloc_legacy_irq_resource(dev, &rid, irq, RF_ACTIVE); - BUS_SETUP_INTR(device_get_parent(dev), dev, sc->intr, INTR_MPSAFE, - atkbd_isa_intr, kbd, &sc->ih, NULL, NULL); + if (sc->intr == NULL) { + device_printf(dev, "unable to allocate IRQ %d\n", (int)irq); + return (ENXIO); + } + error = BUS_SETUP_INTR(device_get_parent(dev), dev, sc->intr, + INTR_MPSAFE, atkbd_isa_intr, kbd, &sc->ih, + NULL, NULL); + if (error) { + device_printf(dev, "unable to setup IRQ %d: %d\n", (int)irq, + error); + bus_release_resource(dev, SYS_RES_IRQ, rid, sc->intr); + sc->intr = NULL; + sc->ih = NULL; + return (error); + } return 0; } |