diff options
Diffstat (limited to 'net/mac80211/iface.c')
| -rw-r--r-- | net/mac80211/iface.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index d4c19a7773db..8664111d0566 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
| @@ -637,6 +637,18 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, | |||
| 637 | ieee80211_configure_filter(local); | 637 | ieee80211_configure_filter(local); |
| 638 | break; | 638 | break; |
| 639 | default: | 639 | default: |
| 640 | mutex_lock(&local->mtx); | ||
| 641 | if (local->hw_roc_dev == sdata->dev && | ||
| 642 | local->hw_roc_channel) { | ||
| 643 | /* ignore return value since this is racy */ | ||
| 644 | drv_cancel_remain_on_channel(local); | ||
| 645 | ieee80211_queue_work(&local->hw, &local->hw_roc_done); | ||
| 646 | } | ||
| 647 | mutex_unlock(&local->mtx); | ||
| 648 | |||
| 649 | flush_work(&local->hw_roc_start); | ||
| 650 | flush_work(&local->hw_roc_done); | ||
| 651 | |||
| 640 | flush_work(&sdata->work); | 652 | flush_work(&sdata->work); |
| 641 | /* | 653 | /* |
| 642 | * When we get here, the interface is marked down. | 654 | * When we get here, the interface is marked down. |
