mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			961 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			961 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Merged from madwifi trunk r3551, r3552
 | |
| 
 | |
| --- a/ath/if_ath.c
 | |
| +++ b/ath/if_ath.c
 | |
| @@ -8253,6 +8253,17 @@ ath_tx_processq(struct ath_softc *sc, st
 | |
|  			goto bf_fail;
 | |
|  		}
 | |
|  
 | |
| +		/* We make sure we don't remove the TX descriptor on
 | |
| +		 * which the HW is pointing since it contains the
 | |
| +		 * ds_link field, except if this is the last TX
 | |
| +		 * descriptor in the queue */
 | |
| +
 | |
| +		if ((txq->axq_depth > 1) &&
 | |
| +		    (bf->bf_daddr == ath_hal_gettxbuf(ah, txq->axq_qnum))) {
 | |
| +			ATH_TXQ_UNLOCK_IRQ_EARLY(txq);
 | |
| +			goto bf_fail;
 | |
| +		}
 | |
| +
 | |
|  		ATH_TXQ_REMOVE_HEAD(txq, bf_list);
 | |
|  		ATH_TXQ_UNLOCK_IRQ(txq);
 | |
|  
 | |
| --- a/ath/if_athvar.h
 | |
| +++ b/ath/if_athvar.h
 | |
| @@ -586,7 +586,8 @@ struct ath_vap {
 | |
|  } while (0)
 | |
|  #define ATH_TXQ_REMOVE_HEAD(_tq, _field) do { \
 | |
|  	STAILQ_REMOVE_HEAD(&(_tq)->axq_q, _field); \
 | |
| -	(_tq)->axq_depth--; \
 | |
| +	if (--(_tq)->axq_depth <= 0) \
 | |
| +		(_tq)->axq_link = NULL; \
 | |
|  } while (0)
 | |
|  /* move buffers from MCASTQ to CABQ */
 | |
|  #define ATH_TXQ_MOVE_MCASTQ(_tqs,_tqd) do { \
 |