PERFORCE change 100064 for review

Paolo Pisati piso at FreeBSD.org
Mon Jun 26 15:01:40 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=100064

Change 100064 by piso at piso_newluxor on 2006/06/26 15:00:58

	Add a filter parameter to nexus_setup_intr() and to
	inthand_add(). While here, put a comment about sparc64
	particular interrupt calling path: intr_fast() when it's
	an IH_FAST or intr_execute_handlers() for ithread.
	In this situation filters won't work as expected, cause
	intr_fast() doesn't check return code and doesn't schedule
	any ithread: it has to be fixed somehow.

Affected files ...

.. //depot/projects/soc2006/intr_filter/sparc64/include/intr_machdep.h#2 edit
.. //depot/projects/soc2006/intr_filter/sparc64/sparc64/intr_machdep.c#4 edit
.. //depot/projects/soc2006/intr_filter/sparc64/sparc64/nexus.c#2 edit

Differences ...

==== //depot/projects/soc2006/intr_filter/sparc64/include/intr_machdep.h#2 (text+ko) ====

@@ -79,8 +79,8 @@
 		   void *iva);
 void	intr_init1(void);
 void	intr_init2(void);
-int	inthand_add(const char *name, int vec, void (*handler)(void *),
-    void *arg, int flags, void **cookiep);
+int	inthand_add(const char *name, int vec, driver_filter_t *filter, 
+    void (*handler)(void *), void *arg, int flags, void **cookiep);
 int	inthand_remove(int vec, void *cookie);
 
 ih_func_t intr_fast;

==== //depot/projects/soc2006/intr_filter/sparc64/sparc64/intr_machdep.c#4 (text+ko) ====

@@ -256,8 +256,8 @@
 }
 
 int
-inthand_add(const char *name, int vec, void (*handler)(void *), void *arg,
-    int flags, void **cookiep)
+inthand_add(const char *name, int vec, driver_filter_t *filter, 
+    void (*handler)(void *), void *arg, int flags, void **cookiep)
 {
 	struct intr_vector *iv;
 	struct intr_event *ie;		/* descriptor for the IRQ */
@@ -289,11 +289,16 @@
 		}
 	}
 
-	errcode = intr_event_add_handler(ie, name, handler, arg,
+	errcode = intr_event_add_handler(ie, name, filter, handler, arg,
 	    intr_priority(flags), flags, cookiep);
 	if (errcode)
 		return (errcode);
 	
+	/* 
+	 * XXX Fast handlers are called from an asm routine(intr_fast), 
+	 * instead from intr_execute_handlers: with interrupt filters in
+	 * place, they won't work, to be fixed.
+	 */
 	intr_setup(flags & INTR_FAST ? PIL_FAST : PIL_ITHREAD, intr_fast, vec,
 	    intr_execute_handlers, iv);
 

==== //depot/projects/soc2006/intr_filter/sparc64/sparc64/nexus.c#2 (text+ko) ====

@@ -313,7 +313,7 @@
 
 static int
 nexus_setup_intr(device_t dev, device_t child, struct resource *res, int flags,
-    driver_intr_t *intr, void *arg, void **cookiep)
+    driver_filter_t *filter, driver_intr_t *intr, void *arg, void **cookiep)
 {
 	int error;
 
@@ -329,7 +329,7 @@
 		return (error);
 
 	error = inthand_add(device_get_nameunit(child), rman_get_start(res),
-	    intr, arg, flags, cookiep);
+	    filter, intr, arg, flags, cookiep);
 
 	return (error);
 }


More information about the p4-projects mailing list