diff options
author | hselasky <hselasky@FreeBSD.org> | 2012-08-13 18:34:04 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2012-08-13 18:34:04 +0000 |
commit | 8158b0ddf009ee71750ac879c96c227ea474aaf9 (patch) | |
tree | d39c884c99ca35714037967bd8e91168f43b5d8b | |
parent | ac49f9f94c356dc44ea69f7a8dfe014bc91c5806 (diff) | |
download | FreeBSD-src-8158b0ddf009ee71750ac879c96c227ea474aaf9.zip FreeBSD-src-8158b0ddf009ee71750ac879c96c227ea474aaf9.tar.gz |
Fix for missing locks due to recent change.
PR: usb/170606
MFC after: 2 weeks
-rw-r--r-- | sys/dev/usb/usb_device.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/dev/usb/usb_device.c b/sys/dev/usb/usb_device.c index 407d2ea..4b5b0e5 100644 --- a/sys/dev/usb/usb_device.c +++ b/sys/dev/usb/usb_device.c @@ -2777,8 +2777,15 @@ usbd_set_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep, uint8_t ep_mode) { usb_error_t error; + uint8_t do_unlock; - sx_assert(&udev->enum_sx, SA_LOCKED); + /* automatic locking */ + if (usbd_enum_is_locked(udev)) { + do_unlock = 0; + } else { + do_unlock = 1; + usbd_enum_lock(udev); + } if (udev->bus->methods->set_endpoint_mode != NULL) { error = (udev->bus->methods->set_endpoint_mode) ( @@ -2792,6 +2799,9 @@ usbd_set_endpoint_mode(struct usb_device *udev, struct usb_endpoint *ep, /* only set new mode regardless of error */ ep->ep_mode = ep_mode; + if (do_unlock) + usbd_enum_unlock(udev); + return (error); } |