diff options
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r-- | net/mac80211/iface.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 60f1ce5e5e52..ceef64426a8d 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -474,6 +474,9 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) | |||
474 | master->control_port_protocol; | 474 | master->control_port_protocol; |
475 | sdata->control_port_no_encrypt = | 475 | sdata->control_port_no_encrypt = |
476 | master->control_port_no_encrypt; | 476 | master->control_port_no_encrypt; |
477 | sdata->vif.cab_queue = master->vif.cab_queue; | ||
478 | memcpy(sdata->vif.hw_queue, master->vif.hw_queue, | ||
479 | sizeof(sdata->vif.hw_queue)); | ||
477 | break; | 480 | break; |
478 | } | 481 | } |
479 | case NL80211_IFTYPE_AP: | 482 | case NL80211_IFTYPE_AP: |
@@ -653,7 +656,11 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) | |||
653 | 656 | ||
654 | ieee80211_recalc_ps(local, -1); | 657 | ieee80211_recalc_ps(local, -1); |
655 | 658 | ||
656 | if (dev) { | 659 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR || |
660 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { | ||
661 | /* XXX: for AP_VLAN, actually track AP queues */ | ||
662 | netif_tx_start_all_queues(dev); | ||
663 | } else if (dev) { | ||
657 | unsigned long flags; | 664 | unsigned long flags; |
658 | int n_acs = IEEE80211_NUM_ACS; | 665 | int n_acs = IEEE80211_NUM_ACS; |
659 | int ac; | 666 | int ac; |
@@ -1696,6 +1703,15 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) | |||
1696 | 1703 | ||
1697 | ASSERT_RTNL(); | 1704 | ASSERT_RTNL(); |
1698 | 1705 | ||
1706 | /* | ||
1707 | * Close all AP_VLAN interfaces first, as otherwise they | ||
1708 | * might be closed while the AP interface they belong to | ||
1709 | * is closed, causing unregister_netdevice_many() to crash. | ||
1710 | */ | ||
1711 | list_for_each_entry(sdata, &local->interfaces, list) | ||
1712 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
1713 | dev_close(sdata->dev); | ||
1714 | |||
1699 | mutex_lock(&local->iflist_mtx); | 1715 | mutex_lock(&local->iflist_mtx); |
1700 | list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { | 1716 | list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { |
1701 | list_del(&sdata->list); | 1717 | list_del(&sdata->list); |