carl9170: fix AMPDU TX_CTL_REQ_TX_STATUS handling
Previously the driver did not care if TX_CTL_REQ_TX_STATUS was set on aggregated frames or not and it would silently drop successfully sent frames if possible [much like: "no news is good news!"]. But, TX_CTL_REQ_TX_STATUS was invented for a reason and no tx status report should ever be dropped if it is set. Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Christian Lamparter <chunkeey@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
fd26981cf5
commit
94d55d62bd
|
@ -296,7 +296,8 @@ static void carl9170_tx_release(struct kref *ref)
|
||||||
super = (void *)skb->data;
|
super = (void *)skb->data;
|
||||||
txinfo->status.ampdu_len = super->s.rix;
|
txinfo->status.ampdu_len = super->s.rix;
|
||||||
txinfo->status.ampdu_ack_len = super->s.cnt;
|
txinfo->status.ampdu_ack_len = super->s.cnt;
|
||||||
} else if (txinfo->flags & IEEE80211_TX_STAT_ACK) {
|
} else if ((txinfo->flags & IEEE80211_TX_STAT_ACK) &&
|
||||||
|
!(txinfo->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)) {
|
||||||
/*
|
/*
|
||||||
* drop redundant tx_status reports:
|
* drop redundant tx_status reports:
|
||||||
*
|
*
|
||||||
|
@ -308,15 +309,17 @@ static void carl9170_tx_release(struct kref *ref)
|
||||||
*
|
*
|
||||||
* 3. minstrel_ht is picky, it only accepts
|
* 3. minstrel_ht is picky, it only accepts
|
||||||
* reports of frames with the TX_STATUS_AMPDU flag.
|
* reports of frames with the TX_STATUS_AMPDU flag.
|
||||||
|
*
|
||||||
|
* 4. mac80211 is not particularly interested in
|
||||||
|
* feedback either [CTL_REQ_TX_STATUS not set]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Frame has failed, but we want to keep it in
|
* Either the frame transmission has failed or
|
||||||
* case it was lost due to a power-state
|
* mac80211 requested tx status.
|
||||||
* transition.
|
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue