diff options
author | hselasky <hselasky@FreeBSD.org> | 2014-06-08 20:10:29 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2014-06-08 20:10:29 +0000 |
commit | 35c04fd76f2de14a0dc3e0fdcbccef4a181ea803 (patch) | |
tree | 6b6fd9094c2096380007cac3ef2c1b6c0201594f /sys/dev/usb/usb_hub.h | |
parent | 6106e186e66f75454d6257dad160bddf21d99d2a (diff) | |
download | FreeBSD-src-35c04fd76f2de14a0dc3e0fdcbccef4a181ea803.zip FreeBSD-src-35c04fd76f2de14a0dc3e0fdcbccef4a181ea803.tar.gz |
Resolve a deadlock setting the USB configuration index from userspace
on USB HUBs by moving the code into the USB explore threads. The
deadlock happens because child devices of the USB HUB don't have the
expected reference count when called from outside the explore
thread. Only the HUB device itself, which the IOCTL interface locks,
gets the correct reference count.
MFC after: 3 days
Diffstat (limited to 'sys/dev/usb/usb_hub.h')
-rw-r--r-- | sys/dev/usb/usb_hub.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/dev/usb/usb_hub.h b/sys/dev/usb/usb_hub.h index dc8705a..16430d9 100644 --- a/sys/dev/usb/usb_hub.h +++ b/sys/dev/usb/usb_hub.h @@ -75,5 +75,6 @@ void usb_bus_power_update(struct usb_bus *bus); void usb_bus_powerd(struct usb_bus *bus); void uhub_root_intr(struct usb_bus *, const uint8_t *, uint8_t); usb_error_t uhub_query_info(struct usb_device *, uint8_t *, uint8_t *); +void uhub_explore_handle_re_enumerate(struct usb_device *); #endif /* _USB_HUB_H_ */ |