Date: Fri, 7 Mar 2008 23:03:22 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 137127 for review Message-ID: <200803072303.m27N3M80005038@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=137127 Change 137127 by sam@sam_ebb on 2008/03/07 23:02:50 o convert debug msgs to use net80211 debug flag o purge callout; track time and update in tx complete routine Affected files ... .. //depot/projects/vap/sys/dev/ath/ath_rate/amrr/amrr.c#8 edit .. //depot/projects/vap/sys/dev/ath/ath_rate/amrr/amrr.h#4 edit .. //depot/projects/vap/sys/modules/ath_rate_amrr/Makefile#5 edit Differences ... ==== //depot/projects/vap/sys/dev/ath/ath_rate/amrr/amrr.c#8 (text+ko) ==== @@ -46,6 +46,7 @@ * Mathieu Lacage, Hossein Manshaei, Thierry Turletti */ #include "opt_inet.h" +#include "opt_wlan.h" #include <sys/param.h> #include <sys/systm.h> @@ -65,7 +66,6 @@ #include <net/if.h> #include <net/if_media.h> #include <net/if_arp.h> -#include <net/ethernet.h> /* XXX for ether_sprintf */ #include <net80211/ieee80211_var.h> @@ -80,21 +80,10 @@ #include <dev/ath/ath_rate/amrr/amrr.h> #include <contrib/dev/ath/ah_desc.h> -#define AMRR_DEBUG -#ifdef AMRR_DEBUG -#define DPRINTF(sc, _fmt, ...) do { \ - if (sc->sc_debug & 0x10) \ - printf(_fmt, __VA_ARGS__); \ -} while (0) -#else -#define DPRINTF(sc, _fmt, ...) -#endif - 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; -static void ath_ratectl(void *); static void ath_rate_update(struct ath_softc *, struct ieee80211_node *, int rate); static void ath_rate_ctl_start(struct ath_softc *, struct ieee80211_node *); @@ -104,7 +93,6 @@ ath_rate_node_init(struct ath_softc *sc, struct ath_node *an) { /* NB: assumed to be zero'd by caller */ - ath_rate_update(sc, &an->an_node, 0); } void @@ -166,6 +154,11 @@ amn->amn_tx_try3_cnt++; amn->amn_tx_failure_cnt++; } + if (amn->amn_interval != 0 && + ticks - amn->amn_ticks > amn->amn_interval) { + ath_rate_ctl(sc, &an->an_node); + amn->amn_ticks = ticks; + } } void @@ -176,7 +169,7 @@ } static void -node_reset (struct amrr_node *amn) +node_reset(struct amrr_node *amn) { amn->amn_tx_try0_cnt = 0; amn->amn_tx_try1_cnt = 0; @@ -200,13 +193,14 @@ { struct ath_node *an = ATH_NODE(ni); struct amrr_node *amn = ATH_NODE_AMRR(an); + struct ieee80211vap *vap = ni->ni_vap; const HAL_RATE_TABLE *rt = sc->sc_currates; u_int8_t rix; KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode)); - DPRINTF(sc, "%s: set xmit rate for %s to %dM\n", - __func__, ether_sprintf(ni->ni_macaddr), + IEEE80211_NOTE(vap, IEEE80211_MSG_RATECTL, ni, + "%s: set xmit rate to %dM", __func__, ni->ni_rates.rs_nrates > 0 ? (ni->ni_rates.rs_rates[rate] & IEEE80211_RATE_VAL) / 2 : 0); @@ -268,7 +262,12 @@ amn->amn_tx_rate3 = amn->amn_tx_rate3sp = 0; } } - node_reset (amn); + node_reset(amn); + + amn->amn_interval = ath_rateinterval; + if (vap->iv_opmode == IEEE80211_M_STA) + amn->amn_interval /= 2; + amn->amn_interval = (amn->amn_interval * hz) / 1000; } /* @@ -338,14 +337,10 @@ { struct ieee80211com *ic = vap->iv_ic; struct ath_softc *sc = ic->ic_ifp->if_softc; - struct amrr_softc *asc = (struct amrr_softc *) sc->sc_rc; - const struct ieee80211_txparam *tp; struct ieee80211_node *ni; - if (state == IEEE80211_S_INIT) { - callout_stop(&asc->timer); + if (state == IEEE80211_S_INIT) return; - } if (vap->iv_opmode == IEEE80211_M_STA) { /* * Reset local xmit state; this is really only @@ -367,20 +362,6 @@ ieee80211_iterate_nodes(&ic->ic_sta, ath_rate_cb, sc); ath_rate_update(sc, vap->iv_bss, 0); } - tp = ATH_NODE(vap->iv_bss)->an_tp; - if (tp->ucastrate == IEEE80211_FIXED_RATE_NONE && - state == IEEE80211_S_RUN) { - int interval; - /* - * Start the background rate control thread if we - * are not configured to use a fixed xmit rate. - */ - interval = ath_rateinterval; - if (vap->iv_opmode == IEEE80211_M_STA) - interval /= 2; - callout_reset(&asc->timer, (interval * hz) / 1000, - ath_ratectl, vap); - } } /* @@ -402,12 +383,10 @@ rix = amn->amn_rix; - DPRINTF (sc, "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, - amn->amn_tx_try3_cnt, - amn->amn_success_threshold); + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "cnt0: %d cnt1: %d cnt2: %d cnt3: %d -- threshold: %d", + amn->amn_tx_try0_cnt, amn->amn_tx_try1_cnt, amn->amn_tx_try2_cnt, + amn->amn_tx_try3_cnt, amn->amn_success_threshold); if (is_success (amn) && is_enough (amn)) { amn->amn_success++; if (amn->amn_success == amn->amn_success_threshold && @@ -415,7 +394,8 @@ amn->amn_recovery = 1; amn->amn_success = 0; rix++; - DPRINTF (sc, "increase rate to %d\n", rix); + IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, + "increase rate to %d", rix); } else { amn->amn_recovery = 0; } @@ -427,11 +407,17 @@ 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", amn->amn_success_threshold); + IEEE80211_NOTE(ni->ni_vap, + IEEE80211_MSG_RATECTL, ni, + "decrease rate recovery thr: %d", + amn->amn_success_threshold); } else { /* simple failure. */ amn->amn_success_threshold = ath_rate_min_success_threshold; - DPRINTF (sc, "decrease rate normal thr: %d\n", amn->amn_success_threshold); + IEEE80211_NOTE(ni->ni_vap, + IEEE80211_MSG_RATECTL, ni, + "decrease rate normal thr: %d", + amn->amn_success_threshold); } amn->amn_recovery = 0; rix--; @@ -454,30 +440,6 @@ } static void -ath_ratectl(void *arg) -{ - struct ieee80211vap *vap = arg; - struct ieee80211com *ic = vap->iv_ic; - struct ifnet *ifp = ic->ic_ifp; - struct ath_softc *sc = ifp->if_softc; - struct amrr_softc *asc = (struct amrr_softc *) sc->sc_rc; - int interval; - - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - sc->sc_stats.ast_rate_calls++; - - if (vap->iv_opmode == IEEE80211_M_STA) - ath_rate_ctl(sc, vap->iv_bss); /* NB: no reference */ - else - ieee80211_iterate_nodes(&ic->ic_sta, ath_rate_ctl, sc); - } - interval = ath_rateinterval; - if (vap->iv_opmode == IEEE80211_M_STA) - interval /= 2; - callout_reset(&asc->timer, (interval * hz) / 1000, ath_ratectl, arg); -} - -static void ath_rate_sysctlattach(struct ath_softc *sc) { struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev); @@ -504,7 +466,6 @@ if (asc == NULL) return NULL; asc->arc.arc_space = sizeof(struct amrr_node); - callout_init(&asc->timer, CALLOUT_MPSAFE); ath_rate_sysctlattach(sc); return &asc->arc; @@ -515,7 +476,6 @@ { struct amrr_softc *asc = (struct amrr_softc *) arc; - callout_drain(&asc->timer); free(asc, M_DEVBUF); } ==== //depot/projects/vap/sys/dev/ath/ath_rate/amrr/amrr.h#4 (text+ko) ==== @@ -43,12 +43,13 @@ /* per-device state */ struct amrr_softc { struct ath_ratectrl arc; /* base state */ - struct callout timer; /* periodic timer */ }; /* per-node state */ struct amrr_node { int amn_rix; /* current rate index */ + int amn_ticks; /* time of last update */ + int amn_interval; /* update interval (ticks) */ /* AMRR statistics for this node */ u_int amn_tx_try0_cnt; u_int amn_tx_try1_cnt; ==== //depot/projects/vap/sys/modules/ath_rate_amrr/Makefile#5 (text+ko) ==== @@ -40,7 +40,7 @@ KMOD= ath_rate SRCS= amrr.c -SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ah.h +SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ah.h opt_wlan.h HAL= ${.CURDIR}/../../contrib/dev/ath CFLAGS+= -I. -I${.CURDIR}/../../dev/ath -I${HAL} @@ -56,7 +56,13 @@ ATH_MODULE_ARCH=${MACHINE_ARCH} .endif +.if !defined(KERNBUILDDIR) opt_ah.h: ${HAL}/public/${ATH_MODULE_ARCH}-elf.opt_ah.h cp ${HAL}/public/${ATH_MODULE_ARCH}-elf.opt_ah.h ${.TARGET} +opt_wlan.h: +# echo "#define IEEE80211_DEBUG 1" > opt_wlan.h + echo > opt_wlan.h +.endif + .include <bsd.kmod.mk>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803072303.m27N3M80005038>