Skip site navigation (1)Skip section navigation (2)
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>