misc/169336: [ath] ANI isn't triggering in a busy/noisy environment
adrian at FreeBSD.org
Sat Jun 23 00:50:08 UTC 2012
>Synopsis: [ath] ANI isn't triggering in a busy/noisy environment
>Arrival-Date: Sat Jun 23 00:50:07 UTC 2012
>Originator: Adrian Chadd
>Release: 9.0-STABLE i386, with -HEAD net80211/ath
I've noticed that ANI isn't triggering when in a noisy environment.
* The ANI poll is called every 1/10th of a second, which updates listenTime;
* However, since we're still doing things via the MIB interrupt (grr), it's triggering frequently upon a hardware counter (in this case, CCK)
* .. so I see upwards of 1600 CCK errors a second;
* .. but ar5416ProcessMibIntr() calculates cckPhyErrCount based on how many just overflowed, so it's seeing the 200 CCK errors that just occured, and that's not greater than cckTrigHigh;
* .. so it's never calling ar5416AniCckTrigger().
* Then, ar5416AniRestart() is called, which sets ofdm/cck error count and listentime to 0.
Now, because of all of this, the ANI code never seems to trigger on _enough_ of any kind of CCK errors.
It's also unclear how the math in ar5416AniPoll() should work. From what I can gather, listenTime is likely supposed to be a value out of 1000. listenTime just never gets that high at the moment, as it keeps being cleared by ar5416AniRestart() whenever the MIB event fires.
More information about the freebsd-bugs