diff options
author | jhb <jhb@FreeBSD.org> | 2008-03-17 22:42:01 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2008-03-17 22:42:01 +0000 |
commit | c04bb048f627b5ef992c77aced92b491f4c8974a (patch) | |
tree | 57731c0991b2b903b93e4762f94fa493eb565f3b /sys/kern/kern_intr.c | |
parent | 10c89ab0d1faf7de0ab559184da2c88cbbe093fa (diff) | |
download | FreeBSD-src-c04bb048f627b5ef992c77aced92b491f4c8974a.zip FreeBSD-src-c04bb048f627b5ef992c77aced92b491f4c8974a.tar.gz |
Simplify the interrupt code a bit:
- Always include the ie_disable and ie_eoi methods in 'struct intr_event'
and collapse down to one intr_event_create() routine. The disable and
eoi hooks simply aren't used currently in the !INTR_FILTER case.
- Expand 'disab' to 'disable' in a few places.
- Use function casts for arm and i386:intr_eoi_src() instead of wrapper
routines since to trim one extra indirection.
Compiled on: {arm,amd64,i386,ia64,ppc,sparc64} x {FILTER, !FILTER}
Tested on: {amd64,i386} x {FILTER, !FILTER}
Diffstat (limited to 'sys/kern/kern_intr.c')
-rw-r--r-- | sys/kern/kern_intr.c | 52 |
1 files changed, 6 insertions, 46 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c index 9114430..b66e5f9 100644 --- a/sys/kern/kern_intr.c +++ b/sys/kern/kern_intr.c @@ -238,43 +238,9 @@ intr_event_update(struct intr_event *ie) CTR2(KTR_INTR, "%s: updated %s", __func__, ie->ie_fullname); } -#ifndef INTR_FILTER -int -intr_event_create(struct intr_event **event, void *source, int flags, - void (*enable)(void *), int (*assign_cpu)(void *, u_char), const char *fmt, - ...) -{ - struct intr_event *ie; - va_list ap; - - /* The only valid flag during creation is IE_SOFT. */ - if ((flags & ~IE_SOFT) != 0) - return (EINVAL); - ie = malloc(sizeof(struct intr_event), M_ITHREAD, M_WAITOK | M_ZERO); - ie->ie_source = source; - ie->ie_enable = enable; - ie->ie_assign_cpu = assign_cpu; - ie->ie_flags = flags; - ie->ie_cpu = NOCPU; - TAILQ_INIT(&ie->ie_handlers); - mtx_init(&ie->ie_lock, "intr event", NULL, MTX_DEF); - - va_start(ap, fmt); - vsnprintf(ie->ie_name, sizeof(ie->ie_name), fmt, ap); - va_end(ap); - strlcpy(ie->ie_fullname, ie->ie_name, sizeof(ie->ie_fullname)); - mtx_pool_lock(mtxpool_sleep, &event_list); - TAILQ_INSERT_TAIL(&event_list, ie, ie_list); - mtx_pool_unlock(mtxpool_sleep, &event_list); - if (event != NULL) - *event = ie; - CTR2(KTR_INTR, "%s: created %s", __func__, ie->ie_name); - return (0); -} -#else int -intr_event_create(struct intr_event **event, void *source, int flags, - void (*enable)(void *), void (*eoi)(void *), void (*disab)(void *), +intr_event_create(struct intr_event **event, void *source,int flags, + void (*disable)(void *), void (*enable)(void *), void (*eoi)(void *), int (*assign_cpu)(void *, u_char), const char *fmt, ...) { struct intr_event *ie; @@ -285,10 +251,10 @@ intr_event_create(struct intr_event **event, void *source, int flags, return (EINVAL); ie = malloc(sizeof(struct intr_event), M_ITHREAD, M_WAITOK | M_ZERO); ie->ie_source = source; + ie->ie_disable = disable; ie->ie_enable = enable; - ie->ie_assign_cpu = assign_cpu; ie->ie_eoi = eoi; - ie->ie_disab = disab; + ie->ie_assign_cpu = assign_cpu; ie->ie_flags = flags; ie->ie_cpu = NOCPU; TAILQ_INIT(&ie->ie_handlers); @@ -306,7 +272,6 @@ intr_event_create(struct intr_event **event, void *source, int flags, CTR2(KTR_INTR, "%s: created %s", __func__, ie->ie_name); return (0); } -#endif /* * Bind an interrupt event to the specified CPU. Note that not all @@ -943,13 +908,8 @@ swi_add(struct intr_event **eventp, const char *name, driver_intr_t handler, if (!(ie->ie_flags & IE_SOFT)) return (EINVAL); } else { -#ifdef INTR_FILTER error = intr_event_create(&ie, NULL, IE_SOFT, NULL, NULL, NULL, NULL, "swi%d:", pri); -#else - error = intr_event_create(&ie, NULL, IE_SOFT, - NULL, NULL, "swi%d:", pri); -#endif if (error) return (error); if (eventp != NULL) @@ -1405,8 +1365,8 @@ intr_event_handle(struct intr_event *ie, struct trapframe *frame) if (ie->ie_eoi != NULL) ie->ie_eoi(ie->ie_source); } else { - if (ie->ie_disab != NULL) - ie->ie_disab(ie->ie_source); + if (ie->ie_disable != NULL) + ie->ie_disable(ie->ie_source); } critical_exit(); |