<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/drivers/net/wireless/rt2x00/rt2x00debug.c, branch v2.6.26</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>rt2x00: Upgrade queue-&gt;lock to use irqsave</title>
<updated>2008-03-13T20:02:35+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2008-03-09T21:44:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=5f46c4d0537a870f9d9c1fd998aa9d6dac682595'/>
<id>5f46c4d0537a870f9d9c1fd998aa9d6dac682595</id>
<content type='text'>
The queue-&gt;lock could be grabbed from interrupt context,
which could lead to lockdep panic like this:

kernel: ======================================================
kernel: [ INFO: soft-safe -&gt; soft-unsafe lock order detected ]
kernel: 2.6.25-0.95.rc4.fc9 #1
kernel: ------------------------------------------------------
kernel: rt2500pci/1251 [HC0[0]:SC0[1]:HE1:SE0] is trying to acquire:
kernel:  (&amp;queue-&gt;lock){--..}, at: [&lt;ffffffff88213339&gt;] rt2x00queue_get_entry+0x5a/0x81 [rt2x00lib]
kernel:
kernel: and this task is already holding:
kernel:  (_xmit_IEEE80211){-...}, at: [&lt;ffffffff8122e9a3&gt;] __qdisc_run+0x84/0x1a9
kernel: which would create a new lock dependency:
kernel:  (_xmit_IEEE80211){-...} -&gt; (&amp;queue-&gt;lock){--..}
kernel:
kernel: but this new dependency connects a soft-irq-safe lock:
kernel:  (_xmit_ETHER){-+..}
kernel: ... which became soft-irq-safe at:
kernel:   [&lt;ffffffffffffffff&gt;] 0xffffffffffffffff
kernel:
kernel: to a soft-irq-unsafe lock:
kernel:  (&amp;queue-&gt;lock){--..}
kernel: ... which became soft-irq-unsafe at:
kernel: ...  [&lt;ffffffff810545a2&gt;] __lock_acquire+0x62d/0xd63
kernel:   [&lt;ffffffff81054d36&gt;] lock_acquire+0x5e/0x78
kernel:   [&lt;ffffffff812a1497&gt;] _spin_lock+0x26/0x53
kernel:   [&lt;ffffffff88212f98&gt;] rt2x00queue_reset+0x16/0x40 [rt2x00lib]
kernel:   [&lt;ffffffff88212fd4&gt;] rt2x00queue_alloc_entries+0x12/0xab [rt2x00lib]
kernel:   [&lt;ffffffff88213091&gt;] rt2x00queue_initialize+0x24/0xf2 [rt2x00lib]
kernel:   [&lt;ffffffff88212036&gt;] rt2x00lib_start+0x3b/0xd4 [rt2x00lib]
kernel:   [&lt;ffffffff88212609&gt;] rt2x00mac_start+0x18/0x1a [rt2x00lib]
kernel:   [&lt;ffffffff881b9a4b&gt;] ieee80211_open+0x1f3/0x46d [mac80211]
kernel:   [&lt;ffffffff8121d980&gt;] dev_open+0x4d/0x8b
kernel:   [&lt;ffffffff8121d41e&gt;] dev_change_flags+0xaf/0x172
kernel:   [&lt;ffffffff81224fc2&gt;] do_setlink+0x276/0x338
kernel:   [&lt;ffffffff81225198&gt;] rtnl_setlink+0x114/0x116
kernel:   [&lt;ffffffff812262fc&gt;] rtnetlink_rcv_msg+0x1d8/0x1f9
kernel:   [&lt;ffffffff8123649a&gt;] netlink_rcv_skb+0x3e/0xac
kernel:   [&lt;ffffffff8122611a&gt;] rtnetlink_rcv+0x29/0x33
kernel:   [&lt;ffffffff81235eed&gt;] netlink_unicast+0x1fe/0x26b
kernel:   [&lt;ffffffff81236224&gt;] netlink_sendmsg+0x2ca/0x2dd
kernel:   [&lt;ffffffff812103b3&gt;] sock_sendmsg+0xfd/0x120
kernel:   [&lt;ffffffff812105a8&gt;] sys_sendmsg+0x1d2/0x23c
kernel:   [&lt;ffffffff8100c1c7&gt;] tracesys+0xdc/0xe1
kernel:   [&lt;ffffffffffffffff&gt;] 0xffffffffffffffff

This can be fixed by using the irqsave/irqrestore versions
during the queue-&gt;lock handling.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The queue-&gt;lock could be grabbed from interrupt context,
which could lead to lockdep panic like this:

kernel: ======================================================
kernel: [ INFO: soft-safe -&gt; soft-unsafe lock order detected ]
kernel: 2.6.25-0.95.rc4.fc9 #1
kernel: ------------------------------------------------------
kernel: rt2500pci/1251 [HC0[0]:SC0[1]:HE1:SE0] is trying to acquire:
kernel:  (&amp;queue-&gt;lock){--..}, at: [&lt;ffffffff88213339&gt;] rt2x00queue_get_entry+0x5a/0x81 [rt2x00lib]
kernel:
kernel: and this task is already holding:
kernel:  (_xmit_IEEE80211){-...}, at: [&lt;ffffffff8122e9a3&gt;] __qdisc_run+0x84/0x1a9
kernel: which would create a new lock dependency:
kernel:  (_xmit_IEEE80211){-...} -&gt; (&amp;queue-&gt;lock){--..}
kernel:
kernel: but this new dependency connects a soft-irq-safe lock:
kernel:  (_xmit_ETHER){-+..}
kernel: ... which became soft-irq-safe at:
kernel:   [&lt;ffffffffffffffff&gt;] 0xffffffffffffffff
kernel:
kernel: to a soft-irq-unsafe lock:
kernel:  (&amp;queue-&gt;lock){--..}
kernel: ... which became soft-irq-unsafe at:
kernel: ...  [&lt;ffffffff810545a2&gt;] __lock_acquire+0x62d/0xd63
kernel:   [&lt;ffffffff81054d36&gt;] lock_acquire+0x5e/0x78
kernel:   [&lt;ffffffff812a1497&gt;] _spin_lock+0x26/0x53
kernel:   [&lt;ffffffff88212f98&gt;] rt2x00queue_reset+0x16/0x40 [rt2x00lib]
kernel:   [&lt;ffffffff88212fd4&gt;] rt2x00queue_alloc_entries+0x12/0xab [rt2x00lib]
kernel:   [&lt;ffffffff88213091&gt;] rt2x00queue_initialize+0x24/0xf2 [rt2x00lib]
kernel:   [&lt;ffffffff88212036&gt;] rt2x00lib_start+0x3b/0xd4 [rt2x00lib]
kernel:   [&lt;ffffffff88212609&gt;] rt2x00mac_start+0x18/0x1a [rt2x00lib]
kernel:   [&lt;ffffffff881b9a4b&gt;] ieee80211_open+0x1f3/0x46d [mac80211]
kernel:   [&lt;ffffffff8121d980&gt;] dev_open+0x4d/0x8b
kernel:   [&lt;ffffffff8121d41e&gt;] dev_change_flags+0xaf/0x172
kernel:   [&lt;ffffffff81224fc2&gt;] do_setlink+0x276/0x338
kernel:   [&lt;ffffffff81225198&gt;] rtnl_setlink+0x114/0x116
kernel:   [&lt;ffffffff812262fc&gt;] rtnetlink_rcv_msg+0x1d8/0x1f9
kernel:   [&lt;ffffffff8123649a&gt;] netlink_rcv_skb+0x3e/0xac
kernel:   [&lt;ffffffff8122611a&gt;] rtnetlink_rcv+0x29/0x33
kernel:   [&lt;ffffffff81235eed&gt;] netlink_unicast+0x1fe/0x26b
kernel:   [&lt;ffffffff81236224&gt;] netlink_sendmsg+0x2ca/0x2dd
kernel:   [&lt;ffffffff812103b3&gt;] sock_sendmsg+0xfd/0x120
kernel:   [&lt;ffffffff812105a8&gt;] sys_sendmsg+0x1d2/0x23c
kernel:   [&lt;ffffffff8100c1c7&gt;] tracesys+0xdc/0xe1
kernel:   [&lt;ffffffffffffffff&gt;] 0xffffffffffffffff

This can be fixed by using the irqsave/irqrestore versions
during the queue-&gt;lock handling.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Add queue statistics to debugfs</title>
<updated>2008-02-29T20:37:20+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2008-02-10T21:50:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=68598d294b6bc1ecc418359994234cb43f4635ad'/>
<id>68598d294b6bc1ecc418359994234cb43f4635ad</id>
<content type='text'>
Rename "frame" folder to "queue" folder,
add extra file to this folder which contains
statistics about all hardware queues. This will
help debugging and spotting problems in the
queue indexing system.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rename "frame" folder to "queue" folder,
add extra file to this folder which contains
statistics about all hardware queues. This will
help debugging and spotting problems in the
queue indexing system.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Queue handling overhaul</title>
<updated>2008-02-29T20:19:27+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>IvDoorn@gmail.com</email>
</author>
<published>2008-02-05T21:42:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=181d6902b6bad978d157e69479c95cc0ff213a76'/>
<id>181d6902b6bad978d157e69479c95cc0ff213a76</id>
<content type='text'>
This introduces a big queue handling overhaul, this also
renames "ring" to "queues".

Move queue handling into rt2x00queue.c and the matching header,
use Kerneldoc to improve rt2x00 library documentation.

Access to the queues is now protected under a spinlock, this
to prevent race conditions which could corrupt the indexing
system of the queue.

Each queue entry allocates x bytes for driver/device specific data,
this cleans up the queue structure significantly and improves
code readability.

rt2500usb no longer needs 2 entries in the beacon queue to correctly
send out the guardian byte. This is now handled in the entry specific
structure.

rt61 and rt73 now use the correct descriptor size for beacon frames,
since this data is written into the registers not the entire TXD
descriptor was used but instead of a subset of it named TXINFO.

Finally this also fixes numerous other bugs related to incorrect
beacon handling or beacon related code.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This introduces a big queue handling overhaul, this also
renames "ring" to "queues".

Move queue handling into rt2x00queue.c and the matching header,
use Kerneldoc to improve rt2x00 library documentation.

Access to the queues is now protected under a spinlock, this
to prevent race conditions which could corrupt the indexing
system of the queue.

Each queue entry allocates x bytes for driver/device specific data,
this cleans up the queue structure significantly and improves
code readability.

rt2500usb no longer needs 2 entries in the beacon queue to correctly
send out the guardian byte. This is now handled in the entry specific
structure.

rt61 and rt73 now use the correct descriptor size for beacon frames,
since this data is written into the registers not the entire TXD
descriptor was used but instead of a subset of it named TXINFO.

Finally this also fixes numerous other bugs related to incorrect
beacon handling or beacon related code.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Update copyright notice</title>
<updated>2008-02-29T20:19:22+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2008-02-03T14:42:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=811aa9cad1bd927999888ab56ed9592519d2fef6'/>
<id>811aa9cad1bd927999888ab56ed9592519d2fef6</id>
<content type='text'>
Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Store queue idx and entry idx in data_ring and data_entry</title>
<updated>2008-01-28T23:09:24+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2008-01-06T22:39:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=042671040db95a896c5ca960b9b656692a787892'/>
<id>042671040db95a896c5ca960b9b656692a787892</id>
<content type='text'>
Store the queue idx inside structure data_ring
Store the entry idx inside structure data_entry
This saves us a few calls to ARRAY_INDEX() which is now unused.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Store the queue idx inside structure data_ring
Store the entry idx inside structure data_entry
This saves us a few calls to ARRAY_INDEX() which is now unused.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Fix chipset debugfs file</title>
<updated>2008-01-28T23:09:21+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2008-01-06T22:38:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=3e34c6dcb36bbd5294cae2654c32e24b9787da3a'/>
<id>3e34c6dcb36bbd5294cae2654c32e24b9787da3a</id>
<content type='text'>
Initialize blob-&gt;data before moving the data pointer
Initialize blob-&gt;size based on blob-&gt;data size

This fixes the empty chipset file in debugfs.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Initialize blob-&gt;data before moving the data pointer
Initialize blob-&gt;size based on blob-&gt;data size

This fixes the empty chipset file in debugfs.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Add TX/RX frame dumping facility</title>
<updated>2008-01-28T23:05:08+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2007-11-27T20:49:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=4d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71'/>
<id>4d8dd66c1659ba0d1b110ed0488f4f6ffbc90e71</id>
<content type='text'>
This adds TX/RX frame dumping capabilities through debugfs.
The intention is that with this approach debugging of rt2x00 is
simplified since _all_ frames going in and out of the device
are send to debugfs as well along with additional information
like the hardware descriptor.

Based on the patch by Mattias Nissler.
Mattias also has some tools that will make the dumped frames
available to wireshark: http://www-user.rhrk.uni-kl.de/~nissler/rt2x00/

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This adds TX/RX frame dumping capabilities through debugfs.
The intention is that with this approach debugging of rt2x00 is
simplified since _all_ frames going in and out of the device
are send to debugfs as well along with additional information
like the hardware descriptor.

Based on the patch by Mattias Nissler.
Mattias also has some tools that will make the dumped frames
available to wireshark: http://www-user.rhrk.uni-kl.de/~nissler/rt2x00/

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Add chipset version to chipset debugfs entry</title>
<updated>2008-01-28T23:05:06+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2007-11-27T20:48:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=22c96c28b47ce74d78aad1afbed88b26f43ce24b'/>
<id>22c96c28b47ce74d78aad1afbed88b26f43ce24b</id>
<content type='text'>
The chipset debugfs entry already indicates it is about the chipset,
it only makes sense to also display the chipset version in there.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The chipset debugfs entry already indicates it is about the chipset,
it only makes sense to also display the chipset version in there.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Move register value/offset files into new folder</title>
<updated>2008-01-28T23:05:06+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2007-11-27T20:48:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=91921a4e9b033b1bf6ab65be7f9b74b60290f41c'/>
<id>91921a4e9b033b1bf6ab65be7f9b74b60290f41c</id>
<content type='text'>
Cleanup debugfs interface by moving the csr/bbp/rf/eeprom value/offset
entries into the "register" folder.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Cleanup debugfs interface by moving the csr/bbp/rf/eeprom value/offset
entries into the "register" folder.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Replace DRV_NAME with KBUILD_MODNAME</title>
<updated>2008-01-28T23:05:04+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2007-11-27T20:47:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=2360157c413b06fe2958a051daeab7bac68f6588'/>
<id>2360157c413b06fe2958a051daeab7bac68f6588</id>
<content type='text'>
DRV_NAME was always set to the KBUILD_MODNAME value,
lets clean everything up by removing DRV_NAME and just
use KBUILD_MODNAME directly.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
DRV_NAME was always set to the KBUILD_MODNAME value,
lets clean everything up by removing DRV_NAME and just
use KBUILD_MODNAME directly.

Signed-off-by: Ivo van Doorn &lt;IvDoorn@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
