Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Dec 2008 05:47:46 GMT
From:      Weongyo Jeong <weongyo@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 155039 for review
Message-ID:  <200812200547.mBK5lkvx056596@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=155039

Change 155039 by weongyo@weongyo_ws on 2008/12/20 05:47:44

	prevent sleeping without a lock

Affected files ...

.. //depot/projects/ndisusb/sys/compat/ndis/subr_usbd.c#30 edit

Differences ...

==== //depot/projects/ndisusb/sys/compat/ndis/subr_usbd.c#30 (text+ko) ====

@@ -483,6 +483,8 @@
 	usb_config_descriptor_t cd, *cdp;
 	usbd_status status;
 
+	mtx_lock(&Giant);
+
 	urb = usbd_geturb(ip);
 	ctldesc = &urb->uu_ctldesc;
 	if (ctldesc->ucd_desctype == UDESC_CONFIG) {
@@ -491,6 +493,7 @@
 		    &cd);
 		if (status != USBD_NORMAL_COMPLETION) {
 			ctldesc->ucd_trans_buflen = 0;
+			mtx_unlock(&Giant);
 			return usbd_usb2urb(status);
 		}
 		/* Get the full descriptor.  Try a few times for slow devices. */
@@ -505,6 +508,7 @@
 		}
 		if (status != USBD_NORMAL_COMPLETION) {
 			ctldesc->ucd_trans_buflen = 0;
+			mtx_unlock(&Giant);
 			return usbd_usb2urb(status);
 		}
 
@@ -534,11 +538,15 @@
 
 	if (status != USBD_NORMAL_COMPLETION) {
 		ctldesc->ucd_trans_buflen = 0;
+		mtx_unlock(&Giant);
 		return usbd_usb2urb(status);
 	}
 
 	ctldesc->ucd_trans_buflen = actlen;
 	ip->irp_iostat.isb_info = actlen;
+
+	mtx_unlock(&Giant);
+
 	return (USBD_STATUS_SUCCESS);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812200547.mBK5lkvx056596>