From b8dc1a35c88dddcf62ce7bc59a7ed4c38c2f7597 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Fri, 14 Dec 2012 14:22:10 +0100 Subject: mac80211: further simplify ieee80211_bss_info_change_notify The special case in the function isn't really needed, instead make the suspend code a bit better and also easier to understand and move the warning into the driver op wrapper inline. Signed-off-by: Johannes Berg --- net/mac80211/driver-ops.h | 6 ++++++ net/mac80211/main.c | 14 -------------- net/mac80211/pm.c | 15 ++++++++++----- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index 608ced41548..cccc486ae3d 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -207,6 +207,12 @@ static inline void drv_bss_info_changed(struct ieee80211_local *local, { might_sleep(); + WARN_ON_ONCE(changed & (BSS_CHANGED_BEACON | + BSS_CHANGED_BEACON_ENABLED) && + sdata->vif.type != NL80211_IFTYPE_AP && + sdata->vif.type != NL80211_IFTYPE_ADHOC && + sdata->vif.type != NL80211_IFTYPE_MESH_POINT); + check_sdata_in_driver(sdata); trace_drv_bss_info_changed(local, sdata, info, changed); diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 71a64f49fe6..b719a16eabd 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -231,20 +231,6 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, return; } - switch (sdata->vif.type) { - case NL80211_IFTYPE_AP: - case NL80211_IFTYPE_ADHOC: - case NL80211_IFTYPE_WDS: - case NL80211_IFTYPE_MESH_POINT: - break; - default: - /* do not warn to simplify caller in scan.c */ - changed &= ~BSS_CHANGED_BEACON_ENABLED; - if (WARN_ON(changed & BSS_CHANGED_BEACON)) - return; - break; - } - drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed); } diff --git a/net/mac80211/pm.c b/net/mac80211/pm.c index 712c17ff6e2..8a67d7e982f 100644 --- a/net/mac80211/pm.c +++ b/net/mac80211/pm.c @@ -121,7 +121,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) /* remove all interfaces */ list_for_each_entry(sdata, &local->interfaces, list) { - u32 changed = BSS_CHANGED_BEACON_ENABLED; + u32 changed = 0; if (!ieee80211_sdata_running(sdata)) continue; @@ -136,14 +136,19 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) changed = BSS_CHANGED_ASSOC | BSS_CHANGED_BSSID | BSS_CHANGED_IDLE; - else - changed = 0; - /* fall through */ + break; + case NL80211_IFTYPE_AP: + case NL80211_IFTYPE_ADHOC: + case NL80211_IFTYPE_MESH_POINT: + if (sdata->vif.bss_conf.enable_beacon) + changed = BSS_CHANGED_BEACON_ENABLED; + break; default: - ieee80211_quiesce(sdata); break; } + ieee80211_quiesce(sdata); + sdata->suspend_bss_conf = sdata->vif.bss_conf; memset(&sdata->vif.bss_conf, 0, sizeof(sdata->vif.bss_conf)); sdata->vif.bss_conf.idle = true; -- cgit v1.2.3