Thread (8 messages) read the whole thread 8 messages, 2 authors, 2009-08-12

Re: sco connection issue for BlueZ 4.x on kernel 2.6.29

From: Marcel Holtmann <marcel@holtmann.org>
Date: 2009-08-12 04:09:49

Hi,
quoted
quoted
quoted
quoted
quoted
quoted
Can not accept incoming SCO connection. Kernel version 2.6.29. Kernel
log is as below. Is this a kernel bug? Is there any fix already for
this?

<6>[  158.339691] sco_connect_ind: hdev hci0, bdaddr CA:D3:10:55:0C:00
    -------// receive incoming sco
<6>[  158.518554] sco_connect_cfm: hcon cf18ee00 bdaddr CA:D3:10:55:0C:00 status
<6>[  158.721160] sco_connect_cfm: hcon cf149c00 bdaddr CA:D3:10:55:0C:00 status
<6>[  158.728851] sco_conn_add: hcon cf149c00 conn cc772640
<6>[  158.734313] sco_conn_ready: conn cc772640
-----------// handle sco connection complete
<6>[  158.738800] sco_sock_init: sk cf18c400
-----------// start handle sco socket
<6>[  158.742858] __sco_chan_add: conn cc772640
<6>[  159.693023] sco_sock_accept: sk ccfdf400 timeo 0
<6>[  159.708038] sco_sock_accept: new socket cf18c400
<6>[  159.713073] sco_sock_getsockopt: sk cf18c400
<6>[  159.717834] sco_sock_getsockopt_old: sk cf18c400
<6>[  159.722839] sco_sock_getsockopt_old: mtu 180
<6>[  159.727661] sco_sock_getname: sock ce9d80a0, sk cf18c400
<6>[  159.733398] sco_sock_getname: sock ce9d80a0, sk cf18c400
<6>[  159.739166] sco_sock_release: sock ce9d80a0, sk cf18c400
-----------// don't know why it call sco_sock_release
<6>[  159.745025] sco_sock_clear_timer: sock cf18c400 state 1
<6>[  159.750671] sco_sock_close: sk cf18c400 state 1 conn cc772640 socket ce9d8
<6>[  159.758453] sco_chan_del: sk cf18c400, conn cc772640, err 104
<6>[  159.764770] sco_sock_kill: sk cf18c400 state 9
<6>[  159.769592] sco_sock_destruct: sk cf18c400
------------// destruct sco socket, and disconnect SCO connection
<6>[  159.782745] l2cap_disconn_ind: hcon cf149c00
<6>[  159.787384] hci_acl_disconn: cf149c00
<6>[  159.950805] hci_disconn_complete_evt: hci0 status 0
<6>[  159.956207] l2cap_disconn_cfm: hcon cf149c00 reason 22
<6>[  159.961730] sco_disconn_cfm: hcon cf149c00 reason 22
-------------// sco disconnected
<6>[  159.967102] sco_conn_del: hcon cf149c00 conn cc772640, err 103
<6>[  162.130523] hci_disconn_complete_evt: hci0 status 0
<6>[  162.136291] l2cap_disconn_cfm: hcon cf18ee00 reason 19
<6>[  162.149871] sco_disconn_cfm: hcon cf18ee00 reason 19
<4>[  165.382141] done EDISCO CTRL ENABLE
<7>[  165.386077] sholes-panel:  edisco_ctrl_enable_te
what kind of program are you using?
This issue was found when testing HFP on android platform with a
Bluetooth carkit which is not support eSCO. At first android tries to
establish eSCO with carkit, carkit response with error that eSCO is
not supported. Then carkit send SCO connect request to android
automatically, android accepted this connection but disconnect it
immediately.
I think we fixed all of these. Try a 2.6.31-rc5 kernel. Also you would
need to include the output of hcidump -X -V.
I think there is a bug in the function sco_sock_getsockopt_old() in sco.c.

I changed the code like below and then test sco again, incoming sco
connection can be created successfully now.
@@ -719,7 +715,10 @@ static int sco_sock_getsockopt_old(struct socket *sock, int
                break;
        }

-       release_sock(sk);
+    if (err != 0) {
+           release_sock(sk);
+    }
        return err;
that is not it for sure. The release_sock() is the unlock function and
your patch create a locking imbalance.
This issue is fixed by Johan's commit of "Don't enable the SCO server
socket when not necessary"
(http://git.kernel.org/?p=bluetooth/bluez.git;a=commit;h=cd6678404659a1bf6449b5b1d48b17883d895aef)
so if Android would finally start using upstream BlueZ and not ship
their own stuff, we could have avoided this non-sense.

Regards

Marcel

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help