Here's the patch:

* break out the per-packet send code into ieee80211_start_pkt()
* introduce a per-vap TX lock
* wrap the normal TX path ieee80211_encap(), parent->if_transmit and
ic->ic_raw_xmit with the TX lock


* the rest of the encap calls need to be wrapped in the TX lock - wds,
superg, mesh.
* the TX lock is not re-entrant but the TX path itself is (eg start ->
start aggregation -> addba send -> mgmt_send -> (re) grab lock) so a
bunch of this stuff needs to be rethought to be "clean" locking wise.
I bet wds, superg and mesh is being called from the normal TX path and
thus could be called with the TX lock already held. I should
investigate this!
* the TX aggregation state code should be protected by a lock - do that later?
* add some lock / unlock assertion checks (eg assert the TX lock is
held in ieee80211_encap()) and debug what code paths are / aren't
being engaged.

I'm still testing this. I've only tested it in STA mode thus far (iwn and ath.)



freebsd-wireless@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"

Reply via email to