43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/drivers/net/wireless/ath/ath9k/xmit.c
 | |
| +++ b/drivers/net/wireless/ath/ath9k/xmit.c
 | |
| @@ -1947,10 +1947,10 @@ static void ath_tx_rc_status(struct ath_
 | |
|  	tx_rateindex = ds->ds_txstat.ts_rateindex;
 | |
|  	WARN_ON(tx_rateindex >= hw->max_rates);
 | |
|  
 | |
| -	if (update_rc)
 | |
| -		tx_info->pad[0] |= ATH_TX_INFO_UPDATE_RC;
 | |
|  	if (ds->ds_txstat.ts_status & ATH9K_TXERR_FILT)
 | |
|  		tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
 | |
| +	if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && update_rc)
 | |
| +		tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
 | |
|  
 | |
|  	if ((ds->ds_txstat.ts_status & ATH9K_TXERR_FILT) == 0 &&
 | |
|  	    (bf->bf_flags & ATH9K_TXDESC_NOACK) == 0 && update_rc) {
 | |
| --- a/drivers/net/wireless/ath/ath9k/rc.h
 | |
| +++ b/drivers/net/wireless/ath/ath9k/rc.h
 | |
| @@ -172,7 +172,6 @@ struct ath_rate_priv {
 | |
|  
 | |
|  #define ATH_TX_INFO_FRAME_TYPE_INTERNAL	(1 << 0)
 | |
|  #define ATH_TX_INFO_FRAME_TYPE_PAUSE	(1 << 1)
 | |
| -#define ATH_TX_INFO_UPDATE_RC		(1 << 2)
 | |
|  #define ATH_TX_INFO_XRETRY		(1 << 3)
 | |
|  #define ATH_TX_INFO_UNDERRUN		(1 << 4)
 | |
|  
 | |
| --- a/drivers/net/wireless/ath/ath9k/rc.c
 | |
| +++ b/drivers/net/wireless/ath/ath9k/rc.c
 | |
| @@ -1226,8 +1226,12 @@ static void ath_tx_status(void *priv, st
 | |
|  		long_retry = rate->count - 1;
 | |
|  	}
 | |
|  
 | |
| -	if (!priv_sta || !ieee80211_is_data(fc) ||
 | |
| -	    !(tx_info->pad[0] & ATH_TX_INFO_UPDATE_RC))
 | |
| +	if (!priv_sta || !ieee80211_is_data(fc))
 | |
| +		return;
 | |
| +
 | |
| +	/* This packet was aggregated but doesn't carry status info */
 | |
| +	if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) &&
 | |
| +	    !(tx_info->flags & IEEE80211_TX_STAT_AMPDU))
 | |
|  		return;
 | |
|  
 | |
|  	if (tx_info->flags & IEEE80211_TX_STAT_TX_FILTERED)
 |