<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/net/bluetooth/rfcomm/tty.c, branch linux-2.6.27.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.27.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-2.6.27.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2008-07-21T00:43:29Z</updated>
<entry>
<title>Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2008-07-21T00:43:29Z</updated>
<author>
<name>Linus Torvalds</name>
</author>
<published>2008-07-21T00:43:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=db6d8c7a4027b48d797b369a53f8470aaeed7063'/>
<id>urn:sha1:db6d8c7a4027b48d797b369a53f8470aaeed7063</id>
<content type='text'>
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (1232 commits)
  iucv: Fix bad merging.
  net_sched: Add size table for qdiscs
  net_sched: Add accessor function for packet length for qdiscs
  net_sched: Add qdisc_enqueue wrapper
  highmem: Export totalhigh_pages.
  ipv6 mcast: Omit redundant address family checks in ip6_mc_source().
  net: Use standard structures for generic socket address structures.
  ipv6 netns: Make several "global" sysctl variables namespace aware.
  netns: Use net_eq() to compare net-namespaces for optimization.
  ipv6: remove unused macros from net/ipv6.h
  ipv6: remove unused parameter from ip6_ra_control
  tcp: fix kernel panic with listening_get_next
  tcp: Remove redundant checks when setting eff_sacks
  tcp: options clean up
  tcp: Fix MD5 signatures for non-linear skbs
  sctp: Update sctp global memory limit allocations.
  sctp: remove unnecessary byteshifting, calculate directly in big-endian
  sctp: Allow only 1 listening socket with SO_REUSEADDR
  sctp: Do not leak memory on multiple listen() calls
  sctp: Support ipv6only AF_INET6 sockets.
  ...
</content>
</entry>
<entry>
<title>tty: Ldisc revamp</title>
<updated>2008-07-21T00:12:34Z</updated>
<author>
<name>Alan Cox</name>
</author>
<published>2008-07-16T20:53:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a352def21a642133758b868c71bee12ab34ad5c5'/>
<id>urn:sha1:a352def21a642133758b868c71bee12ab34ad5c5</id>
<content type='text'>
Move the line disciplines towards a conventional -&gt;ops arrangement.  For
the moment the actual 'tty_ldisc' struct in the tty is kept as part of
the tty struct but this can then be changed if it turns out that when it
all settles down we want to refcount ldiscs separately to the tty.

Pull the ldisc code out of /proc and put it with our ldisc code.

Signed-off-by: Alan Cox &lt;alan@redhat.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6</title>
<updated>2008-07-19T07:30:39Z</updated>
<author>
<name>David S. Miller</name>
</author>
<published>2008-07-19T07:30:39Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=407d819cf0fd54c6fc1138a509225696aecafd15'/>
<id>urn:sha1:407d819cf0fd54c6fc1138a509225696aecafd15</id>
<content type='text'>
</content>
</entry>
<entry>
<title>[Bluetooth] Move pending packets from RFCOMM socket to TTY</title>
<updated>2008-07-14T18:13:52Z</updated>
<author>
<name>Marcel Holtmann</name>
</author>
<published>2008-07-14T18:13:52Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a0c22f226502be6eab37a1d9bf6fb0fadf551376'/>
<id>urn:sha1:a0c22f226502be6eab37a1d9bf6fb0fadf551376</id>
<content type='text'>
When an incoming RFCOMM socket connection gets converted into a TTY,
it can happen that packets are lost. This mainly happens with the
Handsfree profile where the remote side starts sending data right
away. The problem is that these packets are in the socket receive
queue. So when creating the TTY make sure to copy all pending packets
from the socket receive queue to a private queue inside the TTY.

To make this actually work, the flow control on the newly created TTY
will be disabled and only enabled again when the TTY is opened by an
application. And right before that, the pending packets will be put
into the TTY flip buffer.

Signed-off-by: Denis Kenzior &lt;denis.kenzior@trolltech.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
</entry>
<entry>
<title>[Bluetooth] Store remote modem status for RFCOMM TTY</title>
<updated>2008-07-14T18:13:52Z</updated>
<author>
<name>Marcel Holtmann</name>
</author>
<published>2008-07-14T18:13:52Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8b6b3da765af9600b5edd8e3e84a20523e975884'/>
<id>urn:sha1:8b6b3da765af9600b5edd8e3e84a20523e975884</id>
<content type='text'>
When switching a RFCOMM socket to a TTY, the remote modem status might
be needed later. Currently it is lost since the original configuration
is done via the socket interface. So store the modem status and reply
it when the socket has been converted to a TTY.

Signed-off-by: Denis Kenzior &lt;denis.kenzior@trolltech.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
</entry>
<entry>
<title>[Bluetooth] Use non-canonical TTY by default for RFCOMM</title>
<updated>2008-07-14T18:13:52Z</updated>
<author>
<name>Marcel Holtmann</name>
</author>
<published>2008-07-14T18:13:52Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ca37bdd53b5af06d00e792f2415b93206aa2a541'/>
<id>urn:sha1:ca37bdd53b5af06d00e792f2415b93206aa2a541</id>
<content type='text'>
While the RFCOMM TTY emulation can act like a real serial port, in
reality it is not used like this. So to not mess up stupid applications,
use the non-canonical mode by default.

Signed-off-by: Denis Kenzior &lt;denis.kenzior@trolltech.com&gt;
Signed-off-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
</content>
</entry>
<entry>
<title>net: remove CVS keywords</title>
<updated>2008-06-12T04:00:38Z</updated>
<author>
<name>Adrian Bunk</name>
</author>
<published>2008-06-11T05:46:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=0b040829952d84bf2a62526f0e24b624e0699447'/>
<id>urn:sha1:0b040829952d84bf2a62526f0e24b624e0699447</id>
<content type='text'>
This patch removes CVS keywords that weren't updated for a long time
from comments.

Signed-off-by: Adrian Bunk &lt;bunk@kernel.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bluetooth: rfcomm_dev_state_change deadlock fix</title>
<updated>2008-06-03T21:27:17Z</updated>
<author>
<name>Dave Young</name>
</author>
<published>2008-06-02T06:50:52Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=537d59af73d894750cff14f90fe2b6d77fbab15b'/>
<id>urn:sha1:537d59af73d894750cff14f90fe2b6d77fbab15b</id>
<content type='text'>
There's logic in __rfcomm_dlc_close:
	rfcomm_dlc_lock(d);
	d-&gt;state = BT_CLOSED;
	d-&gt;state_changed(d, err);
	rfcomm_dlc_unlock(d);

In rfcomm_dev_state_change, it's possible that rfcomm_dev_put try to
take the dlc lock, then we will deadlock.

Here fixed it by unlock dlc before rfcomm_dev_get in
rfcomm_dev_state_change.

why not unlock just before rfcomm_dev_put? it's because there's
another problem.  rfcomm_dev_get/rfcomm_dev_del will take
rfcomm_dev_lock, but in rfcomm_dev_add the lock order is :
rfcomm_dev_lock --&gt; dlc lock

so I unlock dlc before the taken of rfcomm_dev_lock.

Actually it's a regression caused by commit
1905f6c736cb618e07eca0c96e60e3c024023428 ("bluetooth :
__rfcomm_dlc_close lock fix"), the dlc state_change could be two
callbacks : rfcomm_sk_state_change and rfcomm_dev_state_change. I
missed the rfcomm_sk_state_change that time.

Thanks Arjan van de Ven &lt;arjan@linux.intel.com&gt; for the effort in
commit 4c8411f8c115def968820a4df6658ccfd55d7f1a ("bluetooth: fix
locking bug in the rfcomm socket cleanup handling") but he missed the
rfcomm_dev_state_change lock issue.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Acked-by: Marcel Holtmann &lt;marcel@holtmann.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bluetooth : __rfcomm_dlc_close lock fix</title>
<updated>2008-04-02T06:59:06Z</updated>
<author>
<name>Dave Young</name>
</author>
<published>2008-04-02T06:59:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=1905f6c736cb618e07eca0c96e60e3c024023428'/>
<id>urn:sha1:1905f6c736cb618e07eca0c96e60e3c024023428</id>
<content type='text'>
Lockdep warning will be trigged while rfcomm connection closing.

The locks taken in rfcomm_dev_add:
rfcomm_dev_lock --&gt; d-&gt;lock

In __rfcomm_dlc_close:
d-&gt;lock --&gt; rfcomm_dev_lock (in rfcomm_dev_state_change)

There's two way to fix it, one is in rfcomm_dev_add we first locking
d-&gt;lock then the rfcomm_dev_lock

The other (in this patch), remove the locking of d-&gt;lock for
rfcomm_dev_state_change because just locking "d-&gt;state = BT_CLOSED;"
is enough.

[  295.002046] =======================================================
[  295.002046] [ INFO: possible circular locking dependency detected ]
[  295.002046] 2.6.25-rc7 #1
[  295.002046] -------------------------------------------------------
[  295.002046] krfcommd/2705 is trying to acquire lock:
[  295.002046]  (rfcomm_dev_lock){-.--}, at: [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] but task is already holding lock:
[  295.002046]  (&amp;d-&gt;lock){--..}, at: [&lt;f899c533&gt;] __rfcomm_dlc_close+0x43/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] which lock already depends on the new lock.
[  295.002046] 
[  295.002046] 
[  295.002046] the existing dependency chain (in reverse order) is:
[  295.002046] 
[  295.002046] -&gt; #1 (&amp;d-&gt;lock){--..}:
[  295.002046]        [&lt;c0149b23&gt;] check_prev_add+0xd3/0x200
[  295.002046]        [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]        [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]        [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]        [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]        [&lt;c03d6b99&gt;] _spin_lock+0x39/0x80
[  295.002046]        [&lt;f89a01c0&gt;] rfcomm_dev_add+0x240/0x360 [rfcomm]
[  295.002046]        [&lt;f89a047e&gt;] rfcomm_create_dev+0x6e/0xe0 [rfcomm]
[  295.002046]        [&lt;f89a0823&gt;] rfcomm_dev_ioctl+0x33/0x60 [rfcomm]
[  295.002046]        [&lt;f899facc&gt;] rfcomm_sock_ioctl+0x2c/0x50 [rfcomm]
[  295.002046]        [&lt;c0363d38&gt;] sock_ioctl+0x118/0x240
[  295.002046]        [&lt;c0194196&gt;] vfs_ioctl+0x76/0x90
[  295.002046]        [&lt;c0194446&gt;] do_vfs_ioctl+0x56/0x140
[  295.002046]        [&lt;c0194569&gt;] sys_ioctl+0x39/0x60
[  295.002046]        [&lt;c0104faa&gt;] syscall_call+0x7/0xb
[  295.002046]        [&lt;ffffffff&gt;] 0xffffffff
[  295.002046] 
[  295.002046] -&gt; #0 (rfcomm_dev_lock){-.--}:
[  295.002046]        [&lt;c0149a84&gt;] check_prev_add+0x34/0x200
[  295.002046]        [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]        [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]        [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]        [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]        [&lt;c03d6639&gt;] _read_lock+0x39/0x80
[  295.002046]        [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]        [&lt;f899c548&gt;] __rfcomm_dlc_close+0x58/0xd0 [rfcomm]
[  295.002046]        [&lt;f899d44f&gt;] rfcomm_recv_ua+0x6f/0x120 [rfcomm]
[  295.002046]        [&lt;f899e061&gt;] rfcomm_recv_frame+0x171/0x1e0 [rfcomm]
[  295.002046]        [&lt;f899e357&gt;] rfcomm_run+0xe7/0x550 [rfcomm]
[  295.002046]        [&lt;c013c18c&gt;] kthread+0x5c/0xa0
[  295.002046]        [&lt;c0105c07&gt;] kernel_thread_helper+0x7/0x10
[  295.002046]        [&lt;ffffffff&gt;] 0xffffffff
[  295.002046] 
[  295.002046] other info that might help us debug this:
[  295.002046] 
[  295.002046] 2 locks held by krfcommd/2705:
[  295.002046]  #0:  (rfcomm_mutex){--..}, at: [&lt;f899e2eb&gt;] rfcomm_run+0x7b/0x550 [rfcomm]
[  295.002046]  #1:  (&amp;d-&gt;lock){--..}, at: [&lt;f899c533&gt;] __rfcomm_dlc_close+0x43/0xd0 [rfcomm]
[  295.002046] 
[  295.002046] stack backtrace:
[  295.002046] Pid: 2705, comm: krfcommd Not tainted 2.6.25-rc7 #1
[  295.002046]  [&lt;c0128a38&gt;] ? printk+0x18/0x20
[  295.002046]  [&lt;c014927f&gt;] print_circular_bug_tail+0x6f/0x80
[  295.002046]  [&lt;c0149a84&gt;] check_prev_add+0x34/0x200
[  295.002046]  [&lt;c0149ce5&gt;] check_prevs_add+0x95/0xe0
[  295.002046]  [&lt;c0149f6f&gt;] validate_chain+0x23f/0x320
[  295.002046]  [&lt;c014b7b1&gt;] __lock_acquire+0x1c1/0x760
[  295.002046]  [&lt;c014c349&gt;] lock_acquire+0x79/0xb0
[  295.002046]  [&lt;f89a090a&gt;] ? rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;c03d6639&gt;] _read_lock+0x39/0x80
[  295.002046]  [&lt;f89a090a&gt;] ? rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;f89a090a&gt;] rfcomm_dev_state_change+0x6a/0xd0 [rfcomm]
[  295.002046]  [&lt;f899c548&gt;] __rfcomm_dlc_close+0x58/0xd0 [rfcomm]
[  295.002046]  [&lt;f899d44f&gt;] rfcomm_recv_ua+0x6f/0x120 [rfcomm]
[  295.002046]  [&lt;f899e061&gt;] rfcomm_recv_frame+0x171/0x1e0 [rfcomm]
[  295.002046]  [&lt;c014abd9&gt;] ? trace_hardirqs_on+0xb9/0x130
[  295.002046]  [&lt;c03d6e89&gt;] ? _spin_unlock_irqrestore+0x39/0x70
[  295.002046]  [&lt;f899e357&gt;] rfcomm_run+0xe7/0x550 [rfcomm]
[  295.002046]  [&lt;c03d4559&gt;] ? __sched_text_start+0x229/0x4c0
[  295.002046]  [&lt;c0120000&gt;] ? cpu_avg_load_per_task+0x20/0x30
[  295.002046]  [&lt;f899e270&gt;] ? rfcomm_run+0x0/0x550 [rfcomm]
[  295.002046]  [&lt;c013c18c&gt;] kthread+0x5c/0xa0
[  295.002046]  [&lt;c013c130&gt;] ? kthread+0x0/0xa0
[  295.002046]  [&lt;c0105c07&gt;] kernel_thread_helper+0x7/0x10
[  295.002046]  =======================

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>bluetooth rfcomm tty: destroy before tty_close()</title>
<updated>2008-02-05T11:12:06Z</updated>
<author>
<name>Dave Young</name>
</author>
<published>2008-02-05T11:12:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=93d807401ced2320d0d1e56bf9de099bba5c0424'/>
<id>urn:sha1:93d807401ced2320d0d1e56bf9de099bba5c0424</id>
<content type='text'>
rfcomm dev could be deleted in tty_hangup, so we must not call
rfcomm_dev_del again to prevent from destroying rfcomm dev before tty
close.

Signed-off-by: Dave Young &lt;hidave.darkstar@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
