[RFC] net80211 TX, take 4 (final)
Adrian Chadd
adrian at freebsd.org
Sun Mar 3 10:22:55 UTC 2013
Hi,
I have finished this round of work, intended for -HEAD.
Besides the stuff in the ath and iwn driver, here's what I'd like to commit:
http://people.freebsd.org/~adrian/ath/20130303-net80211_tx-1.diff
What it implements:
* the code that transmits a VAP frame is now in ieee80211_start_pkt().
I may rename that to something vap like later
* nothing calls if_transmit() direct - it goes via
ieee80211_parent_transmit() or ieee80211_vap_transmit()
* nothing calls ic_raw_xmit() direct - it calls via ieee80211_raw_output()
* the VAP TX and parent TX path is locked using an ieee80211com TX
lock - until the parent transmit code is serialised (eg via a
taskqueue to do deferred transmit, or a specific ic TX lock) this lock
will be used both to serialise the VAP / STA TX state (ie, sequence
numbers and general VAP TX ordering) and enforcing the same ordering
is occuring during driver handoff
* tidy up the parent/vap TX code in hostap recv_pspoll()
* tidy up the hwmp discover completion code which dispatches frames
from the staging queue - those frames aren't encapsulated, so just
call ieee80211_vap_transmit()
I'd appreciate thorough testing with INVARIANTS and WITNESS enabled
for hostap, sta and mesh modes.
I'll likely commit the non-locking changes soon - ie, the
ieee80211_parent_transmit(), ieee80211_vap_transmit(),
ieee80211_raw_output() changes. Those seem no brainers - the only
later optimisation would be to turn them into inlines in
ieee80211_freebsd.h .
I've verified that this patch applies cleanly to the latest -HEAD.
Thanks!
Adrian
More information about the freebsd-wireless
mailing list