The following commit has been merged in the batman-adv/next branch: commit c1610117f81ae70b49aaf51ccb9040f2ce5bd358 Author: Sujith Manoharan c_manoha@qca.qualcomm.com Date: Fri Aug 10 16:47:03 2012 +0530
ath9k: Bail out properly before calculating rate index
Signed-off-by: Sujith Manoharan c_manoha@qca.qualcomm.com Signed-off-by: John W. Linville linville@tuxdriver.com
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c index a94c52b..0e3d20a 100644 --- a/drivers/net/wireless/ath/ath9k/rc.c +++ b/drivers/net/wireless/ath/ath9k/rc.c @@ -1264,23 +1264,12 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, struct ath_softc *sc = priv; struct ath_rate_priv *ath_rc_priv = priv_sta; struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr; + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; int final_ts_idx = 0, tx_status = 0; int long_retry = 0; - __le16 fc; + __le16 fc = hdr->frame_control; int i;
- hdr = (struct ieee80211_hdr *)skb->data; - fc = hdr->frame_control; - for (i = 0; i < sc->hw->max_rates; i++) { - struct ieee80211_tx_rate *rate = &tx_info->status.rates[i]; - if (rate->idx < 0 || !rate->count) - break; - - final_ts_idx = i; - long_retry = rate->count - 1; - } - if (!priv_sta || !ieee80211_is_data(fc)) return;
@@ -1292,6 +1281,15 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband, if (tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED) return;
+ for (i = 0; i < sc->hw->max_rates; i++) { + struct ieee80211_tx_rate *rate = &tx_info->status.rates[i]; + if (rate->idx < 0 || !rate->count) + break; + + final_ts_idx = i; + long_retry = rate->count - 1; + } + if (!(tx_info->flags & IEEE80211_TX_STAT_ACK)) tx_status = 1;