diff options
author | Felix Fietkau <nbd@openwrt.org> | 2008-10-03 15:17:34 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2008-10-03 15:17:34 +0000 |
commit | 5d4bb942b49b62919e14a58907d3c123651485c8 (patch) | |
tree | 5c83bbe7abb93d418c557d2a250d08a4346992d9 /package/madwifi/patches/379-invalid_rate_fix.patch | |
parent | 5a73a9f898f489cea3e2e28231b261ae097051bd (diff) | |
download | upstream-5d4bb942b49b62919e14a58907d3c123651485c8.tar.gz upstream-5d4bb942b49b62919e14a58907d3c123651485c8.tar.bz2 upstream-5d4bb942b49b62919e14a58907d3c123651485c8.zip |
madwifi patch cleanup and stability fixes
- fix a semi-random heisenbug by replacing the previous noderef fix with a simple hack that is not 100% correct, but safe.
- add ad-hoc atim fixes by bruno
- add napi polling fixes by sven-ola
- fix compile breakage with debug enabled
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@12838 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/madwifi/patches/379-invalid_rate_fix.patch')
-rw-r--r-- | package/madwifi/patches/379-invalid_rate_fix.patch | 209 |
1 files changed, 207 insertions, 2 deletions
diff --git a/package/madwifi/patches/379-invalid_rate_fix.patch b/package/madwifi/patches/379-invalid_rate_fix.patch index 0128ca2691..305d26d600 100644 --- a/package/madwifi/patches/379-invalid_rate_fix.patch +++ b/package/madwifi/patches/379-invalid_rate_fix.patch @@ -29,7 +29,75 @@ #define ONE_SECOND (1000 * 1000) /* 1 second, or 1000 milliseconds; eternity, in other words */ #include "release.h" -@@ -689,17 +675,17 @@ +@@ -471,11 +457,11 @@ + final_rate = sc->sc_hwmap[ts->ts_rate & ~HAL_TXSTAT_ALTRATE].ieeerate; + final_ndx = rate_to_ndx(sn, final_rate); + if (final_ndx >= sn->num_rates) { +- DPRINTF(sc, "%s: final ndx too high\n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: final ndx too high\n", __func__); + final_ndx = 0; + } + if (final_ndx < 0) { +- DPRINTF(sc, "%s: final ndx too low\n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: final ndx too low\n", __func__); + final_ndx = 0; + } + +@@ -485,7 +471,7 @@ + tries = ts->ts_longretry + 1; + + if (sn->num_rates <= 0) { +- DPRINTF(sc, "%s: " MAC_FMT " %s no rates yet\n", dev_info, ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " %s no rates yet\n", dev_info, + MAC_ADDR(an->an_node.ni_macaddr), __func__); + return; + } +@@ -551,7 +537,7 @@ + static void + ath_rate_newassoc(struct ath_softc *sc, struct ath_node *an, int isnew) + { +- DPRINTF(sc, "%s: " MAC_FMT " %s\n", dev_info, ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " %s\n", dev_info, + MAC_ADDR(an->an_node.ni_macaddr), __func__); + if (isnew) + ath_rate_ctl_reset(sc, &an->an_node); +@@ -601,7 +587,7 @@ + p = rates + sprintf(rates, "rates :: %d ", column_index); + for (i = 0; i < num_sample_rates; i++) + p += sprintf(p, "%2u ", sn->rs_sampleTable[i][column_index]); +- DPRINTF(sc, "%s\n", rates); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s\n", rates); + }; + #endif + } +@@ -628,7 +614,7 @@ + sn->is_sampling = 0; + + if (rt == NULL) { +- DPRINTF(sc, "no rates yet! mode %u\n", sc->sc_curmode); ++ DPRINTF(sc, ATH_DEBUG_RATE, "no rates yet! mode %u\n", sc->sc_curmode); + return; + } + sn->static_rate_ndx = -1; +@@ -658,7 +644,7 @@ + sn->rates[x].rix = sc->sc_rixmap[sn->rates[x].rate]; + } + if (sn->rates[x].rix == 0xff) { +- DPRINTF(sc, "%s: %s ignore bogus rix at %d\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: %s ignore bogus rix at %d\n", + dev_info, __func__, x); + continue; + } +@@ -673,7 +659,7 @@ + ni->ni_txrate = 0; + + if (sn->num_rates <= 0) { +- DPRINTF(sc, "%s: %s " MAC_FMT " no rates (fixed %d) \n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: %s " MAC_FMT " no rates (fixed %d) \n", + dev_info, __func__, MAC_ADDR(ni->ni_macaddr), + vap->iv_fixed_rate); + /* There are no rates yet; we're done */ +@@ -689,23 +675,23 @@ * the node. We know the rate is there because the * rate set is checked when the station associates. */ /* NB: the rate set is assumed sorted */ @@ -48,13 +116,72 @@ + if ((ni->ni_rates.rs_rates[srate] & IEEE80211_RATE_VAL) != vap->iv_fixed_rate) + EPRINTF(sc, "Invalid static rate, falling back to basic rate\n"); + else -+ DPRINTF(sc, "%s: %s " MAC_FMT " fixed rate %d%sMbps\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: %s " MAC_FMT " fixed rate %d%sMbps\n", + dev_info, __func__, MAC_ADDR(ni->ni_macaddr), + sn->rates[srate].rate / 2, + (sn->rates[srate].rate % 2) ? ".5 " : " "); return; } + for (x = 0; x < ni->ni_rates.rs_nrates; x++) { + if (sn->rates[x].rix == 0xff) { +- DPRINTF(sc, "%s: %s ignore bogus rix at %d\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: %s ignore bogus rix at %d\n", + dev_info, __func__, x); + continue; + } +@@ -735,9 +721,9 @@ + } + + #if 0 +- DPRINTF(sc, "%s: Retry table for this node\n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: Retry table for this node\n", __func__); + for (x = 0; x < ni->ni_rates.rs_nrates; x++) +- DPRINTF(sc, "%2d %2d %6d \n", x, sn->retry_count[x], sn->perfect_tx_time[x]); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%2d %2d %6d \n", x, sn->retry_count[x], sn->perfect_tx_time[x]); + #endif + + /* Set the initial rate */ +@@ -781,10 +767,10 @@ + unsigned int interval = ath_timer_interval; + + if (dev == NULL) +- DPRINTF(sc, "%s: 'dev' is null in this timer \n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: 'dev' is null in this timer \n", __func__); + + if (sc == NULL) +- DPRINTF(sc, "%s: 'sc' is null in this timer\n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: 'sc' is null in this timer\n", __func__); + + ic = &sc->sc_ic; + +@@ -808,7 +794,7 @@ + + timer = &(ssc->timer); + if (timer == NULL) +- DPRINTF(sc, "%s: timer is null - leave it\n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: timer is null - leave it\n", __func__); + + timer->expires = jiffies + ((HZ * interval) / 1000); + add_timer(timer); +@@ -904,7 +890,7 @@ + ath_rate_attach(struct ath_softc *sc) + { + struct minstrel_softc *osc; +- DPRINTF(sc, "%s: %s\n", dev_info, __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: %s\n", dev_info, __func__); + + _MOD_INC_USE(THIS_MODULE, return NULL); + osc = kmalloc(sizeof(struct minstrel_softc), GFP_ATOMIC); +@@ -963,7 +949,7 @@ + p += sprintf(p, "out of room for node " MAC_FMT "\n\n", MAC_ADDR(ni->ni_macaddr)); + break; + } +- DPRINTF(sc, "%s: out of memeory to write tall of the nodes\n", __func__); ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: out of memeory to write tall of the nodes\n", __func__); + break; + } + an = ATH_NODE(ni); --- a/ath_rate/amrr/amrr.c +++ b/ath_rate/amrr/amrr.c @@ -64,24 +64,13 @@ @@ -83,6 +210,15 @@ static int ath_rateinterval = 1000; /* rate ctl interval (ms) */ static int ath_rate_max_success_threshold = 10; static int ath_rate_min_success_threshold = 1; +@@ -197,7 +186,7 @@ + + KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); + +- DPRINTF(sc, "%s: set xmit rate for " MAC_FMT " to %dM\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: set xmit rate for " MAC_FMT " to %dM\n", + __func__, MAC_ADDR(ni->ni_macaddr), + ni->ni_rates.rs_nrates > 0 ? + (ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL) / 2 : 0); @@ -297,9 +286,9 @@ * rate set is checked when the station associates. */ @@ -96,6 +232,39 @@ } ath_rate_update(sc, ni, srate); #undef RATE +@@ -377,7 +366,7 @@ + + old_rate = ni->ni_txrate; + +- DPRINTF (sc, "cnt0: %d cnt1: %d cnt2: %d cnt3: %d -- threshold: %d\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "cnt0: %d cnt1: %d cnt2: %d cnt3: %d -- threshold: %d\n", + amn->amn_tx_try0_cnt, + amn->amn_tx_try1_cnt, + amn->amn_tx_try2_cnt, +@@ -390,7 +379,7 @@ + amn->amn_recovery = 1; + amn->amn_success = 0; + ni->ni_txrate++; +- DPRINTF(sc, "increase rate to %d\n", ni->ni_txrate); ++ DPRINTF(sc, ATH_DEBUG_RATE, "increase rate to %d\n", ni->ni_txrate); + } else + amn->amn_recovery = 0; + } else if (is_failure(amn)) { +@@ -401,12 +390,12 @@ + amn->amn_success_threshold *= 2; + amn->amn_success_threshold = min(amn->amn_success_threshold, + (u_int)ath_rate_max_success_threshold); +- DPRINTF(sc, "decrease rate recovery thr: %d\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "decrease rate recovery thr: %d\n", + amn->amn_success_threshold); + } else { + /* simple failure. */ + amn->amn_success_threshold = ath_rate_min_success_threshold; +- DPRINTF(sc, "decrease rate normal thr: %d\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "decrease rate normal thr: %d\n", + amn->amn_success_threshold); + } + amn->amn_recovery = 0; --- a/ath_rate/onoe/onoe.c +++ b/ath_rate/onoe/onoe.c @@ -60,27 +60,13 @@ @@ -127,6 +296,15 @@ /* * Default parameters for the rate control algorithm. These are * all tunable with sysctls. The rate controller runs periodically +@@ -186,7 +172,7 @@ + + KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); + +- DPRINTF(sc, "%s: set xmit rate for " MAC_FMT " to %dM\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: set xmit rate for " MAC_FMT " to %dM\n", + __func__, MAC_ADDR(ni->ni_macaddr), + ni->ni_rates.rs_nrates > 0 ? + (ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL) / 2 : 0); @@ -283,9 +269,9 @@ */ /* NB: the rate set is assumed sorted */ @@ -140,6 +318,24 @@ } ath_rate_update(sc, ni, srate); #undef RATE +@@ -364,7 +350,7 @@ + on->on_tx_retr < (on->on_tx_ok * ath_rate_raise) / 100) + dir = 1; + +- DPRINTF(sc, MAC_FMT ": ok %d err %d retr %d upper %d dir %d\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, MAC_FMT ": ok %d err %d retr %d upper %d dir %d\n", + MAC_ADDR(ni->ni_macaddr), + on->on_tx_ok, on->on_tx_err, on->on_tx_retr, + on->on_tx_upper, dir); +@@ -395,7 +381,7 @@ + } + + if (nrate != ni->ni_txrate) { +- DPRINTF(sc, "%s: %dM -> %dM (%d ok, %d err, %d retr)\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: %dM -> %dM (%d ok, %d err, %d retr)\n", + __func__, + (rs->rs_rates[ni->ni_txrate] & IEEE80211_RATE_VAL) / 2, + (rs->rs_rates[nrate] & IEEE80211_RATE_VAL) / 2, --- a/ath_rate/sample/sample.c +++ b/ath_rate/sample/sample.c @@ -62,30 +62,13 @@ @@ -174,6 +370,15 @@ /* * This file is an implementation of the SampleRate algorithm * in "Bit-rate Selection in Wireless Networks" +@@ -740,7 +723,7 @@ + ndx[3] = rate_to_ndx(sn, rate[3]); + + #if 0 +- DPRINTF(sc, "%s: " MAC_FMT " size %u finaltsidx %u tries %u status %u rate/try %u/%u %u/%u %u/%u %u/%u\n", ++ DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " size %u finaltsidx %u tries %u status %u rate/try %u/%u %u/%u %u/%u %u/%u\n", + dev_info, MAC_ADDR(an->an_node.ni_macaddr), + bin_to_size(size_to_bin(frame_size)), + finalTSIdx, @@ -886,15 +869,16 @@ if ((ni->ni_rates.rs_rates[x] & IEEE80211_RATE_VAL) == vap->iv_fixed_rate) srate = x; |