Commit a6add8be authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: move filter reconfig to wiphy work

This again is intended for future cleanups that are
possible when mac80211 and drivers can assume the
wiphy is locked.
Reviewed-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent aca40a5f
...@@ -1368,7 +1368,7 @@ struct ieee80211_local { ...@@ -1368,7 +1368,7 @@ struct ieee80211_local {
spinlock_t filter_lock; spinlock_t filter_lock;
/* used for uploading changed mc list */ /* used for uploading changed mc list */
struct work_struct reconfig_filter; struct wiphy_work reconfig_filter;
/* aggregated multicast list */ /* aggregated multicast list */
struct netdev_hw_addr_list mc_list; struct netdev_hw_addr_list mc_list;
......
...@@ -778,7 +778,7 @@ static void ieee80211_set_multicast_list(struct net_device *dev) ...@@ -778,7 +778,7 @@ static void ieee80211_set_multicast_list(struct net_device *dev)
spin_lock_bh(&local->filter_lock); spin_lock_bh(&local->filter_lock);
__hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
spin_unlock_bh(&local->filter_lock); spin_unlock_bh(&local->filter_lock);
ieee80211_queue_work(&local->hw, &local->reconfig_filter); wiphy_work_queue(local->hw.wiphy, &local->reconfig_filter);
} }
/* /*
......
...@@ -84,7 +84,8 @@ void ieee80211_configure_filter(struct ieee80211_local *local) ...@@ -84,7 +84,8 @@ void ieee80211_configure_filter(struct ieee80211_local *local)
local->filter_flags = new_flags & ~(1<<31); local->filter_flags = new_flags & ~(1<<31);
} }
static void ieee80211_reconfig_filter(struct work_struct *work) static void ieee80211_reconfig_filter(struct wiphy *wiphy,
struct wiphy_work *work)
{ {
struct ieee80211_local *local = struct ieee80211_local *local =
container_of(work, struct ieee80211_local, reconfig_filter); container_of(work, struct ieee80211_local, reconfig_filter);
...@@ -835,7 +836,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len, ...@@ -835,7 +836,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
wiphy_work_init(&local->radar_detected_work, wiphy_work_init(&local->radar_detected_work,
ieee80211_dfs_radar_detected_work); ieee80211_dfs_radar_detected_work);
INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter); wiphy_work_init(&local->reconfig_filter, ieee80211_reconfig_filter);
local->smps_mode = IEEE80211_SMPS_OFF; local->smps_mode = IEEE80211_SMPS_OFF;
wiphy_work_init(&local->dynamic_ps_enable_work, wiphy_work_init(&local->dynamic_ps_enable_work,
...@@ -1503,13 +1504,13 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw) ...@@ -1503,13 +1504,13 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw)
wiphy_lock(local->hw.wiphy); wiphy_lock(local->hw.wiphy);
wiphy_delayed_work_cancel(local->hw.wiphy, &local->roc_work); wiphy_delayed_work_cancel(local->hw.wiphy, &local->roc_work);
wiphy_work_cancel(local->hw.wiphy, &local->reconfig_filter);
wiphy_work_cancel(local->hw.wiphy, &local->sched_scan_stopped_work); wiphy_work_cancel(local->hw.wiphy, &local->sched_scan_stopped_work);
wiphy_work_cancel(local->hw.wiphy, &local->radar_detected_work); wiphy_work_cancel(local->hw.wiphy, &local->radar_detected_work);
wiphy_unlock(local->hw.wiphy); wiphy_unlock(local->hw.wiphy);
rtnl_unlock(); rtnl_unlock();
cancel_work_sync(&local->restart_work); cancel_work_sync(&local->restart_work);
cancel_work_sync(&local->reconfig_filter);
ieee80211_clear_tx_pending(local); ieee80211_clear_tx_pending(local);
rate_control_deinitialize(local); rate_control_deinitialize(local);
......
...@@ -2316,7 +2316,7 @@ void ieee80211_stop_device(struct ieee80211_local *local) ...@@ -2316,7 +2316,7 @@ void ieee80211_stop_device(struct ieee80211_local *local)
ieee80211_led_radio(local, false); ieee80211_led_radio(local, false);
ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO); ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO);
cancel_work_sync(&local->reconfig_filter); wiphy_work_cancel(local->hw.wiphy, &local->reconfig_filter);
flush_workqueue(local->workqueue); flush_workqueue(local->workqueue);
wiphy_work_flush(local->hw.wiphy, NULL); wiphy_work_flush(local->hw.wiphy, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment