diff options
| -rw-r--r-- | package/madwifi/patches/118-txstop_workaround.patch | 34 | ||||
| -rw-r--r-- | package/madwifi/patches/300-napi_polling.patch | 4 | 
2 files changed, 18 insertions, 20 deletions
| diff --git a/package/madwifi/patches/118-txstop_workaround.patch b/package/madwifi/patches/118-txstop_workaround.patch index f478ea615..de0085f58 100644 --- a/package/madwifi/patches/118-txstop_workaround.patch +++ b/package/madwifi/patches/118-txstop_workaround.patch @@ -1,6 +1,6 @@  diff -ur madwifi.old/ath/if_ath.c madwifi.dev/ath/if_ath.c  --- madwifi.old/ath/if_ath.c	2007-05-15 16:26:02.721036296 +0200 -+++ madwifi.dev/ath/if_ath.c	2007-05-16 15:43:23.095362056 +0200 ++++ madwifi.dev/ath/if_ath.c	2007-05-20 21:33:53.269103736 +0200  @@ -1711,6 +1711,7 @@   			}    #endif @@ -9,43 +9,41 @@ diff -ur madwifi.old/ath/if_ath.c madwifi.dev/ath/if_ath.c   		}   		if (status & HAL_INT_BMISS) {   			sc->sc_stats.ast_bmiss++; -@@ -2261,6 +2262,25 @@ +@@ -2261,11 +2262,25 @@   		txq->axq_link = &lastds->ds_link;   		ath_hal_txstart(ah, txq->axq_qnum);   		sc->sc_dev->trans_start = jiffies;  +		if ((sc->sc_opmode == HAL_M_IBSS) || (sc->sc_opmode == HAL_M_HOSTAP)) {  +			unsigned long last; -+			ATH_LOCK(sc);  +			last = sc->sc_tx_start; -+			ATH_UNLOCK(sc);  +			if (last) {  +				if (jiffies > last + 2 * HZ) {  +					printk("%s: Tx queue stuck. Resetting hardware...\n", sc->sc_dev->name);  +					ath_reset(sc->sc_dev); -+					ATH_LOCK(sc);  +					sc->sc_tx_start = 0; -+					ATH_UNLOCK(sc);  +				}  +			} else { -+				ATH_LOCK(sc);  +				sc->sc_tx_start = jiffies; -+				ATH_UNLOCK(sc);  +			}  +		}   	}   	ATH_TXQ_UNLOCK(txq); -@@ -7289,6 +7309,10 @@ - 			break; - 		} + 	sc->sc_devstats.tx_packets++; + 	sc->sc_devstats.tx_bytes += framelen; ++	sc->sc_tx_start = 0; + } -+		ATH_LOCK(sc); -+		sc->sc_tx_start = 0; -+		ATH_UNLOCK(sc); -+ - #ifdef ATH_SUPERG_FF - 		ds = &bf->bf_desc[bf->bf_numdescff]; - 		DPRINTF(sc, ATH_DEBUG_TX_PROC, "%s: frame's last desc: %p\n", + static int  +@@ -7272,7 +7287,7 @@ + 		DPRINTF(sc, ATH_DEBUG_UAPSD, "%s: reaping U-APSD txq\n", __func__); + 		uapsdq = 1; + 	} +- ++	 + 	for (;;) { + 		if (uapsdq) + 			ATH_TXQ_UAPSDQ_LOCK_IRQ(txq);  diff -ur madwifi.old/ath/if_athvar.h madwifi.dev/ath/if_athvar.h  --- madwifi.old/ath/if_athvar.h	2007-05-04 23:09:29.000000000 +0200  +++ madwifi.dev/ath/if_athvar.h	2007-05-15 16:26:28.911054808 +0200 diff --git a/package/madwifi/patches/300-napi_polling.patch b/package/madwifi/patches/300-napi_polling.patch index 6572112b6..0f3efe833 100644 --- a/package/madwifi/patches/300-napi_polling.patch +++ b/package/madwifi/patches/300-napi_polling.patch @@ -66,7 +66,7 @@ diff -urN madwifi-ng-refcount-r2313-20070505.old/ath/if_ath.c madwifi-ng-refcoun   	 * pass it on to the hardware.   	 */  -	ATH_TXQ_LOCK(txq); -+	ATH_TXQ_LOCK_BH(txq); ++	ATH_TXQ_LOCK_IRQ(txq);   	if (ni && ni->ni_vap && txq == &ATH_VAP(ni->ni_vap)->av_mcastq) {   		/*   		 * The CAB queue is started from the SWBA handler since @@ -89,7 +89,7 @@ diff -urN madwifi-ng-refcount-r2313-20070505.old/ath/if_ath.c madwifi-ng-refcoun   		}   	}  -	ATH_TXQ_UNLOCK(txq); -+	ATH_TXQ_UNLOCK_BH(txq); ++	ATH_TXQ_UNLOCK_IRQ(txq);   	sc->sc_devstats.tx_packets++;   	sc->sc_devstats.tx_bytes += framelen; | 
