diff options
author | adrian <adrian@FreeBSD.org> | 2011-11-19 21:05:31 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2011-11-19 21:05:31 +0000 |
commit | 3a882beede34079da891acd627c3a5b1374e9c33 (patch) | |
tree | 21d87fae8150b0dd7246fa8adb75d3705d4cbbb5 /lib/libc/stdlib/getenv.c | |
parent | cb931ce6939d6d325cdae98a5edf0c0784771bfd (diff) | |
download | FreeBSD-src-3a882beede34079da891acd627c3a5b1374e9c33.zip FreeBSD-src-3a882beede34079da891acd627c3a5b1374e9c33.tar.gz |
Begin breaking apart the receive setup/stop path in preparation for more
"correct" handling of frames in the RX pending queue during interface
transitions.
* ath_stoprecv() doesn't blank out the descriptor list - that's what
ath_startrecv() does. So, change a comment to reflect that.
* ath_stoprecv() does include a large (3ms) delay to let pending DMA
complete. However, I'm under the impression that the stopdma hal
method does check for a bit in the PCU to indicate DMA has stopped.
So, to help with fast abort and restart, modify ath_stoprecv() to take
a flag which indicates whether this is needed.
* Modify the uses of ath_stoprecv() to pass in a flag to support the
existing behaviour (ie, do the delay.)
* Remove some duplicate PCU teardown code (which wasn't shutting down DMA,
so it wasn't entirely correct..) and replace it with a call to
ath_stoprecv(sc, 0) - which disables the DELAY call.
The upshoot of this is now channel change doesn't simply drop completed
frames on the floor, but instead it cleanly handles those frames.
It still discards pending TX frames in the software and hardware queues
as there's no (current) logic which forcibly recalculates the rate control
information (or whether they're appropriate to be on the TX queue after
a channel change), that'll come later.
This still doesn't stop all the sources of queue stalls but it does
tidy up some of the code duplication.
To be complete, queue stalls now occur during normal behaviour -
they only occur after some kind of broken behaviour causes an interface
or node flush, upsetting the TX/RX BAW. Subsequent commits will
incrementally fix these and other related issues.
Sponsored by: Hobnob, Inc.
Diffstat (limited to 'lib/libc/stdlib/getenv.c')
0 files changed, 0 insertions, 0 deletions