diff options
author | Vasanthakumar Thiagarajan <vasanth@atheros.com> | 2008-11-20 01:21:18 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-26 09:47:40 -0500 |
commit | 7ac47010a444d9f4285cf1ae06780633a112489b (patch) | |
tree | 1c2e739ceb5ef702efbd02551767d43f7da369ee /drivers/net/wireless/ath9k | |
parent | 40fc95d57caf258e20282f6526b695426d65a73a (diff) |
ath9k: Dont update rate control for every AMPDU
Update the rate control only with the tx status of first
AMPDU of an aggregation. This patch fixes frequent drops
in throughput.
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath9k')
-rw-r--r-- | drivers/net/wireless/ath9k/rc.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/rc.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath9k/xmit.c | 2 |
3 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath9k/rc.c b/drivers/net/wireless/ath9k/rc.c index e118824625ba..7d1913d48d31 100644 --- a/drivers/net/wireless/ath9k/rc.c +++ b/drivers/net/wireless/ath9k/rc.c | |||
@@ -1413,7 +1413,8 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, | |||
1413 | an = (struct ath_node *)sta->drv_priv; | 1413 | an = (struct ath_node *)sta->drv_priv; |
1414 | final_ts_idx = tx_info_priv->tx.ts_rateindex; | 1414 | final_ts_idx = tx_info_priv->tx.ts_rateindex; |
1415 | 1415 | ||
1416 | if (!an || !priv_sta || !ieee80211_is_data(fc)) | 1416 | if (!an || !priv_sta || !ieee80211_is_data(fc) || |
1417 | !tx_info_priv->update_rc) | ||
1417 | goto exit; | 1418 | goto exit; |
1418 | 1419 | ||
1419 | if (tx_info_priv->tx.ts_status & ATH9K_TXERR_FILT) | 1420 | if (tx_info_priv->tx.ts_status & ATH9K_TXERR_FILT) |
diff --git a/drivers/net/wireless/ath9k/rc.h b/drivers/net/wireless/ath9k/rc.h index 297dff96c3a1..97c60d12e8aa 100644 --- a/drivers/net/wireless/ath9k/rc.h +++ b/drivers/net/wireless/ath9k/rc.h | |||
@@ -188,6 +188,7 @@ struct ath_tx_info_priv { | |||
188 | struct ath_tx_status tx; | 188 | struct ath_tx_status tx; |
189 | int n_frames; | 189 | int n_frames; |
190 | int n_bad_frames; | 190 | int n_bad_frames; |
191 | bool update_rc; | ||
191 | }; | 192 | }; |
192 | 193 | ||
193 | #define ATH_TX_INFO_PRIV(tx_info) \ | 194 | #define ATH_TX_INFO_PRIV(tx_info) \ |
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c index 50d4105ee4b3..dad81a9df152 100644 --- a/drivers/net/wireless/ath9k/xmit.c +++ b/drivers/net/wireless/ath9k/xmit.c | |||
@@ -950,6 +950,7 @@ static void ath_tx_rc_status(struct ath_buf *bf, struct ath_desc *ds, int nbad) | |||
950 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); | 950 | struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); |
951 | struct ath_tx_info_priv *tx_info_priv = ATH_TX_INFO_PRIV(tx_info); | 951 | struct ath_tx_info_priv *tx_info_priv = ATH_TX_INFO_PRIV(tx_info); |
952 | 952 | ||
953 | tx_info_priv->update_rc = false; | ||
953 | if (ds->ds_txstat.ts_status & ATH9K_TXERR_FILT) | 954 | if (ds->ds_txstat.ts_status & ATH9K_TXERR_FILT) |
954 | tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; | 955 | tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; |
955 | 956 | ||
@@ -960,6 +961,7 @@ static void ath_tx_rc_status(struct ath_buf *bf, struct ath_desc *ds, int nbad) | |||
960 | sizeof(tx_info_priv->tx)); | 961 | sizeof(tx_info_priv->tx)); |
961 | tx_info_priv->n_frames = bf->bf_nframes; | 962 | tx_info_priv->n_frames = bf->bf_nframes; |
962 | tx_info_priv->n_bad_frames = nbad; | 963 | tx_info_priv->n_bad_frames = nbad; |
964 | tx_info_priv->update_rc = true; | ||
963 | } | 965 | } |
964 | } | 966 | } |
965 | } | 967 | } |