From owner-p4-projects@FreeBSD.ORG Sat Oct 7 15:29:37 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CECEA16A416; Sat, 7 Oct 2006 15:29:37 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8E64316A415 for ; Sat, 7 Oct 2006 15:29:37 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 051E143D4C for ; Sat, 7 Oct 2006 15:29:37 +0000 (GMT) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k97FTath045136 for ; Sat, 7 Oct 2006 15:29:36 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k97FTaMj045133 for perforce@freebsd.org; Sat, 7 Oct 2006 15:29:36 GMT (envelope-from hselasky@FreeBSD.org) Date: Sat, 7 Oct 2006 15:29:36 GMT Message-Id: <200610071529.k97FTaMj045133@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 107420 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Oct 2006 15:29:38 -0000 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) <<<