diff options
author | jhb <jhb@FreeBSD.org> | 2005-10-26 15:51:05 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2005-10-26 15:51:05 +0000 |
commit | df1acf8cfc8911c31b6c04a64625126f87e60316 (patch) | |
tree | 82b0b193f1525122a5d2fa726e6a79eca5ba1d04 /sys/kern/kern_intr.c | |
parent | 96c89ee304b32108340680ce85ac644a0a7d9b85 (diff) | |
download | FreeBSD-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.c | 17 |
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) { |