Module Name: src Committed By: riastradh Date: Sun Jul 29 02:00:48 UTC 2018
Modified Files: src/sys/dev/usb: if_cue.c Log Message: Use callout_halt and usb_rem_task_wait in cue(4). To generate a diff of this commit: cvs rdiff -u -r1.78 -r1.79 src/sys/dev/usb/if_cue.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/if_cue.c diff -u src/sys/dev/usb/if_cue.c:1.78 src/sys/dev/usb/if_cue.c:1.79 --- src/sys/dev/usb/if_cue.c:1.78 Tue Jun 26 06:48:02 2018 +++ src/sys/dev/usb/if_cue.c Sun Jul 29 02:00:48 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cue.c,v 1.78 2018/06/26 06:48:02 msaitoh Exp $ */ +/* $NetBSD: if_cue.c,v 1.79 2018/07/29 02:00:48 riastradh Exp $ */ /* * Copyright (c) 1997, 1998, 1999, 2000 * Bill Paul <wp...@ee.columbia.edu>. All rights reserved. @@ -56,7 +56,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.78 2018/06/26 06:48:02 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_cue.c,v 1.79 2018/07/29 02:00:48 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -571,13 +571,16 @@ cue_detach(device_t self, int flags) DPRINTFN(2,("%s: %s: enter\n", device_xname(sc->cue_dev), __func__)); - callout_stop(&sc->cue_stat_ch); /* - * Remove any pending task. It cannot be executing because it run - * in the same thread as detach. + * XXX Halting callout guarantees no more tick tasks. What + * guarantees no more stop tasks? What guarantees no more + * calls to cue_send? Don't we need to wait for if_detach or + * something? Should we set sc->cue_dying here? Is device + * deactivation guaranteed to have already happened? */ - usb_rem_task(sc->cue_udev, &sc->cue_tick_task); - usb_rem_task(sc->cue_udev, &sc->cue_stop_task); + callout_halt(&sc->cue_stat_ch, NULL); + usb_rem_task_wait(sc->cue_udev, &sc->cue_tick_task, USB_TASKQ_DRIVER); + usb_rem_task_wait(sc->cue_udev, &sc->cue_stop_task, USB_TASKQ_DRIVER); if (!sc->cue_attached) { /* Detached before attached finished, so just bail out. */