diff options
author | Bob Copeland <me@bobcopeland.com> | 2010-07-13 11:32:40 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-07-14 13:52:46 -0400 |
commit | 5faaff747710dfb79d5aa72b9faface94ad4b3f3 (patch) | |
tree | faddf5250f62abfe8d9b9f96a53712ca3db3e737 /drivers/net/wireless/ath/ath5k/debug.c | |
parent | da5747eb89eb1511dcfc1d8b32c70370616eac92 (diff) | |
download | lwn-5faaff747710dfb79d5aa72b9faface94ad4b3f3.tar.gz lwn-5faaff747710dfb79d5aa72b9faface94ad4b3f3.zip |
ath5k: move reset to mac80211 workqueue
We currently trigger a reset via a tasklet when certain error
conditions are detected so that the card will (eventually)
restart. Unfortunately this makes locking complicated since
reset can also be called in process context (e.g. for channel
change). Currently nothing protects against concurrent resets,
which can be the source of corruption bugs.
Reset takes too long to spinlock the whole thing, so this
patch moves deferred resets into the mac80211 workqueue to
enable use of sc->lock mutex.
Signed-off-by: Bob Copeland <me@bobcopeland.com>
Acked-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath5k/debug.c')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/debug.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c index 8c638865c712..ebb9c237a0d5 100644 --- a/drivers/net/wireless/ath/ath5k/debug.c +++ b/drivers/net/wireless/ath/ath5k/debug.c @@ -279,7 +279,7 @@ static ssize_t write_file_reset(struct file *file, { struct ath5k_softc *sc = file->private_data; ATH5K_DBG(sc, ATH5K_DEBUG_RESET, "debug file triggered reset\n"); - tasklet_schedule(&sc->restq); + ieee80211_queue_work(sc->hw, &sc->reset_work); return count; } |