--- p4_head/sys/ia64/ia64/interrupt.c Sun Jan 21 15:19:16 2007 +++ p4_head_intr/sys/ia64/ia64/interrupt.c Fri Jan 26 13:54:09 2007 @@ -283,8 +283,9 @@ } int -ia64_setup_intr(const char *name, int irq, driver_intr_t handler, void *arg, - enum intr_type flags, void **cookiep, volatile long *cntp) +ia64_setup_intr(const char *name, int irq, driver_filter_t filter, + driver_intr_t handler, void *arg, enum intr_type flags, + void **cookiep, volatile long *cntp) { struct ia64_intr *i; int errcode; @@ -331,7 +332,7 @@ } /* Second, add this handler. */ - errcode = intr_event_add_handler(i->event, name, handler, arg, + errcode = intr_event_add_handler(i->event, name, filter, handler, arg, intr_priority(flags), flags, cookiep); if (errcode) return errcode; @@ -381,13 +382,13 @@ thread = 0; critical_enter(); TAILQ_FOREACH(ih, &ie->ie_handlers, ih_next) { - if (!(ih->ih_flags & IH_FAST)) { + if (ih->ih_filter == NULL) { thread = 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/ia64/ia64/nexus.c Sun Jan 21 15:19:17 2007 +++ p4_head_intr/sys/ia64/ia64/nexus.c Fri Jan 26 13:54:09 2007 @@ -89,7 +89,8 @@ static int nexus_release_resource(device_t, device_t, int, int, struct resource *); static int nexus_setup_intr(device_t, device_t, struct resource *, int flags, - void (*)(void *), void *, void **); + driver_filter_t filter, void (*)(void *), void *, + void **); static int nexus_teardown_intr(device_t, device_t, struct resource *, void *); static struct resource_list *nexus_get_reslist(device_t dev, device_t child); @@ -422,7 +423,8 @@ */ static int nexus_setup_intr(device_t bus, device_t child, struct resource *irq, - int flags, void (*ihand)(void *), void *arg, void **cookiep) + int flags, driver_filter_t filter, void (*ihand)(void *), + void *arg, void **cookiep) { driver_t *driver; int error; @@ -445,7 +447,7 @@ return (error); error = ia64_setup_intr(device_get_nameunit(child), - rman_get_start(irq), ihand, arg, flags, cookiep, 0); + rman_get_start(irq), filter, ihand, arg, flags, cookiep, 0); return (error); } --- p4_head/sys/ia64/include/intr.h Sun Jan 21 15:19:17 2007 +++ p4_head_intr/sys/ia64/include/intr.h Fri Jan 26 13:54:09 2007 @@ -51,9 +51,9 @@ struct sapic; void ia64_add_sapic(struct sapic *sa); -int ia64_setup_intr(const char *name, int irq, driver_intr_t handler, - void *arg, enum intr_type flags, void **cookiep, - volatile long *cntp); +int ia64_setup_intr(const char *name, int irq, driver_filter_t filter, + driver_intr_t handler, void *arg, enum intr_type flags, + void **cookiep, volatile long *cntp); int ia64_teardown_intr(void *cookie); void ia64_dispatch_intr(void *frame, unsigned long vector);