Date: Fri, 3 Oct 2008 14:18:26 -0700 From: "Maksim Yevmenkin" <maksim.yevmenkin@gmail.com> To: vova@fbsd.ru Cc: freebsd-bluetooth@freebsd.org, usb@freebsd.org Subject: Re: Bluetooth audio - crash on USB bluetooth dongle disconnect Message-ID: <bb4a86c70810031418t5b9eef45p4d57b55f22c05715@mail.gmail.com> In-Reply-To: <1223067257.2362.6.camel@localhost> References: <3a386af20809261420j535680e8pf44453dbf6f84b20@mail.gmail.com> <bb4a86c70809261504v45ffe1a8oaf26670a1032e86c@mail.gmail.com> <1223034512.1842.111.camel@localhost> <bb4a86c70810030945g3d870a1eqacc85233d9698a66@mail.gmail.com> <1223067257.2362.6.camel@localhost>
next in thread | previous in thread | raw e-mail | index | archive | help
On 10/3/08, Vladimir Grebenschikov <vova@fbsd.ru> wrote: > On Fri, 2008-10-03 at 09:45 -0700, Maksim Yevmenkin wrote: > > > now you can connect your bluetooth device. kick tires and make sure > > you can do inquiry etc. then simply pull the device out _without_ > > stopping the stack first. at least on my system it often leads to > > panic after a few seconds. > > First of all it crashes on disconnect with big probability even without > btsock_sco. yes, i know. isoc transfers seems to be triggering it > For me it crashes in uhci interrupt handler on NULL de-reference > > trace shows something like: > usb_transfer_complete > uhci_transfer_complete > ... > > digging a bit shows that it crashes in uhci.c:2575 > > usbd_status > uhci_device_isoc_start(usbd_xfer_handle xfer) > { > struct uhci_pipe *upipe = (struct uhci_pipe *)xfer->pipe; > uhci_softc_t *sc = (uhci_softc_t *)upipe->pipe.device->bus; > > with upipe = NULL on interrupt > > Looks like it is result of locking changes in usb stack or like. > > Usb folks, can anybody give a hint what is the reason of such crash ? > > PS: I have SMP system. one thing that is different from interrupt and bulk transfers is that ng_ubt(4) always has multiple outstanding incoming isoc transfers. when device is simply pulled out, there is not much driver can do. if i enable debugging i can see my transfer completion routine called with ioerror status or something like that. so, i suspect this is a cleanup issue. i'm not sure who supposed to do the cleanup in this case driver or stack. in any case, can you verify that ubt_reset() is called when device is pulled out? (it should be called as part of hook disconnect). if not - then please try to call ubt_reset() from ubt_detach() just before closing all the pipes. thanks, max
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bb4a86c70810031418t5b9eef45p4d57b55f22c05715>