Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rt2x00: fix HT TX descriptor settings regression

Since:

commit 36323f817af0376c78612cfdab714b0feb05fea5
Author: Thomas Huehn <thomas@net.t-labs.tu-berlin.de>
Date: Mon Jul 23 21:33:42 2012 +0200

mac80211: move TX station pointer and restructure TX

we do not pass sta pointer to rt2x00queue_create_tx_descriptor_ht(),
hence we do not correctly set station WCID and AMPDU density parameters.

Cc: stable@vger.kernel.org # 3.7+
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Stanislaw Gruszka and committed by
John W. Linville
3d8bfe14 7777bd45

+5 -5
+1 -1
drivers/net/wireless/rt2x00/rt2x00lib.h
··· 146 146 * @local: frame is not from mac80211 147 147 */ 148 148 int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb, 149 - bool local); 149 + struct ieee80211_sta *sta, bool local); 150 150 151 151 /** 152 152 * rt2x00queue_update_beacon - Send new beacon from mac80211
+2 -2
drivers/net/wireless/rt2x00/rt2x00mac.c
··· 90 90 frag_skb->data, data_length, tx_info, 91 91 (struct ieee80211_rts *)(skb->data)); 92 92 93 - retval = rt2x00queue_write_tx_frame(queue, skb, true); 93 + retval = rt2x00queue_write_tx_frame(queue, skb, NULL, true); 94 94 if (retval) { 95 95 dev_kfree_skb_any(skb); 96 96 rt2x00_warn(rt2x00dev, "Failed to send RTS/CTS frame\n"); ··· 151 151 goto exit_fail; 152 152 } 153 153 154 - if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false))) 154 + if (unlikely(rt2x00queue_write_tx_frame(queue, skb, control->sta, false))) 155 155 goto exit_fail; 156 156 157 157 /*
+2 -2
drivers/net/wireless/rt2x00/rt2x00queue.c
··· 635 635 } 636 636 637 637 int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb, 638 - bool local) 638 + struct ieee80211_sta *sta, bool local) 639 639 { 640 640 struct ieee80211_tx_info *tx_info; 641 641 struct queue_entry *entry; ··· 649 649 * after that we are free to use the skb->cb array 650 650 * for our information. 651 651 */ 652 - rt2x00queue_create_tx_descriptor(queue->rt2x00dev, skb, &txdesc, NULL); 652 + rt2x00queue_create_tx_descriptor(queue->rt2x00dev, skb, &txdesc, sta); 653 653 654 654 /* 655 655 * All information is retrieved from the skb->cb array,