--- p4_head/sys/powerpc/include/intr_machdep.h Sun Jan 21 15:20:37 2007 +++ p4_head_intr/sys/powerpc/include/intr_machdep.h Fri Jan 26 13:54:09 2007 @@ -45,8 +45,8 @@ void intr_init(void (*)(void), int, void (*)(uintptr_t), void (*)(uintptr_t)); void intr_setup(u_int, ih_func_t *, void *, u_int); -int inthand_add(const char *, u_int, void (*)(void *), void *, int, - void **); +int inthand_add(const char *, u_int, driver_filter_t *filter, + void (*)(void *), void *, int, void **); int inthand_remove(u_int, void *); void intr_handle(u_int); --- p4_head/sys/powerpc/include/openpicvar.h Sun Jan 21 15:20:37 2007 +++ p4_head_intr/sys/powerpc/include/openpicvar.h Fri Jan 26 13:54:09 2007 @@ -58,8 +58,8 @@ struct resource *openpic_allocate_intr(device_t, device_t, int *, u_long, u_int); int openpic_setup_intr(device_t, device_t, - struct resource *, int, driver_intr_t, void *, - void **); + struct resource *, int, driver_filter_t, + driver_intr_t, void *, void **); int openpic_teardown_intr(device_t, device_t, struct resource *, void *); int openpic_release_intr(device_t dev, device_t, int, --- p4_head/sys/powerpc/powermac/hrowpic.c Sun Jan 21 15:20:38 2007 +++ p4_head_intr/sys/powerpc/powermac/hrowpic.c Fri Jan 26 13:54:09 2007 @@ -79,8 +79,8 @@ static struct resource *hrowpic_allocate_intr(device_t, device_t, int *, u_long, u_int); static int hrowpic_setup_intr(device_t, device_t, - struct resource *, int, driver_intr_t, void *, - void **); + struct resource *, int, driver_filter_t, + driver_intr_t, void *, void **); static int hrowpic_teardown_intr(device_t, device_t, struct resource *, void *); static int hrowpic_release_intr(device_t dev, device_t, int, @@ -221,7 +221,8 @@ static int hrowpic_setup_intr(device_t picdev, device_t child, struct resource *res, - int flags, driver_intr_t *intr, void *arg, void **cookiep) + int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, + void **cookiep) { struct hrowpic_softc *sc; u_long start; @@ -240,7 +241,7 @@ if (error) return (error); - error = inthand_add(device_get_nameunit(child), start, intr, arg, + error = inthand_add(device_get_nameunit(child), start, filt, intr, arg, flags, cookiep); if (!error) { --- p4_head/sys/powerpc/powerpc/intr_machdep.c Sun Jan 21 15:20:39 2007 +++ p4_head_intr/sys/powerpc/powerpc/intr_machdep.c Fri Jan 26 13:54:09 2007 @@ -133,8 +133,8 @@ } int -inthand_add(const char *name, u_int irq, void (*handler)(void *), void *arg, - int flags, void **cookiep) +inthand_add(const char *name, u_int irq, driver_filter_t *filter, + void (*handler)(void *), void *arg, int flags, void **cookiep) { struct ppc_intr *i, *orphan; u_int idx; @@ -178,7 +178,7 @@ } } - error = intr_event_add_handler(i->event, name, handler, arg, + error = intr_event_add_handler(i->event, name, filter, handler, arg, intr_priority(flags), flags, cookiep); if (!error) intrcnt_setname(i->event->ie_fullname, i->cntidx); @@ -219,13 +219,13 @@ sched = 0; critical_enter(); TAILQ_FOREACH(ih, &ie->ie_handlers, ih_next) { - if (!(ih->ih_flags & IH_FAST)) { + if (ih->ih_filter == NULL) { sched = 1; continue; } CTR4(KTR_INTR, "%s: exec %p(%p) for %s", __func__, - ih->ih_handler, ih->ih_argument, ih->ih_name); - ih->ih_handler(ih->ih_argument); + ih->ih_filter, ih->ih_argument, ih->ih_name); + ih->ih_filter(ih->ih_argument); } critical_exit(); --- p4_head/sys/powerpc/powerpc/openpic.c Sun Jan 21 15:20:39 2007 +++ p4_head_intr/sys/powerpc/powerpc/openpic.c Fri Jan 26 13:54:09 2007 @@ -228,7 +228,8 @@ int openpic_setup_intr(device_t dev, device_t child, struct resource *res, - int flags, driver_intr_t *intr, void *arg, void **cookiep) + int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg, + void **cookiep) { struct openpic_softc *sc; u_long start; @@ -253,7 +254,7 @@ if (error) return (error); - error = inthand_add(device_get_nameunit(child), start, intr, arg, + error = inthand_add(device_get_nameunit(child), start, filt, intr, arg, flags, cookiep); if (sc->sc_hwprobed)