diff options
author | Felix Fietkau <nbd@openwrt.org> | 2009-03-25 01:26:36 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2009-03-25 01:26:36 +0000 |
commit | 4f42b6112e4091c489500879377130a58988c05b (patch) | |
tree | 6dbad853dc283c4067bf0a747365f941380c23ed /package/madwifi/patches | |
parent | 87783599b286fcd2d2a8b675f76718ace632b5a4 (diff) | |
download | upstream-4f42b6112e4091c489500879377130a58988c05b.tar.gz upstream-4f42b6112e4091c489500879377130a58988c05b.tar.bz2 upstream-4f42b6112e4091c489500879377130a58988c05b.zip |
madwifi: treat rxorn like rx, reset after rxorn seems to do more harm than good
SVN-Revision: 15030
Diffstat (limited to 'package/madwifi/patches')
-rw-r--r-- | package/madwifi/patches/413-rxorn.patch | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/package/madwifi/patches/413-rxorn.patch b/package/madwifi/patches/413-rxorn.patch new file mode 100644 index 0000000000..b4174716d7 --- /dev/null +++ b/package/madwifi/patches/413-rxorn.patch @@ -0,0 +1,31 @@ +--- a/ath/if_ath.c ++++ b/ath/if_ath.c +@@ -2307,6 +2307,17 @@ ath_intr(int irq, void *dev_id, struct p + + sc->sc_isr = status; + status &= sc->sc_imask; /* discard unasked for bits */ ++ ++ /* Treat RXORN as non-fatal. Either the bus is busy or the CPU ++ * is not fast enough to process all frames. Treat it like ++ * an Rx interrupt ++ */ ++ if (status & HAL_INT_RXORN) { ++ sc->sc_stats.ast_rxorn++; ++ status &= ~HAL_INT_RXORN; ++ status |= HAL_INT_RX; ++ } ++ + /* As soon as we know we have a real interrupt we intend to service, + * we will check to see if we need an initial hardware TSF reading. + * Normally we would just populate this all the time to keep things +@@ -2319,10 +2330,6 @@ ath_intr(int irq, void *dev_id, struct p + sc->sc_stats.ast_hardware++; + ath_hal_intrset(ah, 0); /* disable intr's until reset */ + ATH_SCHEDULE_TQUEUE(&sc->sc_fataltq, &needmark); +- } else if (status & HAL_INT_RXORN) { +- sc->sc_stats.ast_rxorn++; +- ath_hal_intrset(ah, 0); /* disable intr's until reset */ +- ATH_SCHEDULE_TQUEUE(&sc->sc_rxorntq, &needmark); + } else { + if (status & HAL_INT_SWBA) { + struct ieee80211vap * vap; |