mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
mac80211: fix a few work bugs
Kalle and Lennert reported problems with the new work code, and at least Kalle's problem I was able to trace to a missing jiffies initialisation. I also ran into a problem where occasionally I couldn't connect, which seems fixed with kicking the work items after scanning. Finally, also add some sanity checking code to verify that we're not adding work items while an interface is down -- that case could lead to something similar to what Lennert was seeing. There still seems to be a race condition that we're trying to figure out separately. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Tested-by: Lennert Buytenhek <buytenh@marvell.com> Tested-by: Kalle Valo <kalle.valo@iki.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
34a6eddbab
commit
81ac3462d3
@ -284,6 +284,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
|
||||
ieee80211_mlme_notify_scan_completed(local);
|
||||
ieee80211_ibss_notify_scan_completed(local);
|
||||
ieee80211_mesh_notify_scan_completed(local);
|
||||
ieee80211_queue_work(&local->hw, &local->work_work);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_scan_completed);
|
||||
|
||||
|
@ -818,6 +818,7 @@ static void ieee80211_work_work(struct work_struct *work)
|
||||
wk->chan == local->tmp_channel &&
|
||||
wk->chan_type == local->tmp_channel_type) {
|
||||
wk->started = true;
|
||||
wk->timeout = jiffies;
|
||||
}
|
||||
|
||||
if (!wk->started && !local->tmp_channel) {
|
||||
@ -935,6 +936,9 @@ void ieee80211_add_work(struct ieee80211_work *wk)
|
||||
if (WARN_ON(!wk->done))
|
||||
return;
|
||||
|
||||
if (WARN_ON(!ieee80211_sdata_running(wk->sdata)))
|
||||
return;
|
||||
|
||||
wk->started = false;
|
||||
|
||||
local = wk->sdata->local;
|
||||
|
Loading…
Reference in New Issue
Block a user