From owner-freebsd-usb@FreeBSD.ORG Thu Sep 11 21:45:16 2008 Return-Path: Delivered-To: freebsd-usb@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0FF2E106567B for ; Thu, 11 Sep 2008 21:45:16 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe10.tele2.se [212.247.155.33]) by mx1.freebsd.org (Postfix) with ESMTP id 6B1208FC23 for ; Thu, 11 Sep 2008 21:45:15 +0000 (UTC) (envelope-from hselasky@c2i.net) X-Cloudmark-Score: 0.000000 [] X-Cloudmark-Analysis: v=1.0 c=1 a=ZDRWBqcLkqwA:10 a=n1bwc_erhw0A:10 a=ZtwMFzhc6XSROYQlMkMA/A==:17 a=6I5d2MoRAAAA:8 a=9RvkUw-GMvgYniXX67gA:9 a=Zxt7ybwJIYK7HBTSXRsA:7 a=6p8VR9avoxXGAIy7KVmmLvVSyLAA:4 a=SV7veod9ZcQA:10 a=50e4U0PicR4A:10 Received: from [62.113.133.218] (account mc467741@c2i.net [62.113.133.218] verified) by mailfe10.swip.net (CommuniGate Pro SMTP 5.2.6) with ESMTPA id 903180783; Thu, 11 Sep 2008 23:45:14 +0200 From: Hans Petter Selasky To: freebsd-usb@freebsd.org Date: Thu, 11 Sep 2008 23:46:58 +0200 User-Agent: KMail/1.9.7 References: <20080819211814.6CD685B4D@mail.bitblocks.com> <48C98043.3040807@vwsoft.com> <200809112320.25758.hselasky@c2i.net> In-Reply-To: <200809112320.25758.hselasky@c2i.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200809112347.00510.hselasky@c2i.net> Cc: Volker , Julian Elischer , Antony Mawer Subject: Re: usbdrain problem (was: Re: "legacy" usb stack fixes) X-BeenThere: freebsd-usb@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: FreeBSD support for USB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Sep 2008 21:45:16 -0000 Hi Volker, Could you try the following. Add an extra check for "UGEN_CLOSING" to the code statement in ugen.c in the function ugenclose(): if ((!(sce->state & UGEN_CLOSING)) && (sce->state & (UGEN_OPEN_DEV | UGEN_OPEN_IN | UGEN_OPEN_OUT)) .... The ugenclose() is called from both "detach()" and "close()" and maybe there is a race there! --HPS static int ugenclose(struct cdev *dev, int flag, int mode, struct thread *p) { struct ugen_softc *sc = DEV2SC(dev); struct ugen_endpoint *sce = DEV2SCE(dev); struct usbd_xfer *temp_xfer[4]; int32_t error; PRINTFN(5, ("flag=%d, mode=%d\n", flag, mode)); if ((sc == NULL) || (sce == NULL)) { return (0); } mtx_lock(&sc->sc_mtx); here >>> if (sce->state & (UGEN_OPEN_DEV | UGEN_OPEN_IN | UGEN_OPEN_OUT)) { /* control endpoint is also ``closed'' here */ sce->state |= UGEN_CLOSING; On Thursday 11 September 2008, Hans Petter Selasky wrote: > On Thursday 11 September 2008, Volker wrote: > > On 09/11/08 22:13, Julian Elischer wrote: > > > Volker wrote: > > >> On 09/11/08 10:13, Hans Petter Selasky wrote: > > >>> On Monday 25 August 2008, Volker wrote: > > >>>> Anyway, I've already had those crashes even with the "new" usb stack > > >>>> (but it doesn't happen everytime - YMMV). > > >> > > >> // dropped current@ from CC > > >> > > >> Hans Petter, > > >> > > >> the device unplug problem is not just with usb, but these devices are > > >> the most frequent unplugged devices so far. > > >> > > >> Early this week, I discovered a new problem. I've fetched fresh > > >> RELENG_7 sources, patched your usb stack in and recompiled kernel > > >> (using usb, not usb2). > > Hi Volker, > > There has been significant changes to ugen between usb and usb2. > > It looks to me like that ugen started the transfer again after the USB > transfer drain process started, so the drain will never exit. Probably it > could need an extra flag there to catch that case, to prevent the start > after trying to unsetup the transfer! > > Try to turn on USB debugging: > > sysctl hw.usb.debug=15 > > And grep for transfer start and stop. > > --HPS > _______________________________________________ > freebsd-usb@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-usb > To unsubscribe, send any mail to "freebsd-usb-unsubscribe@freebsd.org"