diff options
author | Luciano Coelho <luciano.coelho@intel.com> | 2015-01-24 10:30:02 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2015-01-27 09:58:46 +0100 |
commit | 9120d94e8f9abd3eb9f00a5aaa6eca85cdf4f439 (patch) | |
tree | b141172aa32ce2fa5f9a531efae302f5c04ac112 /net/mac80211/ieee80211_i.h | |
parent | 225b818982403120ce1f5e7d4b3e5245e0399775 (diff) | |
download | op-kernel-dev-9120d94e8f9abd3eb9f00a5aaa6eca85cdf4f439.zip op-kernel-dev-9120d94e8f9abd3eb9f00a5aaa6eca85cdf4f439.tar.gz |
mac80211: handle potential race between suspend and scan completion
If suspend starts while ieee80211_scan_completed() is running, between
the point where SCAN_COMPLETED is set and the work is queued,
ieee80211_scan_cancel() will not catch the work and we may finish
suspending before the work is actually executed, leaving the scan
running while suspended.
To fix this race, queue the scan work during resume if the
SCAN_COMPLETED flag is set and flush it immediately.
Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index bdb3e3b..3afe368 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -1752,7 +1752,8 @@ static inline int __ieee80211_resume(struct ieee80211_hw *hw) { struct ieee80211_local *local = hw_to_local(hw); - WARN(test_bit(SCAN_HW_SCANNING, &local->scanning), + WARN(test_bit(SCAN_HW_SCANNING, &local->scanning) && + !test_bit(SCAN_COMPLETED, &local->scanning), "%s: resume with hardware scan still in progress\n", wiphy_name(hw->wiphy)); |