ee3219757a
Some users were reporting concurrent resets _were_ occuring - ie, either two ath_reset()s ran at the same time (likely one on each CPU) or ath_reset() versus ath_chan_change(). Instead, this now tries to grab the serialisation semaphore and will pause() for a while if it fails. It will always eventually succeed though and will log an error if it hits the recursion situation. All of this stuff needs to die a horrible death at some point and be replaced with a properly serialising method of programming this stuff (eg using the net80211 taskqueue for all of this stuff.) The trouble is figuring out how to handle the concurrent ioctl() based things without introducing more LORs (which is another reason why I haven't just wrapped all of this stuff in large, long-lived locks, a-la what Linux can get away with.) MFC after: Absolutely, positively never. |
||
---|---|---|
.. | ||
ath_dfs/null | ||
ath_hal | ||
ath_rate | ||
ah_osdep.c | ||
ah_osdep.h | ||
if_ath_ahb.c | ||
if_ath_debug.c | ||
if_ath_debug.h | ||
if_ath_keycache.c | ||
if_ath_keycache.h | ||
if_ath_misc.h | ||
if_ath_pci.c | ||
if_ath_sysctl.c | ||
if_ath_sysctl.h | ||
if_ath_tx_ht.c | ||
if_ath_tx_ht.h | ||
if_ath_tx.c | ||
if_ath_tx.h | ||
if_ath.c | ||
if_athdfs.h | ||
if_athioctl.h | ||
if_athrate.h | ||
if_athvar.h |