summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_intr.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2005-10-26 15:51:05 +0000
committerjhb <jhb@FreeBSD.org>2005-10-26 15:51:05 +0000
commitdf1acf8cfc8911c31b6c04a64625126f87e60316 (patch)
tree82b0b193f1525122a5d2fa726e6a79eca5ba1d04 /sys/kern/kern_intr.c
parent96c89ee304b32108340680ce85ac644a0a7d9b85 (diff)
downloadFreeBSD-src-df1acf8cfc8911c31b6c04a64625126f87e60316.zip
FreeBSD-src-df1acf8cfc8911c31b6c04a64625126f87e60316.tar.gz
Add a swi_remove() function to teardown software interrupt handlers. For
now it just calls intr_event_remove_handler(), but at some point it might also be responsible for tearing down interrupt events created via swi_add.
Diffstat (limited to 'sys/kern/kern_intr.c')
-rw-r--r--sys/kern/kern_intr.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
index fe9b597..db69b83 100644
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -541,6 +541,10 @@ intr_event_schedule_thread(struct intr_event *ie)
return (0);
}
+/*
+ * Add a software interrupt handler to a specified event. If a given event
+ * is not specified, then a new event is created.
+ */
int
swi_add(struct intr_event **eventp, const char *name, driver_intr_t handler,
void *arg, int pri, enum intr_type flags, void **cookiep)
@@ -596,6 +600,19 @@ swi_sched(void *cookie, int flags)
}
}
+/*
+ * Remove a software interrupt handler. Currently this code does not
+ * remove the associated interrupt event if it becomes empty. Calling code
+ * may do so manually via intr_event_destroy(), but that's not really
+ * an optimal interface.
+ */
+int
+swi_remove(void *cookie)
+{
+
+ return (intr_event_remove_handler(cookie));
+}
+
static void
ithread_execute_handlers(struct proc *p, struct intr_event *ie)
{
OpenPOWER on IntegriCloud