svn commit: r200938 - head/sys/sparc64/sparc64
Marius Strobl
marius at FreeBSD.org
Thu Dec 24 12:27:23 UTC 2009
Author: marius
Date: Thu Dec 24 12:27:22 2009
New Revision: 200938
URL: http://svn.freebsd.org/changeset/base/200938
Log:
- Don't check for a valid interrupt controller on every interrupt
in intr_execute_handlers(). If we managed to get here without an
associated interrupt controller we have way bigger problems.
While at it predict stray vector interrupts as false as they are
rather unlikely.
- Don't blindly call the clear function of an interrupt controller
when adding a handler in inthand_add() as interrupt controllers
like the one driven by upa(4) are auto-clearing and thus provide
NULL instead.
Modified:
head/sys/sparc64/sparc64/intr_machdep.c
Modified: head/sys/sparc64/sparc64/intr_machdep.c
==============================================================================
--- head/sys/sparc64/sparc64/intr_machdep.c Thu Dec 24 12:26:13 2009 (r200937)
+++ head/sys/sparc64/sparc64/intr_machdep.c Thu Dec 24 12:27:22 2009 (r200938)
@@ -276,7 +276,7 @@ intr_execute_handlers(void *cookie)
struct intr_vector *iv;
iv = cookie;
- if (iv->iv_ic == NULL || intr_event_handle(iv->iv_event, NULL) != 0)
+ if (__predict_false(intr_event_handle(iv->iv_event, NULL) != 0))
intr_stray_vector(iv);
}
@@ -377,7 +377,8 @@ inthand_add(const char *name, int vec, d
#endif
ic->ic_enable(iv);
/* Ensure the interrupt is cleared, it might have triggered before. */
- ic->ic_clear(iv);
+ if (ic->ic_clear != NULL)
+ ic->ic_clear(iv);
sx_xunlock(&intr_table_lock);
return (0);
}
More information about the svn-src-head
mailing list