diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-mac80211.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-mac80211.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-mac80211.c b/drivers/net/wireless/iwlwifi/iwl-mac80211.c index b6805f8e9a01..c24a7134a6f9 100644 --- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c +++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c | |||
| @@ -1244,6 +1244,7 @@ static int iwlagn_mac_add_interface(struct ieee80211_hw *hw, | |||
| 1244 | struct iwl_rxon_context *tmp, *ctx = NULL; | 1244 | struct iwl_rxon_context *tmp, *ctx = NULL; |
| 1245 | int err; | 1245 | int err; |
| 1246 | enum nl80211_iftype viftype = ieee80211_vif_type_p2p(vif); | 1246 | enum nl80211_iftype viftype = ieee80211_vif_type_p2p(vif); |
| 1247 | bool reset = false; | ||
| 1247 | 1248 | ||
| 1248 | IWL_DEBUG_MAC80211(priv, "enter: type %d, addr %pM\n", | 1249 | IWL_DEBUG_MAC80211(priv, "enter: type %d, addr %pM\n", |
| 1249 | viftype, vif->addr); | 1250 | viftype, vif->addr); |
| @@ -1265,6 +1266,13 @@ static int iwlagn_mac_add_interface(struct ieee80211_hw *hw, | |||
| 1265 | tmp->interface_modes | tmp->exclusive_interface_modes; | 1266 | tmp->interface_modes | tmp->exclusive_interface_modes; |
| 1266 | 1267 | ||
| 1267 | if (tmp->vif) { | 1268 | if (tmp->vif) { |
| 1269 | /* On reset we need to add the same interface again */ | ||
| 1270 | if (tmp->vif == vif) { | ||
| 1271 | reset = true; | ||
| 1272 | ctx = tmp; | ||
| 1273 | break; | ||
| 1274 | } | ||
| 1275 | |||
| 1268 | /* check if this busy context is exclusive */ | 1276 | /* check if this busy context is exclusive */ |
| 1269 | if (tmp->exclusive_interface_modes & | 1277 | if (tmp->exclusive_interface_modes & |
| 1270 | BIT(tmp->vif->type)) { | 1278 | BIT(tmp->vif->type)) { |
| @@ -1291,7 +1299,7 @@ static int iwlagn_mac_add_interface(struct ieee80211_hw *hw, | |||
| 1291 | ctx->vif = vif; | 1299 | ctx->vif = vif; |
| 1292 | 1300 | ||
| 1293 | err = iwl_setup_interface(priv, ctx); | 1301 | err = iwl_setup_interface(priv, ctx); |
| 1294 | if (!err) | 1302 | if (!err || reset) |
| 1295 | goto out; | 1303 | goto out; |
| 1296 | 1304 | ||
| 1297 | ctx->vif = NULL; | 1305 | ctx->vif = NULL; |
