BXE: alarm runs in RKM context
The BXE alarm handler does some things that could block, like qlocks and
kmallocs. Plus it is safer to run as an RKM (but with higher latency).
diff --git a/kern/drivers/net/bxe/bxe.c b/kern/drivers/net/bxe/bxe.c
index 61dd98f..d3b967f 100644
--- a/kern/drivers/net/bxe/bxe.c
+++ b/kern/drivers/net/bxe/bxe.c
@@ -12686,9 +12686,7 @@
/* periodic timer callout routine, only runs when the interface is up */
-static void
-bxe_alarm_handler(struct alarm_waiter *waiter,
- struct hw_trapframe *hw_tf)
+static void bxe_alarm_handler(struct alarm_waiter *waiter)
{
struct timer_chain *tchain = &per_cpu_info[0].tchain;
@@ -12792,7 +12790,7 @@
if (! sc->waiter) {
sc->waiter = kzmalloc(sizeof(struct alarm_waiter), KMALLOC_WAIT);
- init_awaiter_irq(sc->waiter, bxe_alarm_handler);
+ init_awaiter(sc->waiter, bxe_alarm_handler);
}
reset_alarm_rel(tchain, sc->waiter, bxe_periodic_alarm);
}