svn commit: r296261 - in head/sys: kern sys
Svatopluk Kraus
skra at FreeBSD.org
Tue Mar 1 10:57:31 UTC 2016
Author: skra
Date: Tue Mar 1 10:57:29 2016
New Revision: 296261
URL: https://svnweb.freebsd.org/changeset/base/296261
Log:
Mark other parts of interrupt framework as INTR_SOLO option specific.
Note that isrc_arg member of struct intr_irqsrc is used only for
INTR_SOLO and IPI filter. This should be remembered if IPI filters
and their arguments will be stored on another place.
This option could be unusable very soon, if interrupt controllers
implementations will not be implemented considering it.
Modified:
head/sys/kern/subr_intr.c
head/sys/sys/intr.h
Modified: head/sys/kern/subr_intr.c
==============================================================================
--- head/sys/kern/subr_intr.c Tue Mar 1 10:39:19 2016 (r296260)
+++ head/sys/kern/subr_intr.c Tue Mar 1 10:57:29 2016 (r296261)
@@ -713,7 +713,11 @@ isrc_event_create(struct intr_irqsrc *is
* Make sure that we do not mix the two ways
* how we handle interrupt sources. Let contested event wins.
*/
+#ifdef INTR_SOLO
if (isrc->isrc_filter != NULL || isrc->isrc_event != NULL) {
+#else
+ if (isrc->isrc_event != NULL) {
+#endif
mtx_unlock(&isrc_table_lock);
intr_event_destroy(ie);
return (isrc->isrc_event != NULL ? EBUSY : 0);
@@ -1013,7 +1017,7 @@ intr_irq_remove_handler(device_t dev, u_
isrc = isrc_lookup(irq);
if (isrc == NULL || isrc->isrc_handlers == 0)
return (EINVAL);
-
+#ifdef INTR_SOLO
if (isrc->isrc_filter != NULL) {
if (isrc != cookie)
return (EINVAL);
@@ -1028,7 +1032,7 @@ intr_irq_remove_handler(device_t dev, u_
mtx_unlock(&isrc_table_lock);
return (0);
}
-
+#endif
if (isrc != intr_handler_source(cookie))
return (EINVAL);
@@ -1079,7 +1083,7 @@ intr_irq_describe(u_int irq, void *cooki
isrc = isrc_lookup(irq);
if (isrc == NULL || isrc->isrc_handlers == 0)
return (EINVAL);
-
+#ifdef INTR_SOLO
if (isrc->isrc_filter != NULL) {
if (isrc != cookie)
return (EINVAL);
@@ -1089,7 +1093,7 @@ intr_irq_describe(u_int irq, void *cooki
mtx_unlock(&isrc_table_lock);
return (0);
}
-
+#endif
error = intr_event_describe_handler(isrc->isrc_event, cookie, descr);
if (error == 0) {
mtx_lock(&isrc_table_lock);
@@ -1108,10 +1112,10 @@ intr_irq_bind(u_int irq, int cpu)
isrc = isrc_lookup(irq);
if (isrc == NULL || isrc->isrc_handlers == 0)
return (EINVAL);
-
+#ifdef INTR_SOLO
if (isrc->isrc_filter != NULL)
return (intr_isrc_assign_cpu(isrc, cpu));
-
+#endif
return (intr_event_bind(isrc->isrc_event, cpu));
}
Modified: head/sys/sys/intr.h
==============================================================================
--- head/sys/sys/intr.h Tue Mar 1 10:39:19 2016 (r296260)
+++ head/sys/sys/intr.h Tue Mar 1 10:57:29 2016 (r296261)
@@ -79,7 +79,9 @@ struct intr_irqsrc {
u_long * isrc_count;
u_int isrc_handlers;
struct intr_event * isrc_event;
+#ifdef INTR_SOLO
intr_irq_filter_t * isrc_filter;
+#endif
intr_ipi_filter_t * isrc_ipifilter;
void * isrc_arg;
#ifdef FDT
More information about the svn-src-all
mailing list