BXE: alarm runs in RKM context
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 21 Jan 2015 17:20:13 +0000 (12:20 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:29 +0000 (10:12 -0500)
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).

kern/drivers/net/bxe/bxe.c

index 61dd98f..d3b967f 100644 (file)
@@ -12686,9 +12686,7 @@ bxe_update_drv_flags(struct bxe_adapter *sc,
 
 /* 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 @@ bxe_periodic_start(struct bxe_adapter *sc)
 
        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);
 }