- 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.
This commit is contained in:
parent
e6038335e8
commit
f961171ed1
@ -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, driver_filter_t *filt,
|
||||
#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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user