diff --git a/sys/dev/misc/kbdmux/kbdmux.c b/sys/dev/misc/kbdmux/kbdmux.c --- a/sys/dev/misc/kbdmux/kbdmux.c +++ b/sys/dev/misc/kbdmux/kbdmux.c @@ -449,6 +449,7 @@ taskqueue_drain(taskqueue_swi, &state->ks_task); /* release all keyboards from the mux */ + lwkt_gettoken(&kbd_token); while ((k = SLIST_FIRST(&state->ks_kbds)) != NULL) { kbd_release(k->kbd, &k->kbd); SLIST_REMOVE_HEAD(&state->ks_kbds, next); @@ -457,6 +458,7 @@ kfree(k, M_KBDMUX); } + lwkt_reltoken(&kbd_token); kbd_unregister(kbd);