Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Oct 2006 15:29:36 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 107420 for review
Message-ID:  <200610071529.k97FTaMj045133@repoman.freebsd.org>

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

Change 107420 by hselasky@hselasky_mini_itx on 2006/10/07 15:29:13

	USB API change: Move "usbd_transfer_drain" into 
	"usbd_transfer_unsetup". This saves some code, and
	makes the USB API simpler. Remove usbd_transfer_drain
	and all associated structures. Add some WITNESS_WARN()
	statements.

Affected files ...

.. //depot/projects/usb/src/sys/dev/ata/ata-usb.c#10 edit
.. //depot/projects/usb/src/sys/dev/sound/usb/uaudio.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb/README#8 edit
.. //depot/projects/usb/src/sys/dev/usb/if_aue.c#13 edit
.. //depot/projects/usb/src/sys/dev/usb/if_auereg.h#9 edit
.. //depot/projects/usb/src/sys/dev/usb/if_axe.c#12 edit
.. //depot/projects/usb/src/sys/dev/usb/if_axereg.h#9 edit
.. //depot/projects/usb/src/sys/dev/usb/if_cdce.c#8 edit
.. //depot/projects/usb/src/sys/dev/usb/if_cdcereg.h#8 edit
.. //depot/projects/usb/src/sys/dev/usb/if_cue.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb/if_cuereg.h#6 edit
.. //depot/projects/usb/src/sys/dev/usb/if_kue.c#12 edit
.. //depot/projects/usb/src/sys/dev/usb/if_kuereg.h#6 edit
.. //depot/projects/usb/src/sys/dev/usb/if_rue.c#11 edit
.. //depot/projects/usb/src/sys/dev/usb/if_ruereg.h#7 edit
.. //depot/projects/usb/src/sys/dev/usb/if_udav.c#11 edit
.. //depot/projects/usb/src/sys/dev/usb/if_udavreg.h#7 edit
.. //depot/projects/usb/src/sys/dev/usb/if_ural.c#14 edit
.. //depot/projects/usb/src/sys/dev/usb/if_uralvar.h#10 edit
.. //depot/projects/usb/src/sys/dev/usb/ubsa.c#11 edit
.. //depot/projects/usb/src/sys/dev/usb/ucycom.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb/udbp.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb/ufm.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb/ufoma.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb/uftdi.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb/ugen.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb/uhid.c#12 edit
.. //depot/projects/usb/src/sys/dev/usb/uhub.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb/ukbd.c#13 edit
.. //depot/projects/usb/src/sys/dev/usb/ulpt.c#16 edit
.. //depot/projects/usb/src/sys/dev/usb/umass.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb/umct.c#7 edit
.. //depot/projects/usb/src/sys/dev/usb/umodem.c#11 edit
.. //depot/projects/usb/src/sys/dev/usb/ums.c#15 edit
.. //depot/projects/usb/src/sys/dev/usb/uplcom.c#10 edit
.. //depot/projects/usb/src/sys/dev/usb/urio.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#23 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#16 edit
.. //depot/projects/usb/src/sys/dev/usb/uscanner.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb/uvisor.c#9 edit
.. //depot/projects/usb/src/sys/dev/usb/uvscom.c#12 edit
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#7 edit
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt_var.h#7 edit
.. //depot/projects/usb/src/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c#3 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/ata/ata-usb.c#10 (text) ====

@@ -86,7 +86,6 @@
     struct bbb_cbw	cbw;
     struct bbb_csw	csw;
     struct mtx		locked_mtx;
-    struct usbd_memory_wait mem_wait;
     struct __callout	watchdog; 
 
     struct ata_channel *locked_ch;
@@ -413,7 +412,7 @@
     err = usbd_transfer_setup(uaa->device, uaa->iface_index, sc->xfer, 
 			      atausb_config, 
 			      ATAUSB_T_BBB_MAX, sc, 
-			      &(sc->locked_mtx), &(sc->mem_wait));
+			      &(sc->locked_mtx));
     /* skip reset first time */
     sc->last_xfer_no = ATAUSB_T_BBB_COMMAND;
 
@@ -501,8 +500,6 @@
 
     usbd_transfer_unsetup(sc->xfer, ATAUSB_T_MAX);
 
-    usbd_transfer_drain(&(sc->mem_wait), &(sc->locked_mtx));
-
     __callout_drain(&(sc->watchdog));
 
     mtx_destroy(&sc->locked_mtx);

==== //depot/projects/usb/src/sys/dev/sound/usb/uaudio.c#6 (text+ko) ====

@@ -132,7 +132,6 @@
 
 struct uaudio_chan {
 	struct pcmchan_caps pcm_cap; /* capabilities */
-	struct usbd_memory_wait mem_wait;
 
 	struct snd_dbuf *pcm_buf;
   const struct usbd_config *usb_cfg;
@@ -190,7 +189,6 @@
 struct umidi_chan {
 
     struct umidi_sub_chan sub[UMIDI_CABLES_MAX];
-    struct usbd_memory_wait mem_wait;
     struct mtx mtx;
 
     struct usbd_xfer *xfer[UMIDI_N_TRANSFER];
@@ -216,7 +214,6 @@
 	struct uaudio_chan  sc_rec_chan;
 	struct uaudio_chan  sc_play_chan;
 	struct umidi_chan   sc_midi_chan;
-	struct usbd_memory_wait sc_mixer_mem;
 
 	struct usbd_device * sc_udev;
 	struct usbd_xfer * sc_mixer_xfer[1];
@@ -1434,7 +1431,7 @@
 
 	if (usbd_transfer_setup(sc->sc_udev, iface_index, ch->xfer,
 				ch->usb_cfg, UAUDIO_NCHANBUFS, ch,
-				ch->pcm_mtx, &(ch->mem_wait))) {
+				ch->pcm_mtx)) {
 	    DPRINTF(0, "could not allocate USB transfers!\n");
 	    goto error;
 	}
@@ -1456,10 +1453,6 @@
 
 	usbd_transfer_unsetup(ch->xfer, UAUDIO_NCHANBUFS);
 
-	if (ch->pcm_mtx) {
-	    usbd_transfer_drain(&(ch->mem_wait), ch->pcm_mtx);
-	}
-
 	ch->valid = 0;
 
 	return 0;
@@ -3192,7 +3185,7 @@
 
 	if (usbd_transfer_setup(sc->sc_udev, sc->sc_mixer_iface_index,
 				sc->sc_mixer_xfer, uaudio_mixer_config, 1, sc,
-				sc->sc_mixer_lock, &(sc->sc_mixer_mem))) {
+				sc->sc_mixer_lock)) {
 	    DPRINTF(0, "could not allocate USB transfer for audio mixer!\n");
 	    return ENOMEM;
 	}
@@ -3209,9 +3202,6 @@
 
 	usbd_transfer_unsetup(sc->sc_mixer_xfer, 1);
 
-	if (sc->sc_mixer_lock) {
-	    usbd_transfer_drain(&(sc->sc_mixer_mem), sc->sc_mixer_lock);
-	}
 	return 0;
 }
 
@@ -3764,7 +3754,7 @@
 
         error = usbd_transfer_setup(uaa->device, chan->iface_index, 
                                     chan->xfer, umidi_config, UMIDI_N_TRANSFER, 
-                                    chan, &(chan->mtx), &(chan->mem_wait));
+                                    chan, &(chan->mtx));
         if (error) {
             DPRINTF(0, "error=%s\n", usbd_errstr(error)) ;
             goto detach;
@@ -3846,8 +3836,6 @@
 
 	usbd_transfer_unsetup(chan->xfer, UMIDI_N_TRANSFER);
 
-	usbd_transfer_drain(&(chan->mem_wait), &(chan->mtx));
-
 	mtx_destroy(&(chan->mtx));
 
 	return 0;

==== //depot/projects/usb/src/sys/dev/usb/README#8 (text+ko) ====

@@ -117,7 +117,7 @@
 /*------------------------------------------------------------------------*
  * usbd_status 
  * usbd_transfer_setup(udev, iface_index, pxfer, setup_start,
- *                     n_setup, priv_sc, priv_mtx, priv_wait)
+ *                     n_setup, priv_sc, priv_mtx)
  *------------------------------------------------------------------------*/
 
 - "udev" is a pointer to "struct usbd_device"
@@ -139,10 +139,6 @@
 - "priv_mtx" is the private mutex protecting the transfer structure and
   the softc. This pointer is used to initialize "xfer->priv_mtx".
 
-- "priv_wait" is a pointer to a structure of type "struct usbd_memory_wait",
-  that is passed to "usbd_transfer_drain()" after "usbd_transfer_unsetup()"
-  to wait for the USB system to finish using the "priv_mtx" mutex.
-
 /*------------------------------------------------------------------------*
  * void
  * usbd_transfer_unsetup(pxfer, n_setup)

==== //depot/projects/usb/src/sys/dev/usb/if_aue.c#13 (text+ko) ====

@@ -840,7 +840,7 @@
 
 	error = usbd_transfer_setup(uaa->device, AUE_IFACE_IDX, 
 				    sc->sc_xfer, aue_config, AUE_ENDPT_MAX,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 		device_printf(dev, "allocating USB "
 			      "transfers failed!\n");
@@ -994,8 +994,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, AUE_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_auereg.h#9 (text+ko) ====

@@ -199,7 +199,6 @@
 
 struct aue_softc {
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
 	struct aue_rxpkt	sc_rxpkt;

==== //depot/projects/usb/src/sys/dev/usb/if_axe.c#12 (text+ko) ====

@@ -643,7 +643,7 @@
 
 	error = usbd_transfer_setup(uaa->device, AXE_IFACE_IDX, 
 				    sc->sc_xfer, axe_config, AXE_ENDPT_MAX,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 		device_printf(dev, "allocating USB "
 			      "transfers failed!\n");
@@ -795,8 +795,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, AXE_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_axereg.h#9 (text+ko) ====

@@ -114,7 +114,6 @@
 
 struct axe_softc {
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
 

==== //depot/projects/usb/src/sys/dev/usb/if_cdce.c#8 (text+ko) ====

@@ -323,7 +323,7 @@
 	    error = usbd_transfer_setup
 	      (uaa->device, sc->sc_data_iface_index, 
 	       sc->sc_xfer, cdce_config, CDCE_ENDPT_MAX,
-	       sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+	       sc, &(sc->sc_mtx));
 
 	    if (error == 0) {
 	        break;
@@ -430,8 +430,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, CDCE_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	mtx_destroy(&(sc->sc_mtx));
 
 	return (0);

==== //depot/projects/usb/src/sys/dev/usb/if_cdcereg.h#8 (text+ko) ====

@@ -43,7 +43,6 @@
 };
 
 struct cdce_softc {
-	struct usbd_memory_wait	sc_mem_wait;
 	struct ifmedia		sc_ifmedia;
 	struct mtx		sc_mtx;
 

==== //depot/projects/usb/src/sys/dev/usb/if_cue.c#10 (text+ko) ====

@@ -517,7 +517,7 @@
 
 	error = usbd_transfer_setup(uaa->device, CUE_IFACE_IDX, 
 				    sc->sc_xfer, cue_config, CUE_ENDPT_MAX,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    device_printf(dev, "allocating USB "
 			  "transfers failed!\n");
@@ -628,8 +628,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, CUE_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_cuereg.h#6 (text+ko) ====

@@ -122,7 +122,6 @@
 
 struct cue_softc {
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
 

==== //depot/projects/usb/src/sys/dev/usb/if_kue.c#12 (text+ko) ====

@@ -544,7 +544,7 @@
 
 	error = usbd_transfer_setup(uaa->device, KUE_IFACE_IDX, 
 				    sc->sc_xfer, kue_config, KUE_ENDPT_MAX,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    device_printf(dev, "allocating USB "
 			  "transfers failed!\n");
@@ -663,8 +663,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, KUE_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_kuereg.h#6 (text+ko) ====

@@ -128,7 +128,6 @@
 struct kue_softc {
 
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
 	struct kue_ether_desc	sc_desc;

==== //depot/projects/usb/src/sys/dev/usb/if_rue.c#11 (text+ko) ====

@@ -755,7 +755,7 @@
 
 	error = usbd_transfer_setup(uaa->device, RUE_IFACE_IDX, 
 				    sc->sc_xfer, rue_config, RUE_ENDPT_MAX,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 		device_printf(dev, "allocating USB "
 			      "transfers failed!\n");
@@ -895,8 +895,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, RUE_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_ruereg.h#7 (text+ko) ====

@@ -168,7 +168,6 @@
 struct rue_softc {
 
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
 

==== //depot/projects/usb/src/sys/dev/usb/if_udav.c#11 (text+ko) ====

@@ -362,7 +362,7 @@
 
 	error = usbd_transfer_setup(uaa->device, UDAV_IFACE_INDEX, 
 				    sc->sc_xfer, udav_config, UDAV_ENDPT_MAX,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 		device_printf(dev, "allocating USB "
 			      "transfers failed!\n");
@@ -502,8 +502,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UDAV_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_udavreg.h#7 (text+ko) ====

@@ -138,7 +138,6 @@
 
 struct udav_softc {
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
 

==== //depot/projects/usb/src/sys/dev/usb/if_ural.c#14 (text+ko) ====

@@ -554,7 +554,7 @@
 
 	error = usbd_transfer_setup(uaa->device, RAL_IFACE_INDEX, 
 				    sc->sc_xfer, ural_config, URAL_N_TRANSFER, 
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    device_printf(dev, "could not allocate USB transfers, "
 			  "err=%s\n", usbd_errstr(error)) ;
@@ -616,8 +616,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, URAL_N_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	__callout_drain(&(sc->sc_watchdog));

==== //depot/projects/usb/src/sys/dev/usb/if_uralvar.h#10 (text+ko) ====

@@ -116,7 +116,6 @@
 	struct ural_amrr		sc_amrr;
 	struct ieee80211_beacon_offsets	sc_bo;
 	struct mtx			sc_mtx;
-	struct usbd_memory_wait		sc_mem_wait;
 	struct __callout		sc_watchdog;
 	struct ural_bbp_prom 		sc_bbp_prom[16];
 	struct usbd_xfer 		*sc_xfer[URAL_N_TRANSFER];

==== //depot/projects/usb/src/sys/dev/usb/ubsa.c#11 (text+ko) ====

@@ -152,7 +152,6 @@
 
 struct	ubsa_softc {
 	struct ucom_softc	sc_ucom;
-	struct usbd_memory_wait sc_mem_wait;
 
 	struct usbd_xfer *	sc_xfer[UBSA_N_TRANSFER];
 
@@ -518,7 +517,7 @@
 
 	error = usbd_transfer_setup(uaa->device, sc->sc_iface_index,
 				    sc->sc_xfer, ubsa_config, UBSA_N_TRANSFER,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    DPRINTF(0, "could not allocate all pipes\n");
 	    goto detach;
@@ -556,8 +555,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UBSA_N_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	return 0;
 }
 

==== //depot/projects/usb/src/sys/dev/usb/ucycom.c#7 (text+ko) ====

@@ -62,7 +62,6 @@
 
 struct ucycom_softc {
 	struct ucom_softc	sc_ucom;
-	struct usbd_memory_wait	sc_mem_wait;
 
 	struct usbd_device *	sc_udev;
 	struct usbd_xfer *	sc_xfer[UCYCOM_ENDPT_MAX];
@@ -333,7 +332,7 @@
 
 	error = usbd_transfer_setup(uaa->device, UCYCOM_IFACE_INDEX,
 				    sc->sc_xfer, ucycom_config, UCYCOM_ENDPT_MAX,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    device_printf(dev, "allocating USB "
 			  "transfers failed!\n");
@@ -373,8 +372,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UCYCOM_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	return 0;
 }
 

==== //depot/projects/usb/src/sys/dev/usb/udbp.c#7 (text+ko) ====

@@ -101,7 +101,6 @@
 struct udbp_softc {
 
 	struct mtx		sc_mtx;
-	struct usbd_memory_wait sc_mem_wait;
 	struct ng_bt_mbufq	sc_xmitq_hipri;	/* hi-priority transmit queue */
 	struct ng_bt_mbufq	sc_xmitq;	/* low-priority transmit queue */
 
@@ -336,7 +335,7 @@
 
   	error = usbd_transfer_setup(uaa->device, uaa->iface_index, 
 				    sc->sc_xfer, udbp_config,  UDBP_T_MAX, 
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    DPRINTF(sc, 0, "error=%s\n", usbd_errstr(error)) ;
 	    goto detach;
@@ -393,8 +392,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UDBP_T_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	mtx_destroy(&(sc->sc_mtx));
 
 	/* destroy queues */

==== //depot/projects/usb/src/sys/dev/usb/ufm.c#9 (text+ko) ====

@@ -72,7 +72,6 @@
 struct ufm_softc {
 	struct usb_cdev		sc_cdev;
 	struct mtx		sc_mtx;
-	struct usbd_memory_wait sc_mem_wait;
 
 	struct usbd_device 	*sc_udev;
 	struct usbd_xfer 	*sc_xfer[UFM_N_TRANSFER];
@@ -193,7 +192,7 @@
 
 	error = usbd_transfer_setup(uaa->device, uaa->iface_index, 
 				    sc->sc_xfer, ufm_config, UFM_N_TRANSFER,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    DPRINTF(sc, 0, "error=%s\n", usbd_errstr(error)) ;
 	    goto detach;
@@ -228,8 +227,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UFM_N_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	mtx_destroy(&(sc->sc_mtx));
 
 	return 0;

==== //depot/projects/usb/src/sys/dev/usb/ufoma.c#9 (text+ko) ====

@@ -152,7 +152,6 @@
 
 	struct ucom_softc	sc_ucom;
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait sc_mem_wait;
 	usb_cdc_line_state_t	sc_line_state; /* current line state */
 
 	struct usbd_xfer *	sc_ctrl_xfer[UFOMA_CTRL_ENDPT_MAX];
@@ -478,7 +477,7 @@
 	error = usbd_transfer_setup
 	  (uaa->device, sc->sc_ctrl_iface_index, 
 	   sc->sc_ctrl_xfer, ufoma_ctrl_config, UFOMA_CTRL_ENDPT_MAX,
-	   sc, &Giant, &(sc->sc_mem_wait));
+	   sc, &Giant);
 
 	if (error) {
 	    device_printf(dev, "allocating control USB "
@@ -569,8 +568,6 @@
 
         usbd_transfer_unsetup(sc->sc_bulk_xfer, UFOMA_BULK_ENDPT_MAX);
 
-        usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
         usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	if (sc->sc_modetable) {
@@ -1322,7 +1319,7 @@
 	error = usbd_transfer_setup
 	  (uaa->device, sc->sc_data_iface_index, 
 	   sc->sc_bulk_xfer, ufoma_bulk_config, UFOMA_BULK_ENDPT_MAX,
-	   sc, &Giant, &(sc->sc_mem_wait));
+	   sc, &Giant);
 
 	if (error) {
 	    device_printf(dev, "allocating BULK USB "

==== //depot/projects/usb/src/sys/dev/usb/uftdi.c#10 (text+ko) ====

@@ -97,7 +97,6 @@
 struct uftdi_softc {
 	struct ucom_softc	sc_ucom;
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 
 	struct usbd_device *	sc_udev;
 	struct usbd_xfer *	sc_xfer[UFTDI_ENDPT_MAX];
@@ -447,7 +446,7 @@
 
 	error = usbd_transfer_setup(uaa->device, sc->sc_iface_index, 
 				    sc->sc_xfer, uftdi_config, UFTDI_ENDPT_MAX,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    device_printf(dev, "allocating USB "
 			  "transfers failed!\n");
@@ -505,8 +504,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UFTDI_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	return 0;

==== //depot/projects/usb/src/sys/dev/usb/ugen.c#9 (text+ko) ====

@@ -126,7 +126,6 @@
   struct ugen_endpoint	  sc_endpoints[USB_MAX_ENDPOINTS];
   struct ugen_endpoint	  sc_endpoints_end[0];
   struct mtx		  sc_mtx;
-  struct usbd_memory_wait sc_mem_wait;
 };
 
 extern cdevsw_t ugen_cdevsw;
@@ -239,9 +238,6 @@
 	/* destroy all devices */
 	ugen_destroy_devnodes(sc, 0);
 
-	/* wait for memory to get freed */
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	mtx_destroy(&sc->sc_mtx);
 
 	return 0;
@@ -413,21 +409,25 @@
 	 */
 	error = usbd_transfer_setup(udev, iface_index, &temp[0], 
 				    setup, n_setup, 
-				    sce, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sce, &(sc->sc_mtx));
 
 	mtx_lock(&sc->sc_mtx);
 
-	sce->state &= ~context_bit;
-
 	if(sce->state & UGEN_CLOSING)
 	{
-		wakeup(sce);
-		error = USBD_CANCELLED;
+		mtx_unlock(&(sc->sc_mtx));
 
 		/* "usbd_transfer_unsetup()" will clear "temp[]" */
 		usbd_transfer_unsetup(&temp[0], n_setup);
+
+		mtx_lock(&(sc->sc_mtx));
+
+		wakeup(sce);
+		error = USBD_CANCELLED;
 	}
 
+	sce->state &= ~context_bit;
+
 	while(n_setup--)
 	{
 		pxfer[n_setup] = temp[n_setup];
@@ -512,6 +512,7 @@
 {
 	struct ugen_softc *sc = DEV2SC(dev);
 	struct ugen_endpoint *sce = DEV2SCE(dev);
+	struct usbd_xfer *temp_xfer[4];
 
 	PRINTFN(5, ("flag=%d, mode=%d\n", flag, mode));
 
@@ -571,10 +572,22 @@
 
 		sce->state &= ~(UGEN_OPEN_DEV|UGEN_OPEN_IN|UGEN_OPEN_OUT|UGEN_CLOSING);
 
-		usbd_transfer_unsetup(&sce->xfer_in[0], 2);
-		usbd_transfer_unsetup(&sce->xfer_out[0], 2);
+		temp_xfer[0] = sce->xfer_in[0];
+		temp_xfer[1] = sce->xfer_in[1];
+		temp_xfer[2] = sce->xfer_out[0];
+		temp_xfer[3] = sce->xfer_out[1];
+
+		sce->xfer_in[0] = NULL;
+		sce->xfer_in[1] = NULL;
+		sce->xfer_out[0] = NULL;
+		sce->xfer_out[1] = NULL;
+
+		mtx_unlock(&sc->sc_mtx);
+	
+		usbd_transfer_unsetup(temp_xfer, 4);
+	} else {
+		mtx_unlock(&sc->sc_mtx);
 	}
-	mtx_unlock(&sc->sc_mtx);
 	return (0);
 }
 

==== //depot/projects/usb/src/sys/dev/usb/uhid.c#12 (text+ko) ====

@@ -98,7 +98,6 @@
 struct uhid_softc {
 	struct usb_cdev         sc_cdev;
 	struct mtx              sc_mtx;
-	struct usbd_memory_wait sc_mem_wait;
 
 	struct usbd_xfer *      sc_xfer[UHID_N_TRANSFER];
 	void *                  sc_repdesc_ptr;
@@ -652,7 +651,7 @@
 
 	error = usbd_transfer_setup(uaa->device, uaa->iface_index, 
 				    sc->sc_xfer, uhid_config, UHID_N_TRANSFER,
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    DPRINTF(0, "error=%s\n", usbd_errstr(error)) ;
 	    goto detach;
@@ -796,8 +795,6 @@
 	    }
 	}
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	mtx_destroy(&(sc->sc_mtx));
 
 	return 0;

==== //depot/projects/usb/src/sys/dev/usb/uhub.c#7 (text+ko) ====

@@ -478,7 +478,7 @@
 
 	/* set up interrupt pipe */
 	err = usbd_transfer_setup(udev, 0, &sc->sc_xfer[0], 
-				  &usbd_config[0], 2, sc, NULL, NULL);
+				  &usbd_config[0], 2, sc, NULL);
 	if(err) 
 	{
 		device_printf(dev, "cannot open interrupt pipe\n");

==== //depot/projects/usb/src/sys/dev/usb/ukbd.c#13 (text+ko) ====

@@ -118,7 +118,6 @@
 	struct __callout   sc_callout;
 	struct ukbd_data   sc_ndata;
 	struct ukbd_data   sc_odata;
-	struct usbd_memory_wait sc_mem_wait;
 
 	struct usbd_device * sc_udev;
 	struct usbd_interface * sc_iface;
@@ -640,7 +639,7 @@
 
 	err = usbd_transfer_setup(uaa->device, uaa->iface_index, sc->sc_xfer, 
 				  ukbd_config, UKBD_N_TRANSFER, sc, 
-				  &Giant, &(sc->sc_mem_wait));
+				  &Giant);
 	if (err) {
 	    DPRINTF(0, "error=%s\n", usbd_errstr(err)) ;
 	    goto detach;
@@ -765,8 +764,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UKBD_N_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	__callout_drain(&(sc->sc_callout));
 
 	DPRINTF(0, "%s: disconnected\n", 

==== //depot/projects/usb/src/sys/dev/usb/ulpt.c#16 (text+ko) ====

@@ -88,7 +88,6 @@
 	struct usb_cdev         sc_cdev;
 	struct __callout	sc_watchdog;
 	struct mtx		sc_mtx;
-	struct usbd_memory_wait sc_mem_wait;
 
 	device_t		sc_dev;
 	struct usbd_xfer *	sc_xfer[ULPT_N_TRANSFER];
@@ -594,7 +593,7 @@
 
 	error = usbd_transfer_setup(uaa->device, iface_index, 
 				    sc->sc_xfer, ulpt_config, ULPT_N_TRANSFER, 
-				    sc, &(sc->sc_mtx), &(sc->sc_mem_wait));
+				    sc, &(sc->sc_mtx));
 	if (error) {
 	    DPRINTF(0, "error=%s\n", usbd_errstr(error)) ;
 	    goto detach;
@@ -698,8 +697,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, ULPT_N_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	__callout_drain(&(sc->sc_watchdog));
 
 	mtx_destroy(&(sc->sc_mtx));

==== //depot/projects/usb/src/sys/dev/usb/umass.c#6 (text+ko) ====

@@ -533,7 +533,6 @@
 
 struct umass_softc {
 
-	struct usbd_memory_wait	sc_mem_wait;
 	struct scsi_sense	cam_scsi_sense;
 	struct scsi_test_unit_ready cam_scsi_test_unit_ready;
 	struct mtx		sc_mtx;
@@ -1212,7 +1211,7 @@
 	    err = usbd_transfer_setup
 	      (uaa->device, uaa->iface_index, sc->sc_xfer, 
 	       umass_bbb_config, UMASS_T_BBB_MAX, sc,
-	       &(sc->sc_mtx), &(sc->sc_mem_wait));
+	       &(sc->sc_mtx));
 
 	    /* skip reset first time */
 	    sc->sc_last_xfer_index = UMASS_T_BBB_COMMAND;
@@ -1224,7 +1223,7 @@
 	       umass_bbb_config, 
 	       (sc->sc_proto & UMASS_PROTO_CBI_I) ?
 	       UMASS_T_CBI_MAX : (UMASS_T_CBI_MAX-2), sc,
-	       &(sc->sc_mtx), &(sc->sc_mem_wait));
+	       &(sc->sc_mtx));
 
 	    /* skip reset first time */
 	    sc->sc_last_xfer_index = UMASS_T_CBI_COMMAND;
@@ -1307,8 +1306,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UMASS_T_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	mtx_destroy(&(sc->sc_mtx));
 
 	return 0; /* success */

==== //depot/projects/usb/src/sys/dev/usb/umct.c#7 (text+ko) ====

@@ -84,7 +84,6 @@
 struct umct_softc {
 	struct ucom_softc	sc_ucom;
 	struct usbd_config_td	sc_config_td;
-	struct usbd_memory_wait	sc_mem_wait;
 
 	struct usbd_device *	sc_udev;
 	struct usbd_xfer *	sc_xfer[UMCT_ENDPT_MAX];
@@ -368,7 +367,7 @@
 
 	error = usbd_transfer_setup(uaa->device, UMCT_IFACE_INDEX,
 				    sc->sc_xfer, umct_config, UMCT_ENDPT_MAX,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    device_printf(dev, "allocating USB "
 			  "transfers failed!\n");
@@ -441,8 +440,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UMCT_ENDPT_MAX);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	usbd_config_td_unsetup(&(sc->sc_config_td));
 
 	return 0;

==== //depot/projects/usb/src/sys/dev/usb/umodem.c#11 (text+ko) ====

@@ -134,7 +134,6 @@
 struct umodem_softc {
 	struct ucom_softc	sc_ucom;
 	usb_cdc_line_state_t	sc_line_state;	/* current line state */
-	struct usbd_memory_wait sc_mem_wait;
 
 	struct usbd_xfer *	sc_xfer_data[UMODEM_N_DATA_TRANSFER];
 	struct usbd_xfer *	sc_xfer_intr[UMODEM_N_INTR_TRANSFER];
@@ -494,7 +493,7 @@
 	error = usbd_transfer_setup(uaa->device, sc->sc_data_iface_index,
 				    sc->sc_xfer_data, umodem_config_data, 
 				    UMODEM_N_DATA_TRANSFER,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    goto detach;
 	}
@@ -502,7 +501,7 @@
 	error = usbd_transfer_setup(uaa->device, sc->sc_ctrl_iface_index,
 				    sc->sc_xfer_intr, umodem_config_intr,
 				    UMODEM_N_INTR_TRANSFER,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    /* ignore */
 	    DPRINTF(0, "no interrupt pipe!\n");
@@ -1096,7 +1095,5 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer_data, UMODEM_N_DATA_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	return 0;
 }

==== //depot/projects/usb/src/sys/dev/usb/ums.c#15 (text+ko) ====

@@ -87,7 +87,6 @@
   struct usb_cdev     sc_cdev;
   struct mtx          sc_mtx;
   struct __callout    sc_callout;
-  struct usbd_memory_wait sc_mem_wait;
   struct hid_location sc_loc_x; 
   struct hid_location sc_loc_y;
   struct hid_location sc_loc_z;
@@ -392,7 +391,7 @@
 
 	err = usbd_transfer_setup(uaa->device, uaa->iface_index, sc->sc_xfer, 
 				  ums_config, UMS_N_TRANSFER, sc, 
-				  &(sc->sc_mtx), &(sc->sc_mem_wait));
+				  &(sc->sc_mtx));
 	if (err) {
 	    DPRINTF(0, "error=%s\n", usbd_errstr(err)) ;
 	    goto detach;
@@ -562,8 +561,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer, UMS_N_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &(sc->sc_mtx));
-
 	__callout_drain(&(sc->sc_callout));
 
 	mtx_destroy(&(sc->sc_mtx));

==== //depot/projects/usb/src/sys/dev/usb/uplcom.c#10 (text+ko) ====

@@ -148,7 +148,6 @@
 struct	uplcom_softc {
 	struct ucom_softc	sc_ucom;
 	usb_cdc_line_state_t	sc_line_state;	/* current line state */
-	struct usbd_memory_wait sc_mem_wait;
 
 	struct usbd_xfer *	sc_xfer_intr[UPLCOM_N_INTR_TRANSFER];
 	struct usbd_xfer *	sc_xfer_data[UPLCOM_N_DATA_TRANSFER];
@@ -527,7 +526,7 @@
 	error = usbd_transfer_setup(uaa->device, sc->sc_data_iface_index,
 				    sc->sc_xfer_data, uplcom_config_data, 
 				    UPLCOM_N_DATA_TRANSFER,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    DPRINTF(0, "one or more missing data "
 		    "pipes, error=%s\n", usbd_errstr(error));
@@ -537,7 +536,7 @@
 	error = usbd_transfer_setup(uaa->device, sc->sc_ctrl_iface_index,
 				    sc->sc_xfer_intr, uplcom_config_intr,
 				    UPLCOM_N_INTR_TRANSFER,
-				    sc, &Giant, &(sc->sc_mem_wait));
+				    sc, &Giant);
 	if (error) {
 	    DPRINTF(0, "no interrupt pipe, error=%s\n",
 		    usbd_errstr(error));
@@ -596,8 +595,6 @@
 
 	usbd_transfer_unsetup(sc->sc_xfer_data, UPLCOM_N_DATA_TRANSFER);
 
-	usbd_transfer_drain(&(sc->sc_mem_wait), &Giant);
-
 	return 0;
 }
 

==== //depot/projects/usb/src/sys/dev/usb/urio.c#6 (text+ko) ====

@@ -87,7 +87,6 @@
 struct urio_softc {
 	struct usb_cdev         sc_cdev;
 	struct mtx		sc_mtx;
-	struct usbd_memory_wait sc_mem_wait;
 
 	device_t		sc_dev;
 	struct usbd_device *	sc_udev;
@@ -244,7 +243,7 @@
 

>>> TRUNCATED FOR MAIL (1000 lines) <<<



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