PERFORCE change 98153 for review

Kip Macy kmacy at FreeBSD.org
Tue May 30 12:28:48 PDT 2006


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

Change 98153 by kmacy at kmacy_storage:sun4v_work on 2006/05/30 19:25:49

	for fast interrupts  call fast interrupt handler directly 
	if there are no collisions on a vector

Affected files ...

.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#8 edit

Differences ...

==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/intr_machdep.c#8 (text+ko) ====

@@ -205,9 +205,15 @@
 
 	ps = intr_disable();
 	if (vec != -1) {
-		intr_vectors[vec].iv_func = ivf;
-		intr_vectors[vec].iv_arg = iva;
-		intr_vectors[vec].iv_pri = pri;
+		if ((char *)intr_vectors[vec].iv_func == (char *)intr_stray_level) {
+			intr_vectors[vec].iv_func = ivf;
+			intr_vectors[vec].iv_arg = iva;
+		} else {
+			intr_vectors[vec].iv_func = intr_execute_handlers;
+			intr_vectors[vec].iv_arg = &intr_vectors[vec];
+		}
+		if (pri > intr_vectors[vec].iv_pri)
+			intr_vectors[vec].iv_pri = pri;
 		intr_vectors[vec].iv_vec = vec;
 	}
 	snprintf(pilname, MAXCOMLEN + 1, "pil%d: %s", pri, pil_names[pri]);
@@ -315,8 +321,9 @@
 	struct intr_vector *iv;
 	struct intr_event *ie;		/* descriptor for the IRQ */
 	struct intr_event *orphan;
-	int errcode;
-
+	int errcode, pil;
+	iv_func_t *ivf;
+	void *iva;
 	/*
 	 * Work around a race where more than one CPU may be registering
 	 * handlers on the same IRQ at the same time.
@@ -347,8 +354,11 @@
 	if (errcode)
 		return (errcode);
 	
-	intr_setup(flags & INTR_FAST ? PIL_FAST : PIL_ITHREAD, intr_fast, vec,
-	    intr_execute_handlers, iv);
+	pil = (flags & INTR_FAST) ? PIL_FAST : PIL_ITHREAD;
+	ivf = (flags & INTR_FAST) ? handler : intr_execute_handlers;
+	iva = (flags & INTR_FAST) ? arg : iv;
+
+	intr_setup(pil, intr_fast, vec, ivf, iva);
 
 	intr_stray_count[vec] = 0;
 


More information about the p4-projects mailing list