<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/drivers/net/wireless/rt2x00/rt2x00dev.c, branch v2.6.36</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2010-07-21T01:25:24+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2010-07-21T01:25:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=11fe883936980fe242869d671092a466cf1db3e3'/>
<id>11fe883936980fe242869d671092a466cf1db3e3</id>
<content type='text'>
Conflicts:
	drivers/vhost/net.c
	net/bridge/br_device.c

Fix merge conflict in drivers/vhost/net.c with guidance from
Stephen Rothwell.

Revert the effects of net-2.6 commit 573201f36fd9c7c6d5218cdcd9948cee700b277d
since net-next-2.6 has fixes that make bridge netpoll work properly thus
we don't need it disabled.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:
	drivers/vhost/net.c
	net/bridge/br_device.c

Fix merge conflict in drivers/vhost/net.c with guidance from
Stephen Rothwell.

Revert the effects of net-2.6 commit 573201f36fd9c7c6d5218cdcd9948cee700b277d
since net-next-2.6 has fixes that make bridge netpoll work properly thus
we don't need it disabled.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Fix lockdep warning in rt2x00lib_probe_dev()</title>
<updated>2010-07-16T17:57:59+00:00</updated>
<author>
<name>Stephen Boyd</name>
<email>bebarino@gmail.com</email>
</author>
<published>2010-07-16T16:50:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=9acd56d3f2a05191ee369cbdd8c37dd547aa19b8'/>
<id>9acd56d3f2a05191ee369cbdd8c37dd547aa19b8</id>
<content type='text'>
The rt2x00dev-&gt;intf_work workqueue is never initialized when a driver is
probed for a non-existent device (in this case rt2500usb). On such a
path we call rt2x00lib_remove_dev() to free any resources initialized
during the probe before we use INIT_WORK to initialize the workqueue.
This causes lockdep to get confused since the lock used in the workqueue
hasn't been initialized yet but is now being acquired during
cancel_work_sync() called by rt2x00lib_remove_dev().

Fix this by initializing the workqueue first before we attempt to probe
the device. This should make lockdep happy and avoid breaking any
assumptions about how the library cleans up after a probe fails.

phy0 -&gt; rt2x00lib_probe_dev: Error - Failed to allocate device.
INFO: trying to register non-static key.
the code is fine but needs lockdep annotation.
turning off the locking correctness validator.
Pid: 2027, comm: modprobe Not tainted 2.6.35-rc5+ #60
Call Trace:
 [&lt;ffffffff8105fe59&gt;] register_lock_class+0x152/0x31f
 [&lt;ffffffff81344a00&gt;] ? usb_control_msg+0xd5/0x111
 [&lt;ffffffff81061bde&gt;] __lock_acquire+0xce/0xcf4
 [&lt;ffffffff8105f6fd&gt;] ? trace_hardirqs_off+0xd/0xf
 [&lt;ffffffff81492aef&gt;] ?  _raw_spin_unlock_irqrestore+0x33/0x41
 [&lt;ffffffff810628d5&gt;] lock_acquire+0xd1/0xf7
 [&lt;ffffffff8104f037&gt;] ? __cancel_work_timer+0x99/0x17e
 [&lt;ffffffff8104f06e&gt;] __cancel_work_timer+0xd0/0x17e
 [&lt;ffffffff8104f037&gt;] ? __cancel_work_timer+0x99/0x17e
 [&lt;ffffffff8104f136&gt;] cancel_work_sync+0xb/0xd
 [&lt;ffffffffa0096675&gt;] rt2x00lib_remove_dev+0x25/0xb0 [rt2x00lib]
 [&lt;ffffffffa0096bf7&gt;] rt2x00lib_probe_dev+0x380/0x3ed [rt2x00lib]
 [&lt;ffffffff811d78a7&gt;] ? __raw_spin_lock_init+0x31/0x52
 [&lt;ffffffffa00bbd2c&gt;] ? T.676+0xe/0x10 [rt2x00usb]
 [&lt;ffffffffa00bbe4f&gt;] rt2x00usb_probe+0x121/0x15e [rt2x00usb]
 [&lt;ffffffff813468bd&gt;] usb_probe_interface+0x151/0x19e
 [&lt;ffffffff812ea08e&gt;] driver_probe_device+0xa7/0x136
 [&lt;ffffffff812ea167&gt;] __driver_attach+0x4a/0x66
 [&lt;ffffffff812ea11d&gt;] ? __driver_attach+0x0/0x66
 [&lt;ffffffff812e96ca&gt;] bus_for_each_dev+0x54/0x89
 [&lt;ffffffff812e9efd&gt;] driver_attach+0x19/0x1b
 [&lt;ffffffff812e9b64&gt;] bus_add_driver+0xb4/0x204
 [&lt;ffffffff812ea41b&gt;] driver_register+0x98/0x109
 [&lt;ffffffff813465dd&gt;] usb_register_driver+0xb2/0x173
 [&lt;ffffffffa00ca000&gt;] ? rt2500usb_init+0x0/0x20 [rt2500usb]
 [&lt;ffffffffa00ca01e&gt;] rt2500usb_init+0x1e/0x20 [rt2500usb]
 [&lt;ffffffff81000203&gt;] do_one_initcall+0x6d/0x17a
 [&lt;ffffffff8106cae8&gt;] sys_init_module+0x9c/0x1e0
 [&lt;ffffffff8100296b&gt;] system_call_fastpath+0x16/0x1b

Signed-off-by: Stephen Boyd &lt;bebarino@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 rt2x00dev-&gt;intf_work workqueue is never initialized when a driver is
probed for a non-existent device (in this case rt2500usb). On such a
path we call rt2x00lib_remove_dev() to free any resources initialized
during the probe before we use INIT_WORK to initialize the workqueue.
This causes lockdep to get confused since the lock used in the workqueue
hasn't been initialized yet but is now being acquired during
cancel_work_sync() called by rt2x00lib_remove_dev().

Fix this by initializing the workqueue first before we attempt to probe
the device. This should make lockdep happy and avoid breaking any
assumptions about how the library cleans up after a probe fails.

phy0 -&gt; rt2x00lib_probe_dev: Error - Failed to allocate device.
INFO: trying to register non-static key.
the code is fine but needs lockdep annotation.
turning off the locking correctness validator.
Pid: 2027, comm: modprobe Not tainted 2.6.35-rc5+ #60
Call Trace:
 [&lt;ffffffff8105fe59&gt;] register_lock_class+0x152/0x31f
 [&lt;ffffffff81344a00&gt;] ? usb_control_msg+0xd5/0x111
 [&lt;ffffffff81061bde&gt;] __lock_acquire+0xce/0xcf4
 [&lt;ffffffff8105f6fd&gt;] ? trace_hardirqs_off+0xd/0xf
 [&lt;ffffffff81492aef&gt;] ?  _raw_spin_unlock_irqrestore+0x33/0x41
 [&lt;ffffffff810628d5&gt;] lock_acquire+0xd1/0xf7
 [&lt;ffffffff8104f037&gt;] ? __cancel_work_timer+0x99/0x17e
 [&lt;ffffffff8104f06e&gt;] __cancel_work_timer+0xd0/0x17e
 [&lt;ffffffff8104f037&gt;] ? __cancel_work_timer+0x99/0x17e
 [&lt;ffffffff8104f136&gt;] cancel_work_sync+0xb/0xd
 [&lt;ffffffffa0096675&gt;] rt2x00lib_remove_dev+0x25/0xb0 [rt2x00lib]
 [&lt;ffffffffa0096bf7&gt;] rt2x00lib_probe_dev+0x380/0x3ed [rt2x00lib]
 [&lt;ffffffff811d78a7&gt;] ? __raw_spin_lock_init+0x31/0x52
 [&lt;ffffffffa00bbd2c&gt;] ? T.676+0xe/0x10 [rt2x00usb]
 [&lt;ffffffffa00bbe4f&gt;] rt2x00usb_probe+0x121/0x15e [rt2x00usb]
 [&lt;ffffffff813468bd&gt;] usb_probe_interface+0x151/0x19e
 [&lt;ffffffff812ea08e&gt;] driver_probe_device+0xa7/0x136
 [&lt;ffffffff812ea167&gt;] __driver_attach+0x4a/0x66
 [&lt;ffffffff812ea11d&gt;] ? __driver_attach+0x0/0x66
 [&lt;ffffffff812e96ca&gt;] bus_for_each_dev+0x54/0x89
 [&lt;ffffffff812e9efd&gt;] driver_attach+0x19/0x1b
 [&lt;ffffffff812e9b64&gt;] bus_add_driver+0xb4/0x204
 [&lt;ffffffff812ea41b&gt;] driver_register+0x98/0x109
 [&lt;ffffffff813465dd&gt;] usb_register_driver+0xb2/0x173
 [&lt;ffffffffa00ca000&gt;] ? rt2500usb_init+0x0/0x20 [rt2500usb]
 [&lt;ffffffffa00ca01e&gt;] rt2500usb_init+0x1e/0x20 [rt2500usb]
 [&lt;ffffffff81000203&gt;] do_one_initcall+0x6d/0x17a
 [&lt;ffffffff8106cae8&gt;] sys_init_module+0x9c/0x1e0
 [&lt;ffffffff8100296b&gt;] system_call_fastpath+0x16/0x1b

Signed-off-by: Stephen Boyd &lt;bebarino@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Use pretbtt irq for fetching beacons on rt2800pci</title>
<updated>2010-07-12T20:05:35+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2010-07-11T10:28:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=9f926fb57a2eb14d58ea6d6699544f9ccd0df8c7'/>
<id>9f926fb57a2eb14d58ea6d6699544f9ccd0df8c7</id>
<content type='text'>
Updating the beacon on pre tbtt instead of beacondone allows much lower
latency in regard to TIM updates. Hence, use the pre tbtt interrupt for
updating the beacon in rt2800pci (older devices don't provide a pre tbtt
interrupt).

Also, add a new driver flag to indicate if a driver has pre tbtt support
or not and implement the according behavior in rt2x00lib.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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>
Updating the beacon on pre tbtt instead of beacondone allows much lower
latency in regard to TIM updates. Hence, use the pre tbtt interrupt for
updating the beacon in rt2800pci (older devices don't provide a pre tbtt
interrupt).

Also, add a new driver flag to indicate if a driver has pre tbtt support
or not and implement the according behavior in rt2x00lib.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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: Implement broad- and multicast buffering</title>
<updated>2010-07-12T20:05:35+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2010-07-11T10:27:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=07896fe2f4df3802a224a2ee1aad1c7345d2513c'/>
<id>07896fe2f4df3802a224a2ee1aad1c7345d2513c</id>
<content type='text'>
Although mac80211 buffers broad- and mutlicast frames for us in AP mode
we still have to send them out after a DTIM beacon. Implement this
behavior by sending out the buffered frames when the beacondone
interrupt is processed.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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>
Although mac80211 buffers broad- and mutlicast frames for us in AP mode
we still have to send them out after a DTIM beacon. Implement this
behavior by sending out the buffered frames when the beacondone
interrupt is processed.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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: Allow beacon update without scheduling a work</title>
<updated>2010-07-12T20:05:34+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2010-07-11T10:27:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=4dee32f51b0beba25a70e8011652858c6e55f792'/>
<id>4dee32f51b0beba25a70e8011652858c6e55f792</id>
<content type='text'>
Since all rt2x00 PCI drivers use threaded interrupts now we don't need
to schedule a work just to update the beacon. The only place where the
beacon still gets updated in atomic context is from the set_tim
callback. Hence, move the work scheduling there.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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>
Since all rt2x00 PCI drivers use threaded interrupts now we don't need
to schedule a work just to update the beacon. The only place where the
beacon still gets updated in atomic context is from the set_tim
callback. Hence, move the work scheduling there.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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: Convert rt2x00 to use threaded interrupts</title>
<updated>2010-07-12T20:05:34+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2010-07-11T10:26:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=78e256c9a3717bcae2e9ed05c9ec7bed7bf2c55d'/>
<id>78e256c9a3717bcae2e9ed05c9ec7bed7bf2c55d</id>
<content type='text'>
Use threaded interrupts for all rt2x00 PCI devices.

This has several generic advantages:
- Reduce the time we spend in hard irq context
- Use non-atmic mac80211 functions for rx/tx

Furthermore implementing broad- and multicast buffering will be
much easier in process context while maintaining low latency and
updating the beacon just before transmission (pre tbtt interrupt)
can also be done in process context.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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>
Use threaded interrupts for all rt2x00 PCI devices.

This has several generic advantages:
- Reduce the time we spend in hard irq context
- Use non-atmic mac80211 functions for rx/tx

Furthermore implementing broad- and multicast buffering will be
much easier in process context while maintaining low latency and
updating the beacon just before transmission (pre tbtt interrupt)
can also be done in process context.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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: Implement watchdog monitoring</title>
<updated>2010-07-12T20:05:34+00:00</updated>
<author>
<name>Ivo van Doorn</name>
<email>ivdoorn@gmail.com</email>
</author>
<published>2010-07-11T10:25:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c965c74bbc650e5466d2f3e32bd28112ebcdd00c'/>
<id>c965c74bbc650e5466d2f3e32bd28112ebcdd00c</id>
<content type='text'>
Implement watchdog monitoring for USB devices (PCI support can
be added later). This will determine if URBs being uploaded to
the hardware are actually returning. Both rt2500usb and rt2800usb
have shown that URBs being uploaded can remain hanging without
being released by the hardware.
By using this watchdog, a queue can be reset when this occurs.
For rt2800usb it has been tested that the connection is preserved
even though this interruption.

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>
Implement watchdog monitoring for USB devices (PCI support can
be added later). This will determine if URBs being uploaded to
the hardware are actually returning. Both rt2500usb and rt2800usb
have shown that URBs being uploaded can remain hanging without
being released by the hardware.
By using this watchdog, a queue can be reset when this occurs.
For rt2800usb it has been tested that the connection is preserved
even though this interruption.

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 common txdone handling to rt2x00lib_txdone.</title>
<updated>2010-06-30T19:00:50+00:00</updated>
<author>
<name>Gertjan van Wingerde</name>
<email>gwingerde@gmail.com</email>
</author>
<published>2010-06-29T19:41:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=e513a0b6f1bf8e1b59b0e1382d4e7ef3d344d535'/>
<id>e513a0b6f1bf8e1b59b0e1382d4e7ef3d344d535</id>
<content type='text'>
Now that the write_tx_data functions are merged, also merge the relevant
parts of the txdone handling into common code, rather than {usb,pci}
specific code.

Signed-off-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
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>
Now that the write_tx_data functions are merged, also merge the relevant
parts of the txdone handling into common code, rather than {usb,pci}
specific code.

Signed-off-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
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: Implement tx mpdu aggregation</title>
<updated>2010-06-30T19:00:48+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2010-06-29T19:38:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=1df90809f79b765fd4e8868c2b182d948f198a17'/>
<id>1df90809f79b765fd4e8868c2b182d948f198a17</id>
<content type='text'>
In order to implement tx mpdu aggregation we only have to implement
the ampdu_action callback such that mac80211 allows negotiation of
blockack sessions.

The hardware will handle everything on its own as long as the ampdu
flag in the TXWI struct is set up correctly and we translate the tx
status correctly.

For now, refuse requests to start rx aggregation.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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>
In order to implement tx mpdu aggregation we only have to implement
the ampdu_action callback such that mac80211 allows negotiation of
blockack sessions.

The hardware will handle everything on its own as long as the ampdu
flag in the TXWI struct is set up correctly and we translate the tx
status correctly.

For now, refuse requests to start rx aggregation.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
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 tx status reporting when falling back to the lowest rate</title>
<updated>2010-06-15T20:00:50+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2010-06-14T20:12:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=3d2bc1036a64bc015671283833430035f7dbbed0'/>
<id>3d2bc1036a64bc015671283833430035f7dbbed0</id>
<content type='text'>
In some corner cases the reported tx rates/retries didn't match the really
used ones.

The hardware lowers the tx rate on each consecutive retry by 1 (but won't
fall back from MCS to legacy rates) _until_ it reaches the lowest one.

In case the frame wasn't sent succesful the number of retries is 7 and if
a rate index &lt;7 was used the previous code reported negative rate indexes
which were then ignored by the rate control algorithm and mac80211.

Instead, report the remaining number of retries to have happened with
the lowest rate (index 0). This should give the rate control algorithm
slightly more accurate information about the used tx rates/retries.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
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>
In some corner cases the reported tx rates/retries didn't match the really
used ones.

The hardware lowers the tx rate on each consecutive retry by 1 (but won't
fall back from MCS to legacy rates) _until_ it reaches the lowest one.

In case the frame wasn't sent succesful the number of retries is 7 and if
a rate index &lt;7 was used the previous code reported negative rate indexes
which were then ignored by the rate control algorithm and mac80211.

Instead, report the remaining number of retries to have happened with
the lowest rate (index 0). This should give the rate control algorithm
slightly more accurate information about the used tx rates/retries.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
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>
