<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/net/wireless/rt2x00/rt2x00queue.c, branch linux-3.8.y</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>mac80211: move TX station pointer and restructure TX</title>
<updated>2012-07-31T14:18:39+00:00</updated>
<author>
<name>Thomas Huehn</name>
<email>thomas@net.t-labs.tu-berlin.de</email>
</author>
<published>2012-07-23T19:33:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=36323f817af0376c78612cfdab714b0feb05fea5'/>
<id>36323f817af0376c78612cfdab714b0feb05fea5</id>
<content type='text'>
Remove the control.sta pointer from ieee80211_tx_info to free up
sufficient space in the TX skb control buffer for the upcoming
Transmit Power Control (TPC).
Instead, the pointer is now on the stack in a new control struct
that is passed as a function parameter to the drivers' tx method.

Signed-off-by: Thomas Huehn &lt;thomas@net.t-labs.tu-berlin.de&gt;
Signed-off-by: Alina Friedrichsen &lt;x-alina@gmx.net&gt;
Signed-off-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
[reworded commit message]
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Remove the control.sta pointer from ieee80211_tx_info to free up
sufficient space in the TX skb control buffer for the upcoming
Transmit Power Control (TPC).
Instead, the pointer is now on the stack in a new control struct
that is passed as a function parameter to the drivers' tx method.

Signed-off-by: Thomas Huehn &lt;thomas@net.t-labs.tu-berlin.de&gt;
Signed-off-by: Alina Friedrichsen &lt;x-alina@gmx.net&gt;
Signed-off-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
[reworded commit message]
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: remove unused argument</title>
<updated>2012-07-11T19:38:27+00:00</updated>
<author>
<name>Stanislaw Gruszka</name>
<email>sgruszka@redhat.com</email>
</author>
<published>2012-07-09T15:24:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=db36f792370959ff26458f80942cf98fe8249d95'/>
<id>db36f792370959ff26458f80942cf98fe8249d95</id>
<content type='text'>
Data pointer on rt2x00queue_for_each_entry() is never used - remove it.

Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.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>
Data pointer on rt2x00queue_for_each_entry() is never used - remove it.

Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: use atomic variable for seqno</title>
<updated>2012-06-04T19:26:26+00:00</updated>
<author>
<name>Stanislaw Gruszka</name>
<email>sgruszka@redhat.com</email>
</author>
<published>2012-06-01T09:29:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=e5851dac2c95af7159716832300b9f50c62c648e'/>
<id>e5851dac2c95af7159716832300b9f50c62c648e</id>
<content type='text'>
Remove spinlock as atomic_t can be used instead. Note we use only 16
lower bits, upper bits are changed but we impilcilty cast to u16.

This fix possible deadlock on IBSS mode reproted by lockdep:

=================================
[ INFO: inconsistent lock state ]
3.4.0-wl+ #4 Not tainted
---------------------------------
inconsistent {IN-SOFTIRQ-W} -&gt; {SOFTIRQ-ON-W} usage.
kworker/u:2/30374 [HC0[0]:SC0[0]:HE1:SE1] takes:
 (&amp;(&amp;intf-&gt;seqlock)-&gt;rlock){+.?...}, at: [&lt;f9979a20&gt;] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
{IN-SOFTIRQ-W} state was registered at:
  [&lt;c04978ab&gt;] __lock_acquire+0x47b/0x1050
  [&lt;c0498504&gt;] lock_acquire+0x84/0xf0
  [&lt;c0835733&gt;] _raw_spin_lock+0x33/0x40
  [&lt;f9979a20&gt;] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
  [&lt;f9979f2a&gt;] rt2x00queue_write_tx_frame+0x1a/0x300 [rt2x00lib]
  [&lt;f997834f&gt;] rt2x00mac_tx+0x7f/0x380 [rt2x00lib]
  [&lt;f98fe363&gt;] __ieee80211_tx+0x1b3/0x300 [mac80211]
  [&lt;f98ffdf5&gt;] ieee80211_tx+0x105/0x130 [mac80211]
  [&lt;f99000dd&gt;] ieee80211_xmit+0xad/0x100 [mac80211]
  [&lt;f9900519&gt;] ieee80211_subif_start_xmit+0x2d9/0x930 [mac80211]
  [&lt;c0782e87&gt;] dev_hard_start_xmit+0x307/0x660
  [&lt;c079bb71&gt;] sch_direct_xmit+0xa1/0x1e0
  [&lt;c0784bb3&gt;] dev_queue_xmit+0x183/0x730
  [&lt;c078c27a&gt;] neigh_resolve_output+0xfa/0x1e0
  [&lt;c07b436a&gt;] ip_finish_output+0x24a/0x460
  [&lt;c07b4897&gt;] ip_output+0xb7/0x100
  [&lt;c07b2d60&gt;] ip_local_out+0x20/0x60
  [&lt;c07e01ff&gt;] igmpv3_sendpack+0x4f/0x60
  [&lt;c07e108f&gt;] igmp_ifc_timer_expire+0x29f/0x330
  [&lt;c04520fc&gt;] run_timer_softirq+0x15c/0x2f0
  [&lt;c0449e3e&gt;] __do_softirq+0xae/0x1e0
irq event stamp: 18380437
hardirqs last  enabled at (18380437): [&lt;c0526027&gt;] __slab_alloc.clone.3+0x67/0x5f0
hardirqs last disabled at (18380436): [&lt;c0525ff3&gt;] __slab_alloc.clone.3+0x33/0x5f0
softirqs last  enabled at (18377616): [&lt;c0449eb3&gt;] __do_softirq+0x123/0x1e0
softirqs last disabled at (18377611): [&lt;c041278d&gt;] do_softirq+0x9d/0xe0

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&amp;(&amp;intf-&gt;seqlock)-&gt;rlock);
  &lt;Interrupt&gt;
    lock(&amp;(&amp;intf-&gt;seqlock)-&gt;rlock);

 *** DEADLOCK ***

4 locks held by kworker/u:2/30374:
 #0:  (wiphy_name(local-&gt;hw.wiphy)){++++.+}, at: [&lt;c045cf99&gt;] process_one_work+0x109/0x3f0
 #1:  ((&amp;sdata-&gt;work)){+.+.+.}, at: [&lt;c045cf99&gt;] process_one_work+0x109/0x3f0
 #2:  (&amp;ifibss-&gt;mtx){+.+.+.}, at: [&lt;f98f005b&gt;] ieee80211_ibss_work+0x1b/0x470 [mac80211]
 #3:  (&amp;intf-&gt;beacon_skb_mutex){+.+...}, at: [&lt;f997a644&gt;] rt2x00queue_update_beacon+0x24/0x50 [rt2x00lib]

stack backtrace:
Pid: 30374, comm: kworker/u:2 Not tainted 3.4.0-wl+ #4
Call Trace:
 [&lt;c04962a6&gt;] print_usage_bug+0x1f6/0x220
 [&lt;c0496a12&gt;] mark_lock+0x2c2/0x300
 [&lt;c0495ff0&gt;] ? check_usage_forwards+0xc0/0xc0
 [&lt;c04978ec&gt;] __lock_acquire+0x4bc/0x1050
 [&lt;c0527890&gt;] ? __kmalloc_track_caller+0x1c0/0x1d0
 [&lt;c0777fb6&gt;] ? copy_skb_header+0x26/0x90
 [&lt;c0498504&gt;] lock_acquire+0x84/0xf0
 [&lt;f9979a20&gt;] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
 [&lt;c0835733&gt;] _raw_spin_lock+0x33/0x40
 [&lt;f9979a20&gt;] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
 [&lt;f9979a20&gt;] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
 [&lt;f997a5cf&gt;] rt2x00queue_update_beacon_locked+0x5f/0xb0 [rt2x00lib]
 [&lt;f997a64d&gt;] rt2x00queue_update_beacon+0x2d/0x50 [rt2x00lib]
 [&lt;f9977e3a&gt;] rt2x00mac_bss_info_changed+0x1ca/0x200 [rt2x00lib]
 [&lt;f9977c70&gt;] ? rt2x00mac_remove_interface+0x70/0x70 [rt2x00lib]
 [&lt;f98e4dd0&gt;] ieee80211_bss_info_change_notify+0xe0/0x1d0 [mac80211]
 [&lt;f98ef7b8&gt;] __ieee80211_sta_join_ibss+0x3b8/0x610 [mac80211]
 [&lt;c0496ab4&gt;] ? mark_held_locks+0x64/0xc0
 [&lt;c0440012&gt;] ? virt_efi_query_capsule_caps+0x12/0x50
 [&lt;f98efb09&gt;] ieee80211_sta_join_ibss+0xf9/0x140 [mac80211]
 [&lt;f98f0456&gt;] ieee80211_ibss_work+0x416/0x470 [mac80211]
 [&lt;c0496d8b&gt;] ? trace_hardirqs_on+0xb/0x10
 [&lt;c077683b&gt;] ? skb_dequeue+0x4b/0x70
 [&lt;f98f207f&gt;] ieee80211_iface_work+0x13f/0x230 [mac80211]
 [&lt;c045cf99&gt;] ? process_one_work+0x109/0x3f0
 [&lt;c045d015&gt;] process_one_work+0x185/0x3f0
 [&lt;c045cf99&gt;] ? process_one_work+0x109/0x3f0
 [&lt;f98f1f40&gt;] ? ieee80211_teardown_sdata+0xa0/0xa0 [mac80211]
 [&lt;c045ed86&gt;] worker_thread+0x116/0x270
 [&lt;c045ec70&gt;] ? manage_workers+0x1e0/0x1e0
 [&lt;c0462f64&gt;] kthread+0x84/0x90
 [&lt;c0462ee0&gt;] ? __init_kthread_worker+0x60/0x60
 [&lt;c083d382&gt;] kernel_thread_helper+0x6/0x10

Cc: stable@vger.kernel.org
Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Acked-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@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>
Remove spinlock as atomic_t can be used instead. Note we use only 16
lower bits, upper bits are changed but we impilcilty cast to u16.

This fix possible deadlock on IBSS mode reproted by lockdep:

=================================
[ INFO: inconsistent lock state ]
3.4.0-wl+ #4 Not tainted
---------------------------------
inconsistent {IN-SOFTIRQ-W} -&gt; {SOFTIRQ-ON-W} usage.
kworker/u:2/30374 [HC0[0]:SC0[0]:HE1:SE1] takes:
 (&amp;(&amp;intf-&gt;seqlock)-&gt;rlock){+.?...}, at: [&lt;f9979a20&gt;] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
{IN-SOFTIRQ-W} state was registered at:
  [&lt;c04978ab&gt;] __lock_acquire+0x47b/0x1050
  [&lt;c0498504&gt;] lock_acquire+0x84/0xf0
  [&lt;c0835733&gt;] _raw_spin_lock+0x33/0x40
  [&lt;f9979a20&gt;] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
  [&lt;f9979f2a&gt;] rt2x00queue_write_tx_frame+0x1a/0x300 [rt2x00lib]
  [&lt;f997834f&gt;] rt2x00mac_tx+0x7f/0x380 [rt2x00lib]
  [&lt;f98fe363&gt;] __ieee80211_tx+0x1b3/0x300 [mac80211]
  [&lt;f98ffdf5&gt;] ieee80211_tx+0x105/0x130 [mac80211]
  [&lt;f99000dd&gt;] ieee80211_xmit+0xad/0x100 [mac80211]
  [&lt;f9900519&gt;] ieee80211_subif_start_xmit+0x2d9/0x930 [mac80211]
  [&lt;c0782e87&gt;] dev_hard_start_xmit+0x307/0x660
  [&lt;c079bb71&gt;] sch_direct_xmit+0xa1/0x1e0
  [&lt;c0784bb3&gt;] dev_queue_xmit+0x183/0x730
  [&lt;c078c27a&gt;] neigh_resolve_output+0xfa/0x1e0
  [&lt;c07b436a&gt;] ip_finish_output+0x24a/0x460
  [&lt;c07b4897&gt;] ip_output+0xb7/0x100
  [&lt;c07b2d60&gt;] ip_local_out+0x20/0x60
  [&lt;c07e01ff&gt;] igmpv3_sendpack+0x4f/0x60
  [&lt;c07e108f&gt;] igmp_ifc_timer_expire+0x29f/0x330
  [&lt;c04520fc&gt;] run_timer_softirq+0x15c/0x2f0
  [&lt;c0449e3e&gt;] __do_softirq+0xae/0x1e0
irq event stamp: 18380437
hardirqs last  enabled at (18380437): [&lt;c0526027&gt;] __slab_alloc.clone.3+0x67/0x5f0
hardirqs last disabled at (18380436): [&lt;c0525ff3&gt;] __slab_alloc.clone.3+0x33/0x5f0
softirqs last  enabled at (18377616): [&lt;c0449eb3&gt;] __do_softirq+0x123/0x1e0
softirqs last disabled at (18377611): [&lt;c041278d&gt;] do_softirq+0x9d/0xe0

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&amp;(&amp;intf-&gt;seqlock)-&gt;rlock);
  &lt;Interrupt&gt;
    lock(&amp;(&amp;intf-&gt;seqlock)-&gt;rlock);

 *** DEADLOCK ***

4 locks held by kworker/u:2/30374:
 #0:  (wiphy_name(local-&gt;hw.wiphy)){++++.+}, at: [&lt;c045cf99&gt;] process_one_work+0x109/0x3f0
 #1:  ((&amp;sdata-&gt;work)){+.+.+.}, at: [&lt;c045cf99&gt;] process_one_work+0x109/0x3f0
 #2:  (&amp;ifibss-&gt;mtx){+.+.+.}, at: [&lt;f98f005b&gt;] ieee80211_ibss_work+0x1b/0x470 [mac80211]
 #3:  (&amp;intf-&gt;beacon_skb_mutex){+.+...}, at: [&lt;f997a644&gt;] rt2x00queue_update_beacon+0x24/0x50 [rt2x00lib]

stack backtrace:
Pid: 30374, comm: kworker/u:2 Not tainted 3.4.0-wl+ #4
Call Trace:
 [&lt;c04962a6&gt;] print_usage_bug+0x1f6/0x220
 [&lt;c0496a12&gt;] mark_lock+0x2c2/0x300
 [&lt;c0495ff0&gt;] ? check_usage_forwards+0xc0/0xc0
 [&lt;c04978ec&gt;] __lock_acquire+0x4bc/0x1050
 [&lt;c0527890&gt;] ? __kmalloc_track_caller+0x1c0/0x1d0
 [&lt;c0777fb6&gt;] ? copy_skb_header+0x26/0x90
 [&lt;c0498504&gt;] lock_acquire+0x84/0xf0
 [&lt;f9979a20&gt;] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
 [&lt;c0835733&gt;] _raw_spin_lock+0x33/0x40
 [&lt;f9979a20&gt;] ? rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
 [&lt;f9979a20&gt;] rt2x00queue_create_tx_descriptor+0x380/0x490 [rt2x00lib]
 [&lt;f997a5cf&gt;] rt2x00queue_update_beacon_locked+0x5f/0xb0 [rt2x00lib]
 [&lt;f997a64d&gt;] rt2x00queue_update_beacon+0x2d/0x50 [rt2x00lib]
 [&lt;f9977e3a&gt;] rt2x00mac_bss_info_changed+0x1ca/0x200 [rt2x00lib]
 [&lt;f9977c70&gt;] ? rt2x00mac_remove_interface+0x70/0x70 [rt2x00lib]
 [&lt;f98e4dd0&gt;] ieee80211_bss_info_change_notify+0xe0/0x1d0 [mac80211]
 [&lt;f98ef7b8&gt;] __ieee80211_sta_join_ibss+0x3b8/0x610 [mac80211]
 [&lt;c0496ab4&gt;] ? mark_held_locks+0x64/0xc0
 [&lt;c0440012&gt;] ? virt_efi_query_capsule_caps+0x12/0x50
 [&lt;f98efb09&gt;] ieee80211_sta_join_ibss+0xf9/0x140 [mac80211]
 [&lt;f98f0456&gt;] ieee80211_ibss_work+0x416/0x470 [mac80211]
 [&lt;c0496d8b&gt;] ? trace_hardirqs_on+0xb/0x10
 [&lt;c077683b&gt;] ? skb_dequeue+0x4b/0x70
 [&lt;f98f207f&gt;] ieee80211_iface_work+0x13f/0x230 [mac80211]
 [&lt;c045cf99&gt;] ? process_one_work+0x109/0x3f0
 [&lt;c045d015&gt;] process_one_work+0x185/0x3f0
 [&lt;c045cf99&gt;] ? process_one_work+0x109/0x3f0
 [&lt;f98f1f40&gt;] ? ieee80211_teardown_sdata+0xa0/0xa0 [mac80211]
 [&lt;c045ed86&gt;] worker_thread+0x116/0x270
 [&lt;c045ec70&gt;] ? manage_workers+0x1e0/0x1e0
 [&lt;c0462f64&gt;] kthread+0x84/0x90
 [&lt;c0462ee0&gt;] ? __init_kthread_worker+0x60/0x60
 [&lt;c083d382&gt;] kernel_thread_helper+0x6/0x10

Cc: stable@vger.kernel.org
Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Acked-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Use GFP_KERNEL for rx buffer allocation on USB devices</title>
<updated>2012-04-23T19:35:29+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2012-04-19T11:24:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=88211021a67250fd65029d7400f41ee8f91cb25d'/>
<id>88211021a67250fd65029d7400f41ee8f91cb25d</id>
<content type='text'>
Since the RX path on USB devices is handled in process context we can
use GFP_KERNEL for RX buffer allocation. This should reduce the
likelihood of allocation failures.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Tested-By: Marc Dietrich &lt;marvin24@gmx.de&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 the RX path on USB devices is handled in process context we can
use GFP_KERNEL for RX buffer allocation. This should reduce the
likelihood of allocation failures.

Signed-off-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Tested-By: Marc Dietrich &lt;marvin24@gmx.de&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: do not generate seqno in h/w if QOS is disabled</title>
<updated>2012-04-11T20:24:01+00:00</updated>
<author>
<name>Stanislaw Gruszka</name>
<email>sgruszka@redhat.com</email>
</author>
<published>2012-04-02T11:21:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=e66a8ddff72e85605f2212a0ebc666c7e9116641'/>
<id>e66a8ddff72e85605f2212a0ebc666c7e9116641</id>
<content type='text'>
This is workaround H/W or F/W bug, see in code comments. Without the fix
ping can receive duplicated ICMP frames while associated with legacy AP.

Reported-by: Walter Goldens &lt;goldenstranger@yahoo.com&gt;
Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Acked-by: Helmut Schaa &lt;helmut.schaa@googlemail.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 is workaround H/W or F/W bug, see in code comments. Without the fix
ping can receive duplicated ICMP frames while associated with legacy AP.

Reported-by: Walter Goldens &lt;goldenstranger@yahoo.com&gt;
Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Acked-by: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: configure different txdesc parameters for non HT channel</title>
<updated>2012-04-11T20:23:44+00:00</updated>
<author>
<name>Stanislaw Gruszka</name>
<email>sgruszka@redhat.com</email>
</author>
<published>2012-04-04T14:15:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=da40f4074fdfde347974ebcef3ad57a49f7d04a7'/>
<id>da40f4074fdfde347974ebcef3ad57a49f7d04a7</id>
<content type='text'>
This is needed when we are concted to non 11n AP.

Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.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 is needed when we are concted to non 11n AP.

Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: fix random stalls</title>
<updated>2012-03-12T18:00:17+00:00</updated>
<author>
<name>Stanislaw Gruszka</name>
<email>sgruszka@redhat.com</email>
</author>
<published>2012-03-09T11:39:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=3780d038fdf4b5ef26ead10b0604ab1f46dd9510'/>
<id>3780d038fdf4b5ef26ead10b0604ab1f46dd9510</id>
<content type='text'>
Is possible that we stop queue and then do not wake up it again,
especially when packets are transmitted fast. That can be easily
reproduced with modified tx queue entry_num to some small value e.g. 16.

If mac80211 already hold local-&gt;queue_stop_reason_lock, then we can wait
on that lock in both rt2x00queue_pause_queue() and
rt2x00queue_unpause_queue(). After drooping -&gt;queue_stop_reason_lock
is possible that __ieee80211_wake_queue() will be performed before
__ieee80211_stop_queue(), hence we stop queue and newer wake up it
again.

Another race condition is possible when between rt2x00queue_threshold()
check and rt2x00queue_pause_queue() we will process all pending tx
buffers on different cpu. This might happen if for example interrupt
will be triggered on cpu performing rt2x00mac_tx().

To prevent race conditions serialize pause/unpause by queue-&gt;tx_lock.

Cc: stable@vger.kernel.org
Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@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>
Is possible that we stop queue and then do not wake up it again,
especially when packets are transmitted fast. That can be easily
reproduced with modified tx queue entry_num to some small value e.g. 16.

If mac80211 already hold local-&gt;queue_stop_reason_lock, then we can wait
on that lock in both rt2x00queue_pause_queue() and
rt2x00queue_unpause_queue(). After drooping -&gt;queue_stop_reason_lock
is possible that __ieee80211_wake_queue() will be performed before
__ieee80211_stop_queue(), hence we stop queue and newer wake up it
again.

Another race condition is possible when between rt2x00queue_threshold()
check and rt2x00queue_pause_queue() we will process all pending tx
buffers on different cpu. This might happen if for example interrupt
will be triggered on cpu performing rt2x00mac_tx().

To prevent race conditions serialize pause/unpause by queue-&gt;tx_lock.

Cc: stable@vger.kernel.org
Signed-off-by: Stanislaw Gruszka &lt;sgruszka@redhat.com&gt;
Acked-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rt2x00: Add WCID to HT TX descriptor</title>
<updated>2011-09-14T17:56:56+00:00</updated>
<author>
<name>Helmut Schaa</name>
<email>helmut.schaa@googlemail.com</email>
</author>
<published>2011-09-08T12:37:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=ead2bb64a38c471ad0a769f61921f330f062dd50'/>
<id>ead2bb64a38c471ad0a769f61921f330f062dd50</id>
<content type='text'>
When sending an unencrypted frame to a STA the driver might want to pass
a suitable WCID since we don't have a key index to allow tx status
reports to get properly assigned to the correct STA.

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>
When sending an unencrypted frame to a STA the driver might want to pass
a suitable WCID since we don't have a key index to allow tx status
reports to get properly assigned to the correct STA.

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: Reduce window of a queue's tx lock.</title>
<updated>2011-07-07T17:20:58+00:00</updated>
<author>
<name>Gertjan van Wingerde</name>
<email>gwingerde@gmail.com</email>
</author>
<published>2011-07-06T20:57:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=128f8f773d77d41a7dbcaf5d36325a0f4e7955cd'/>
<id>128f8f773d77d41a7dbcaf5d36325a0f4e7955cd</id>
<content type='text'>
Currently a lot of actions that can be done without the queue's tx lock
being held are done inside the locked area.
Move them out to have a leaner and meaner code that operates while the
tx lock is being held.

Signed-off-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Acked-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>
Currently a lot of actions that can be done without the queue's tx lock
being held are done inside the locked area.
Move them out to have a leaner and meaner code that operates while the
tx lock is being held.

Signed-off-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Acked-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: Don't use queue entry as parameter when creating TX descriptor.</title>
<updated>2011-07-07T17:20:58+00:00</updated>
<author>
<name>Gertjan van Wingerde</name>
<email>gwingerde@gmail.com</email>
</author>
<published>2011-07-06T20:57:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=77b5621bac4a56b83b9081f48d4e7d1accdde400'/>
<id>77b5621bac4a56b83b9081f48d4e7d1accdde400</id>
<content type='text'>
The functions that create the tx descriptor structure do not operate on
a queue entry at all. Signal this fact in the code by not providing a
queue entry as a parameter, but the rt2x00 device structure and the skb
directly.

This patch is a preparation for reducing the time a queue is locked for
a tx operation.

Signed-off-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Acked-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>
The functions that create the tx descriptor structure do not operate on
a queue entry at all. Signal this fact in the code by not providing a
queue entry as a parameter, but the rt2x00 device structure and the skb
directly.

This patch is a preparation for reducing the time a queue is locked for
a tx operation.

Signed-off-by: Gertjan van Wingerde &lt;gwingerde@gmail.com&gt;
Acked-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>
</feed>
