Date: Tue, 16 Dec 2008 05:02:08 GMT From: Weongyo Jeong <weongyo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 154775 for review Message-ID: <200812160502.mBG528el098784@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=154775 Change 154775 by weongyo@weongyo_ws on 2008/12/16 05:01:30 When processing URB_FUNCTION_VENDOR_... and URB_FUNCTION_CLASS_... types of URB, sometimes it's called with locking HAL preemption lock so it can cause LORs. If the requests are going to the OUT (write operation) we try to use usbd_do_request_async() which doesn't sleep With this patch, The Shuttle XPC Accessory PN20 works. Affected files ... .. //depot/projects/ndisusb/sys/compat/ndis/subr_usbd.c#22 edit Differences ... ==== //depot/projects/ndisusb/sys/compat/ndis/subr_usbd.c#22 (text+ko) ==== @@ -590,9 +590,14 @@ USETW(req.wValue, vcreq->uvc_value); USETW(req.wLength, vcreq->uvc_trans_buflen); - mtx_lock(&Giant); - status = usbd_do_request(uaa->device, &req, vcreq->uvc_trans_buf); - mtx_unlock(&Giant); + if (vcreq->uvc_trans_flags & USBD_TRANSFER_DIRECTION_IN) { + mtx_lock(&Giant); + status = usbd_do_request(uaa->device, &req, + vcreq->uvc_trans_buf); + mtx_unlock(&Giant); + } else + status = usbd_do_request_async(uaa->device, &req, + vcreq->uvc_trans_buf); return usbd_usb2urb(status); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812160502.mBG528el098784>