Lines Matching full:handler
100 0, "Maximum interrupt handler executions without re-entering epoch(9)");
240 * If there is only one handler and its name is too long, just copy in in intr_event_update()
603 driver_filter_t filter, driver_intr_t handler, void *arg, u_char pri, in intr_event_add_handler() argument
610 if (ie == NULL || name == NULL || (handler == NULL && filter == NULL)) in intr_event_add_handler()
619 /* Allocate and populate an interrupt handler structure. */ in intr_event_add_handler()
622 ih->ih_handler = handler; in intr_event_add_handler()
636 /* We can only have one exclusive or sleepable handler in a event. */ in intr_event_add_handler()
650 while (ie->ie_thread == NULL && handler != NULL) { in intr_event_add_handler()
666 /* Add the new handler to the event in priority order. */ in intr_event_add_handler()
686 * interrupt handler.
704 panic("handler %p not found in interrupt event %p", cookie, ie); in intr_event_describe_handler()
754 ("interrupt handler \"%s\" has a NULL interrupt event", in intr_handler_source()
799 intr_handler_barrier(struct intr_handler *handler) in intr_handler_barrier() argument
803 ie = handler->ih_event; in intr_handler_barrier()
805 KASSERT((handler->ih_flags & IH_DEAD) == 0, in intr_handler_barrier()
806 ("update for a removed handler")); in intr_handler_barrier()
812 if ((handler->ih_flags & IH_CHANGED) == 0) { in intr_handler_barrier()
813 handler->ih_flags |= IH_CHANGED; in intr_handler_barrier()
816 while ((handler->ih_flags & IH_CHANGED) != 0) in intr_handler_barrier()
817 msleep(handler, &ie->ie_lock, 0, "ih_barr", 0); in intr_handler_barrier()
821 * Sleep until an ithread finishes executing an interrupt handler.
862 struct intr_handler *handler = (struct intr_handler *)cookie; in intr_event_remove_handler() local
867 if (handler == NULL) in intr_event_remove_handler()
869 ie = handler->ih_event; in intr_event_remove_handler()
871 ("interrupt handler \"%s\" has a NULL interrupt event", in intr_event_remove_handler()
872 handler->ih_name)); in intr_event_remove_handler()
875 CTR3(KTR_INTR, "%s: removing %s from %s", __func__, handler->ih_name, in intr_event_remove_handler()
878 if (ih == handler) in intr_event_remove_handler()
882 panic("interrupt handler \"%s\" not found in " in intr_event_remove_handler()
883 "interrupt event \"%s\"", handler->ih_name, ie->ie_name); in intr_event_remove_handler()
888 * If there is no ithread, then directly remove the handler. in intr_event_remove_handler()
891 * ie_handlers consistent and to free the removed handler only in intr_event_remove_handler()
902 KASSERT((handler->ih_flags & IH_DEAD) == 0, in intr_event_remove_handler()
904 handler->ih_flags |= IH_DEAD; in intr_event_remove_handler()
906 while (handler->ih_flags & IH_DEAD) in intr_event_remove_handler()
907 msleep(handler, &ie->ie_lock, 0, "iev_rmh", 0); in intr_event_remove_handler()
911 free(handler, M_ITHREAD); in intr_event_remove_handler()
918 struct intr_handler *handler = (struct intr_handler *)cookie; in intr_event_suspend_handler() local
921 if (handler == NULL) in intr_event_suspend_handler()
923 ie = handler->ih_event; in intr_event_suspend_handler()
925 ("interrupt handler \"%s\" has a NULL interrupt event", in intr_event_suspend_handler()
926 handler->ih_name)); in intr_event_suspend_handler()
928 handler->ih_flags |= IH_SUSP; in intr_event_suspend_handler()
929 intr_handler_barrier(handler); in intr_event_suspend_handler()
937 struct intr_handler *handler = (struct intr_handler *)cookie; in intr_event_resume_handler() local
940 if (handler == NULL) in intr_event_resume_handler()
942 ie = handler->ih_event; in intr_event_resume_handler()
944 ("interrupt handler \"%s\" has a NULL interrupt event", in intr_event_resume_handler()
945 handler->ih_name)); in intr_event_resume_handler()
952 handler->ih_flags &= ~IH_SUSP; in intr_event_resume_handler()
953 intr_handler_barrier(handler); in intr_event_resume_handler()
1038 * Add a software interrupt handler to a specified event. If a given event
1042 swi_add(struct intr_event **eventp, const char *name, driver_intr_t handler, in swi_add() argument
1064 if (handler != NULL) { in swi_add()
1065 error = intr_event_add_handler(ie, name, NULL, handler, arg, in swi_add()
1092 * Set ih_need for this handler so that if the ithread is already in swi_sched()
1093 * running it will execute this handler on the next pass. Otherwise, in swi_sched()
1115 * Remove a software interrupt handler. Currently this code does not
1135 * If this handler is marked for death, remove it from in intr_event_execute_handlers()
1184 /* Execute this handler. */ in intr_event_execute_handlers()
1212 * it to only fire the handler once per clock tick. in ithread_execute_handlers()
1337 * handler needs this frame, they should get it
1415 * Wrapper handler special handling: in intr_event_handle()
1418 * the _real_ device handler is wrapped in a couple of in intr_event_handle()
1422 * the interrupt source if the wrapped handler is composed in intr_event_handle()
1423 * of just an ithread handler. in intr_event_handle()
1464 * Dump details about an interrupt handler