diff options
author | 2010-12-30 05:10:35 +0000 | |
---|---|---|
committer | 2010-12-30 05:10:35 +0000 | |
commit | f5797c196e30c466bf79b38f96d0808409ed1342 (patch) | |
tree | 3fb6f1255a88ebb154bc3ea8086261a448b5b433 /sys/dev/usb/usbdi.c | |
parent | add a simple __va_copy inside ifdef lint, from tim van der molen. (diff) | |
download | wireguard-openbsd-f5797c196e30c466bf79b38f96d0808409ed1342.tar.xz wireguard-openbsd-f5797c196e30c466bf79b38f96d0808409ed1342.zip |
* add a process reference counting variable to struct usbd_device
* add functions to increment and decrement the reference count, and a
function to wait until the reference count is zero
ok martynas@
Diffstat (limited to 'sys/dev/usb/usbdi.c')
-rw-r--r-- | sys/dev/usb/usbdi.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/sys/dev/usb/usbdi.c b/sys/dev/usb/usbdi.c index 01e88d93a03..78e80e7c882 100644 --- a/sys/dev/usb/usbdi.c +++ b/sys/dev/usb/usbdi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdi.c,v 1.41 2010/12/06 04:25:27 jakemsr Exp $ */ +/* $OpenBSD: usbdi.c,v 1.42 2010/12/30 05:10:35 jakemsr Exp $ */ /* $NetBSD: usbdi.c,v 1.103 2002/09/27 15:37:38 provos Exp $ */ /* $FreeBSD: src/sys/dev/usb/usbdi.c,v 1.28 1999/11/17 22:33:49 n_hibma Exp $ */ @@ -97,6 +97,26 @@ usbd_deactivate(usbd_device_handle dev) dev->dying = 1; } +void +usbd_ref_incr(usbd_device_handle dev) +{ + dev->ref_cnt++; +} + +void +usbd_ref_decr(usbd_device_handle dev) +{ + if (--dev->ref_cnt == 0 && dev->dying) + wakeup(&dev->ref_cnt); +} + +void +usbd_ref_wait(usbd_device_handle dev) +{ + while (dev->ref_cnt > 0) + tsleep(&dev->ref_cnt, PWAIT, "usbref", hz * 60); +} + static __inline int usbd_xfer_isread(usbd_xfer_handle xfer) { |