diff options
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 875e172c001c..591b46b72462 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -642,6 +642,17 @@ void ieee80211_iterate_active_interfaces_rtnl( | |||
642 | } | 642 | } |
643 | EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_rtnl); | 643 | EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_rtnl); |
644 | 644 | ||
645 | struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev) | ||
646 | { | ||
647 | struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); | ||
648 | |||
649 | if (!ieee80211_sdata_running(sdata) || | ||
650 | !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) | ||
651 | return NULL; | ||
652 | return &sdata->vif; | ||
653 | } | ||
654 | EXPORT_SYMBOL_GPL(wdev_to_ieee80211_vif); | ||
655 | |||
645 | /* | 656 | /* |
646 | * Nothing should have been stuffed into the workqueue during | 657 | * Nothing should have been stuffed into the workqueue during |
647 | * the suspend->resume cycle. If this WARN is seen then there | 658 | * the suspend->resume cycle. If this WARN is seen then there |
@@ -1451,6 +1462,8 @@ int ieee80211_reconfig(struct ieee80211_local *local) | |||
1451 | struct sta_info *sta; | 1462 | struct sta_info *sta; |
1452 | int res, i; | 1463 | int res, i; |
1453 | bool reconfig_due_to_wowlan = false; | 1464 | bool reconfig_due_to_wowlan = false; |
1465 | struct ieee80211_sub_if_data *sched_scan_sdata; | ||
1466 | bool sched_scan_stopped = false; | ||
1454 | 1467 | ||
1455 | #ifdef CONFIG_PM | 1468 | #ifdef CONFIG_PM |
1456 | if (local->suspended) | 1469 | if (local->suspended) |
@@ -1754,6 +1767,27 @@ int ieee80211_reconfig(struct ieee80211_local *local) | |||
1754 | #else | 1767 | #else |
1755 | WARN_ON(1); | 1768 | WARN_ON(1); |
1756 | #endif | 1769 | #endif |
1770 | |||
1771 | /* | ||
1772 | * Reconfigure sched scan if it was interrupted by FW restart or | ||
1773 | * suspend. | ||
1774 | */ | ||
1775 | mutex_lock(&local->mtx); | ||
1776 | sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata, | ||
1777 | lockdep_is_held(&local->mtx)); | ||
1778 | if (sched_scan_sdata && local->sched_scan_req) | ||
1779 | /* | ||
1780 | * Sched scan stopped, but we don't want to report it. Instead, | ||
1781 | * we're trying to reschedule. | ||
1782 | */ | ||
1783 | if (__ieee80211_request_sched_scan_start(sched_scan_sdata, | ||
1784 | local->sched_scan_req)) | ||
1785 | sched_scan_stopped = true; | ||
1786 | mutex_unlock(&local->mtx); | ||
1787 | |||
1788 | if (sched_scan_stopped) | ||
1789 | cfg80211_sched_scan_stopped(local->hw.wiphy); | ||
1790 | |||
1757 | return 0; | 1791 | return 0; |
1758 | } | 1792 | } |
1759 | 1793 | ||