Module Name: src Committed By: skrll Date: Thu Oct 27 07:46:19 UTC 2016
Modified Files: src/sys/dev/usb [nick-nhusb]: ucom.c ugen.c uhid.c umass.c umidi.c usbdi_util.c usbdi_util.h Log Message: Retire usb_detach_{wait,broadcast} and simply use condvar(9) instead To generate a diff of this commit: cvs rdiff -u -r1.108.2.23 -r1.108.2.24 src/sys/dev/usb/ucom.c cvs rdiff -u -r1.126.2.15 -r1.126.2.16 src/sys/dev/usb/ugen.c cvs rdiff -u -r1.92.4.10 -r1.92.4.11 src/sys/dev/usb/uhid.c cvs rdiff -u -r1.149.2.14 -r1.149.2.15 src/sys/dev/usb/umass.c cvs rdiff -u -r1.65.14.12 -r1.65.14.13 src/sys/dev/usb/umidi.c cvs rdiff -u -r1.63.2.13 -r1.63.2.14 src/sys/dev/usb/usbdi_util.c cvs rdiff -u -r1.45.6.9 -r1.45.6.10 src/sys/dev/usb/usbdi_util.h 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/ucom.c diff -u src/sys/dev/usb/ucom.c:1.108.2.23 src/sys/dev/usb/ucom.c:1.108.2.24 --- src/sys/dev/usb/ucom.c:1.108.2.23 Tue Oct 25 07:32:25 2016 +++ src/sys/dev/usb/ucom.c Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ucom.c,v 1.108.2.23 2016/10/25 07:32:25 skrll Exp $ */ +/* $NetBSD: ucom.c,v 1.108.2.24 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ucom.c,v 1.108.2.23 2016/10/25 07:32:25 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ucom.c,v 1.108.2.24 2016/10/27 07:46:19 skrll Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -440,7 +440,10 @@ ucom_detach(device_t self, int flags) mutex_spin_exit(&tty_lock); } /* Wait for processes to go away. */ - usb_detach_wait(sc->sc_dev, &sc->sc_detachcv, &sc->sc_lock); + if (cv_timedwait(&sc->sc_detachcv, &sc->sc_lock, hz * 60)) { + printf("%s: %s didn't detach\n", __func__, + device_xname(sc->sc_dev)); + } } softint_disestablish(sc->sc_si); @@ -736,7 +739,7 @@ ucomclose(dev_t dev, int flag, int mode, sc->sc_methods->ucom_close(sc->sc_parent, sc->sc_portno); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detachcv); + cv_broadcast(&sc->sc_detachcv); out: sc->sc_closing = 0; @@ -773,7 +776,7 @@ ucomread(dev_t dev, struct uio *uio, int mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detachcv); + cv_broadcast(&sc->sc_detachcv); mutex_exit(&sc->sc_lock); return error; @@ -803,7 +806,7 @@ ucomwrite(dev_t dev, struct uio *uio, in mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detachcv); + cv_broadcast(&sc->sc_detachcv); mutex_exit(&sc->sc_lock); return error; @@ -833,7 +836,7 @@ ucompoll(dev_t dev, int events, struct l mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detachcv); + cv_broadcast(&sc->sc_detachcv); mutex_exit(&sc->sc_lock); return revents; @@ -869,7 +872,7 @@ ucomioctl(dev_t dev, u_long cmd, void *d mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detachcv); + cv_broadcast(&sc->sc_detachcv); mutex_exit(&sc->sc_lock); return error; Index: src/sys/dev/usb/ugen.c diff -u src/sys/dev/usb/ugen.c:1.126.2.15 src/sys/dev/usb/ugen.c:1.126.2.16 --- src/sys/dev/usb/ugen.c:1.126.2.15 Sat Jul 9 20:25:16 2016 +++ src/sys/dev/usb/ugen.c Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ugen.c,v 1.126.2.15 2016/07/09 20:25:16 skrll Exp $ */ +/* $NetBSD: ugen.c,v 1.126.2.16 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.126.2.15 2016/07/09 20:25:16 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.126.2.16 2016/10/27 07:46:19 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -812,7 +812,7 @@ ugenread(dev_t dev, struct uio *uio, int mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); mutex_exit(&sc->sc_lock); return error; @@ -1006,7 +1006,7 @@ ugenwrite(dev_t dev, struct uio *uio, in mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); mutex_exit(&sc->sc_lock); return error; @@ -1053,7 +1053,10 @@ ugen_detach(device_t self, int flags) for (i = 0; i < USB_MAX_ENDPOINTS; i++) cv_signal(&sc->sc_endpoints[i][IN].cv); /* Wait for processes to go away. */ - usb_detach_wait(sc->sc_dev, &sc->sc_detach_cv, &sc->sc_lock); + if (cv_timedwait(&sc->sc_detach_cv, &sc->sc_lock, hz * 60)) { + printf("%s: %s didn't detach\n", __func__, + device_xname(sc->sc_dev)); + } } mutex_exit(&sc->sc_lock); @@ -1836,7 +1839,7 @@ ugenioctl(dev_t dev, u_long cmd, void *a sc->sc_refcnt++; error = ugen_do_ioctl(sc, endpt, cmd, addr, flag, l); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); return error; } Index: src/sys/dev/usb/uhid.c diff -u src/sys/dev/usb/uhid.c:1.92.4.10 src/sys/dev/usb/uhid.c:1.92.4.11 --- src/sys/dev/usb/uhid.c:1.92.4.10 Sat Jul 9 20:25:16 2016 +++ src/sys/dev/usb/uhid.c Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: uhid.c,v 1.92.4.10 2016/07/09 20:25:16 skrll Exp $ */ +/* $NetBSD: uhid.c,v 1.92.4.11 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 1998, 2004, 2008, 2012 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.92.4.10 2016/07/09 20:25:16 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.92.4.11 2016/10/27 07:46:19 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -229,8 +229,10 @@ uhid_detach(device_t self, int flags) /* Wake everyone */ cv_broadcast(&sc->sc_cv); /* Wait for processes to go away. */ - usb_detach_wait(sc->sc_hdev.sc_dev, - &sc->sc_detach_cv, &sc->sc_lock); + if (cv_timedwait(&sc->sc_detach_cv, &sc->sc_lock, hz * 60)) { + printf("%s: %s didn't detach\n", __func__, + device_xname(sc->sc_hdev.sc_dev)); + } } } mutex_exit(&sc->sc_lock); @@ -457,7 +459,7 @@ uhidread(dev_t dev, struct uio *uio, int mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_hdev.sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); mutex_exit(&sc->sc_lock); return error; } @@ -507,7 +509,7 @@ uhidwrite(dev_t dev, struct uio *uio, in mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_hdev.sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); mutex_exit(&sc->sc_lock); return error; } @@ -699,7 +701,7 @@ uhidioctl(dev_t dev, u_long cmd, void *a mutex_enter(&sc->sc_lock); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_hdev.sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); mutex_exit(&sc->sc_lock); return error; } Index: src/sys/dev/usb/umass.c diff -u src/sys/dev/usb/umass.c:1.149.2.14 src/sys/dev/usb/umass.c:1.149.2.15 --- src/sys/dev/usb/umass.c:1.149.2.14 Sat Jul 9 20:25:16 2016 +++ src/sys/dev/usb/umass.c Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: umass.c,v 1.149.2.14 2016/07/09 20:25:16 skrll Exp $ */ +/* $NetBSD: umass.c,v 1.149.2.15 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -124,7 +124,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.149.2.14 2016/07/09 20:25:16 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.149.2.15 2016/10/27 07:46:19 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -812,7 +812,10 @@ umass_detach(device_t self, int flags) aprint_normal_dev(self, "waiting for refcnt\n"); #endif /* Wait for processes to go away. */ - usb_detach_wait(sc->sc_dev, &sc->sc_detach_cv, &sc->sc_lock); + if (cv_timedwait(&sc->sc_detach_cv, &sc->sc_lock, hz * 60)) { + printf("%s: %s didn't detach\n", __func__, + device_xname(sc->sc_dev)); + } } mutex_exit(&sc->sc_lock); Index: src/sys/dev/usb/umidi.c diff -u src/sys/dev/usb/umidi.c:1.65.14.12 src/sys/dev/usb/umidi.c:1.65.14.13 --- src/sys/dev/usb/umidi.c:1.65.14.12 Sat Jul 9 20:25:16 2016 +++ src/sys/dev/usb/umidi.c Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: umidi.c,v 1.65.14.12 2016/07/09 20:25:16 skrll Exp $ */ +/* $NetBSD: umidi.c,v 1.65.14.13 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 2001, 2012, 2014 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: umidi.c,v 1.65.14.12 2016/07/09 20:25:16 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: umidi.c,v 1.65.14.13 2016/10/27 07:46:19 skrll Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -458,7 +458,10 @@ umidi_detach(device_t self, int flags) mutex_enter(&sc->sc_lock); sc->sc_dying = 1; if (--sc->sc_refcnt >= 0) - usb_detach_wait(sc->sc_dev, &sc->sc_detach_cv, &sc->sc_lock); + if (cv_timedwait(&sc->sc_detach_cv, &sc->sc_lock, hz * 60)) { + printf("%s: %s didn't detach\n", __func__, + device_xname(sc->sc_dev)); + } mutex_exit(&sc->sc_lock); detach_all_mididevs(sc, flags); @@ -545,7 +548,7 @@ umidi_close(void *addr) close_in_jack(mididev->in_jack); if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); mididev->opened = 0; mididev->closing = 0; @@ -1793,7 +1796,7 @@ out_jack_output(struct umidi_jack *out_j } if (--sc->sc_refcnt < 0) - usb_detach_broadcast(sc->sc_dev, &sc->sc_detach_cv); + cv_broadcast(&sc->sc_detach_cv); return 0; } Index: src/sys/dev/usb/usbdi_util.c diff -u src/sys/dev/usb/usbdi_util.c:1.63.2.13 src/sys/dev/usb/usbdi_util.c:1.63.2.14 --- src/sys/dev/usb/usbdi_util.c:1.63.2.13 Sat Feb 6 08:01:57 2016 +++ src/sys/dev/usb/usbdi_util.c Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi_util.c,v 1.63.2.13 2016/02/06 08:01:57 skrll Exp $ */ +/* $NetBSD: usbdi_util.c,v 1.63.2.14 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.63.2.13 2016/02/06 08:01:57 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.63.2.14 2016/10/27 07:46:19 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -547,27 +547,6 @@ usbd_intr_transfer(struct usbd_xfer *xfe } void -usb_detach_wait(device_t dv, kcondvar_t *cv, kmutex_t *lock) -{ - USBHIST_FUNC(); USBHIST_CALLED(usbdebug); - - DPRINTFN(1, "waiting for dv %p", dv, 0, 0, 0); - if (cv_timedwait(cv, lock, hz * 60)) // dv, PZERO, "usbdet", hz * 60 - printf("usb_detach_wait: %s didn't detach\n", - device_xname(dv)); - DPRINTFN(1, "done", 0, 0, 0, 0); -} - -void -usb_detach_broadcast(device_t dv, kcondvar_t *cv) -{ - USBHIST_FUNC(); USBHIST_CALLED(usbdebug); - - DPRINTFN(1, "for dv %p", dv, 0, 0, 0); - cv_broadcast(cv); -} - -void usb_detach_waitold(device_t dv) { USBHIST_FUNC(); USBHIST_CALLED(usbdebug); Index: src/sys/dev/usb/usbdi_util.h diff -u src/sys/dev/usb/usbdi_util.h:1.45.6.9 src/sys/dev/usb/usbdi_util.h:1.45.6.10 --- src/sys/dev/usb/usbdi_util.h:1.45.6.9 Sat Jun 27 07:27:29 2015 +++ src/sys/dev/usb/usbdi_util.h Thu Oct 27 07:46:19 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi_util.h,v 1.45.6.9 2015/06/27 07:27:29 skrll Exp $ */ +/* $NetBSD: usbdi_util.h,v 1.45.6.10 2016/10/27 07:46:19 skrll Exp $ */ /* * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. @@ -88,13 +88,6 @@ usbd_status usbd_intr_transfer(struct us void usb_detach_waitold(device_t); void usb_detach_wakeupold(device_t); -/* - * MPSAFE versions - mutex must be at IPL_USB. - */ -void usb_detach_wait(device_t dv, kcondvar_t *, kmutex_t *); -void usb_detach_broadcast(device_t, kcondvar_t *); - - typedef struct { uByte bLength; uByte bDescriptorType;