Skip site navigation (1)Skip section navigation (2)
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>