Skip to content

Commit

Permalink
carl9170: fix tx_ampdu_upload counter
Browse files Browse the repository at this point in the history
tx_ampdu_upload was not decreased when an a-MPDU
frame had to be kicked out from the tx_pending
queues.

This broke ampdu aggregation, because the scheduler
waits until tx_ampdu_upload drops to zero, before
making the next aggregate.

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Christian Lamparter authored and John W. Linville committed Sep 28, 2010
1 parent 042c53f commit cb139ec
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion drivers/net/wireless/ath/carl9170/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,15 @@ static void carl9170_flush(struct ar9170 *ar, bool drop_queued)
for (i = 0; i < ar->hw->queues; i++) {
struct sk_buff *skb;

while ((skb = skb_dequeue(&ar->tx_pending[i])))
while ((skb = skb_dequeue(&ar->tx_pending[i]))) {
struct ieee80211_tx_info *info;

info = IEEE80211_SKB_CB(skb);
if (info->flags & IEEE80211_TX_CTL_AMPDU)
atomic_dec(&ar->tx_ampdu_upload);

carl9170_tx_status(ar, skb, false);
}
}
}

Expand Down Expand Up @@ -1462,6 +1469,7 @@ static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
skb_queue_walk_safe(&ar->tx_pending[i], skb, tmp) {
struct _carl9170_tx_superframe *super;
struct ieee80211_hdr *hdr;
struct ieee80211_tx_info *info;

super = (void *) skb->data;
hdr = (void *) super->frame_data;
Expand All @@ -1470,6 +1478,11 @@ static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
continue;

__skb_unlink(skb, &ar->tx_pending[i]);

info = IEEE80211_SKB_CB(skb);
if (info->flags & IEEE80211_TX_CTL_AMPDU)
atomic_dec(&ar->tx_ampdu_upload);

carl9170_tx_status(ar, skb, false);
}
spin_unlock_bh(&ar->tx_pending[i].lock);
Expand Down

0 comments on commit cb139ec

Please sign in to comment.