aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r--net/wireless/core.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c
index e42a97b5b97..b110a8a242d 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -176,7 +176,7 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
176 if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK)) 176 if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK))
177 return -EOPNOTSUPP; 177 return -EOPNOTSUPP;
178 178
179 list_for_each_entry(wdev, &rdev->netdev_list, list) { 179 list_for_each_entry(wdev, &rdev->wdev_list, list) {
180 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; 180 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
181 err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); 181 err = dev_change_net_namespace(wdev->netdev, net, "wlan%d");
182 if (err) 182 if (err)
@@ -188,7 +188,7 @@ int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
188 /* failed -- clean up to old netns */ 188 /* failed -- clean up to old netns */
189 net = wiphy_net(&rdev->wiphy); 189 net = wiphy_net(&rdev->wiphy);
190 190
191 list_for_each_entry_continue_reverse(wdev, &rdev->netdev_list, 191 list_for_each_entry_continue_reverse(wdev, &rdev->wdev_list,
192 list) { 192 list) {
193 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; 193 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
194 err = dev_change_net_namespace(wdev->netdev, net, 194 err = dev_change_net_namespace(wdev->netdev, net,
@@ -226,7 +226,7 @@ static int cfg80211_rfkill_set_block(void *data, bool blocked)
226 rtnl_lock(); 226 rtnl_lock();
227 mutex_lock(&rdev->devlist_mtx); 227 mutex_lock(&rdev->devlist_mtx);
228 228
229 list_for_each_entry(wdev, &rdev->netdev_list, list) 229 list_for_each_entry(wdev, &rdev->wdev_list, list)
230 dev_close(wdev->netdev); 230 dev_close(wdev->netdev);
231 231
232 mutex_unlock(&rdev->devlist_mtx); 232 mutex_unlock(&rdev->devlist_mtx);
@@ -304,7 +304,7 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
304 mutex_init(&rdev->mtx); 304 mutex_init(&rdev->mtx);
305 mutex_init(&rdev->devlist_mtx); 305 mutex_init(&rdev->devlist_mtx);
306 mutex_init(&rdev->sched_scan_mtx); 306 mutex_init(&rdev->sched_scan_mtx);
307 INIT_LIST_HEAD(&rdev->netdev_list); 307 INIT_LIST_HEAD(&rdev->wdev_list);
308 spin_lock_init(&rdev->bss_lock); 308 spin_lock_init(&rdev->bss_lock);
309 INIT_LIST_HEAD(&rdev->bss_list); 309 INIT_LIST_HEAD(&rdev->bss_list);
310 INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done); 310 INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done);
@@ -622,7 +622,7 @@ void wiphy_unregister(struct wiphy *wiphy)
622 __count == 0; })); 622 __count == 0; }));
623 623
624 mutex_lock(&rdev->devlist_mtx); 624 mutex_lock(&rdev->devlist_mtx);
625 BUG_ON(!list_empty(&rdev->netdev_list)); 625 BUG_ON(!list_empty(&rdev->wdev_list));
626 mutex_unlock(&rdev->devlist_mtx); 626 mutex_unlock(&rdev->devlist_mtx);
627 627
628 /* 628 /*
@@ -821,7 +821,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
821 spin_lock_init(&wdev->mgmt_registrations_lock); 821 spin_lock_init(&wdev->mgmt_registrations_lock);
822 822
823 mutex_lock(&rdev->devlist_mtx); 823 mutex_lock(&rdev->devlist_mtx);
824 list_add_rcu(&wdev->list, &rdev->netdev_list); 824 wdev->identifier = ++rdev->wdev_id;
825 list_add_rcu(&wdev->list, &rdev->wdev_list);
825 rdev->devlist_generation++; 826 rdev->devlist_generation++;
826 /* can only change netns with wiphy */ 827 /* can only change netns with wiphy */
827 dev->features |= NETIF_F_NETNS_LOCAL; 828 dev->features |= NETIF_F_NETNS_LOCAL;