diff options
Diffstat (limited to 'drivers/net/wireless/iwlegacy')
-rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-core.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/iwlegacy/iwl3945-base.c | 21 | ||||
-rw-r--r-- | drivers/net/wireless/iwlegacy/iwl4965-base.c | 28 |
3 files changed, 34 insertions, 23 deletions
diff --git a/drivers/net/wireless/iwlegacy/iwl-core.c b/drivers/net/wireless/iwlegacy/iwl-core.c index 553c91b3a25..0073f923919 100644 --- a/drivers/net/wireless/iwlegacy/iwl-core.c +++ b/drivers/net/wireless/iwlegacy/iwl-core.c | |||
@@ -2429,11 +2429,13 @@ void iwl_legacy_mac_bss_info_changed(struct ieee80211_hw *hw, | |||
2429 | 2429 | ||
2430 | IWL_DEBUG_MAC80211(priv, "changes = 0x%X\n", changes); | 2430 | IWL_DEBUG_MAC80211(priv, "changes = 0x%X\n", changes); |
2431 | 2431 | ||
2432 | if (!iwl_legacy_is_alive(priv)) | ||
2433 | return; | ||
2434 | |||
2435 | mutex_lock(&priv->mutex); | 2432 | mutex_lock(&priv->mutex); |
2436 | 2433 | ||
2434 | if (!iwl_legacy_is_alive(priv)) { | ||
2435 | mutex_unlock(&priv->mutex); | ||
2436 | return; | ||
2437 | } | ||
2438 | |||
2437 | if (changes & BSS_CHANGED_QOS) { | 2439 | if (changes & BSS_CHANGED_QOS) { |
2438 | unsigned long flags; | 2440 | unsigned long flags; |
2439 | 2441 | ||
diff --git a/drivers/net/wireless/iwlegacy/iwl3945-base.c b/drivers/net/wireless/iwlegacy/iwl3945-base.c index cc7ebcee60e..5bdcc36f543 100644 --- a/drivers/net/wireless/iwlegacy/iwl3945-base.c +++ b/drivers/net/wireless/iwlegacy/iwl3945-base.c | |||
@@ -2748,11 +2748,12 @@ static void iwl3945_bg_init_alive_start(struct work_struct *data) | |||
2748 | struct iwl_priv *priv = | 2748 | struct iwl_priv *priv = |
2749 | container_of(data, struct iwl_priv, init_alive_start.work); | 2749 | container_of(data, struct iwl_priv, init_alive_start.work); |
2750 | 2750 | ||
2751 | mutex_lock(&priv->mutex); | ||
2751 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 2752 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
2752 | return; | 2753 | goto out; |
2753 | 2754 | ||
2754 | mutex_lock(&priv->mutex); | ||
2755 | iwl3945_init_alive_start(priv); | 2755 | iwl3945_init_alive_start(priv); |
2756 | out: | ||
2756 | mutex_unlock(&priv->mutex); | 2757 | mutex_unlock(&priv->mutex); |
2757 | } | 2758 | } |
2758 | 2759 | ||
@@ -2761,11 +2762,12 @@ static void iwl3945_bg_alive_start(struct work_struct *data) | |||
2761 | struct iwl_priv *priv = | 2762 | struct iwl_priv *priv = |
2762 | container_of(data, struct iwl_priv, alive_start.work); | 2763 | container_of(data, struct iwl_priv, alive_start.work); |
2763 | 2764 | ||
2765 | mutex_lock(&priv->mutex); | ||
2764 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 2766 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
2765 | return; | 2767 | goto out; |
2766 | 2768 | ||
2767 | mutex_lock(&priv->mutex); | ||
2768 | iwl3945_alive_start(priv); | 2769 | iwl3945_alive_start(priv); |
2770 | out: | ||
2769 | mutex_unlock(&priv->mutex); | 2771 | mutex_unlock(&priv->mutex); |
2770 | } | 2772 | } |
2771 | 2773 | ||
@@ -2995,10 +2997,12 @@ static void iwl3945_bg_restart(struct work_struct *data) | |||
2995 | } else { | 2997 | } else { |
2996 | iwl3945_down(priv); | 2998 | iwl3945_down(priv); |
2997 | 2999 | ||
2998 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 3000 | mutex_lock(&priv->mutex); |
3001 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) { | ||
3002 | mutex_unlock(&priv->mutex); | ||
2999 | return; | 3003 | return; |
3004 | } | ||
3000 | 3005 | ||
3001 | mutex_lock(&priv->mutex); | ||
3002 | __iwl3945_up(priv); | 3006 | __iwl3945_up(priv); |
3003 | mutex_unlock(&priv->mutex); | 3007 | mutex_unlock(&priv->mutex); |
3004 | } | 3008 | } |
@@ -3009,11 +3013,12 @@ static void iwl3945_bg_rx_replenish(struct work_struct *data) | |||
3009 | struct iwl_priv *priv = | 3013 | struct iwl_priv *priv = |
3010 | container_of(data, struct iwl_priv, rx_replenish); | 3014 | container_of(data, struct iwl_priv, rx_replenish); |
3011 | 3015 | ||
3016 | mutex_lock(&priv->mutex); | ||
3012 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 3017 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
3013 | return; | 3018 | goto out; |
3014 | 3019 | ||
3015 | mutex_lock(&priv->mutex); | ||
3016 | iwl3945_rx_replenish(priv); | 3020 | iwl3945_rx_replenish(priv); |
3021 | out: | ||
3017 | mutex_unlock(&priv->mutex); | 3022 | mutex_unlock(&priv->mutex); |
3018 | } | 3023 | } |
3019 | 3024 | ||
diff --git a/drivers/net/wireless/iwlegacy/iwl4965-base.c b/drivers/net/wireless/iwlegacy/iwl4965-base.c index 2da60702fab..55851ac3add 100644 --- a/drivers/net/wireless/iwlegacy/iwl4965-base.c +++ b/drivers/net/wireless/iwlegacy/iwl4965-base.c | |||
@@ -2404,11 +2404,12 @@ static void iwl4965_bg_init_alive_start(struct work_struct *data) | |||
2404 | struct iwl_priv *priv = | 2404 | struct iwl_priv *priv = |
2405 | container_of(data, struct iwl_priv, init_alive_start.work); | 2405 | container_of(data, struct iwl_priv, init_alive_start.work); |
2406 | 2406 | ||
2407 | mutex_lock(&priv->mutex); | ||
2407 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 2408 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
2408 | return; | 2409 | goto out; |
2409 | 2410 | ||
2410 | mutex_lock(&priv->mutex); | ||
2411 | priv->cfg->ops->lib->init_alive_start(priv); | 2411 | priv->cfg->ops->lib->init_alive_start(priv); |
2412 | out: | ||
2412 | mutex_unlock(&priv->mutex); | 2413 | mutex_unlock(&priv->mutex); |
2413 | } | 2414 | } |
2414 | 2415 | ||
@@ -2417,11 +2418,12 @@ static void iwl4965_bg_alive_start(struct work_struct *data) | |||
2417 | struct iwl_priv *priv = | 2418 | struct iwl_priv *priv = |
2418 | container_of(data, struct iwl_priv, alive_start.work); | 2419 | container_of(data, struct iwl_priv, alive_start.work); |
2419 | 2420 | ||
2421 | mutex_lock(&priv->mutex); | ||
2420 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 2422 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
2421 | return; | 2423 | goto out; |
2422 | 2424 | ||
2423 | mutex_lock(&priv->mutex); | ||
2424 | iwl4965_alive_start(priv); | 2425 | iwl4965_alive_start(priv); |
2426 | out: | ||
2425 | mutex_unlock(&priv->mutex); | 2427 | mutex_unlock(&priv->mutex); |
2426 | } | 2428 | } |
2427 | 2429 | ||
@@ -2471,10 +2473,12 @@ static void iwl4965_bg_restart(struct work_struct *data) | |||
2471 | } else { | 2473 | } else { |
2472 | iwl4965_down(priv); | 2474 | iwl4965_down(priv); |
2473 | 2475 | ||
2474 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 2476 | mutex_lock(&priv->mutex); |
2477 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) { | ||
2478 | mutex_unlock(&priv->mutex); | ||
2475 | return; | 2479 | return; |
2480 | } | ||
2476 | 2481 | ||
2477 | mutex_lock(&priv->mutex); | ||
2478 | __iwl4965_up(priv); | 2482 | __iwl4965_up(priv); |
2479 | mutex_unlock(&priv->mutex); | 2483 | mutex_unlock(&priv->mutex); |
2480 | } | 2484 | } |
@@ -2851,21 +2855,22 @@ void iwl4965_mac_channel_switch(struct ieee80211_hw *hw, | |||
2851 | 2855 | ||
2852 | IWL_DEBUG_MAC80211(priv, "enter\n"); | 2856 | IWL_DEBUG_MAC80211(priv, "enter\n"); |
2853 | 2857 | ||
2858 | mutex_lock(&priv->mutex); | ||
2859 | |||
2854 | if (iwl_legacy_is_rfkill(priv)) | 2860 | if (iwl_legacy_is_rfkill(priv)) |
2855 | goto out_exit; | 2861 | goto out; |
2856 | 2862 | ||
2857 | if (test_bit(STATUS_EXIT_PENDING, &priv->status) || | 2863 | if (test_bit(STATUS_EXIT_PENDING, &priv->status) || |
2858 | test_bit(STATUS_SCANNING, &priv->status)) | 2864 | test_bit(STATUS_SCANNING, &priv->status)) |
2859 | goto out_exit; | 2865 | goto out; |
2860 | 2866 | ||
2861 | if (!iwl_legacy_is_associated_ctx(ctx)) | 2867 | if (!iwl_legacy_is_associated_ctx(ctx)) |
2862 | goto out_exit; | 2868 | goto out; |
2863 | 2869 | ||
2864 | /* channel switch in progress */ | 2870 | /* channel switch in progress */ |
2865 | if (priv->switch_rxon.switch_in_progress == true) | 2871 | if (priv->switch_rxon.switch_in_progress == true) |
2866 | goto out_exit; | 2872 | goto out; |
2867 | 2873 | ||
2868 | mutex_lock(&priv->mutex); | ||
2869 | if (priv->cfg->ops->lib->set_channel_switch) { | 2874 | if (priv->cfg->ops->lib->set_channel_switch) { |
2870 | 2875 | ||
2871 | ch = channel->hw_value; | 2876 | ch = channel->hw_value; |
@@ -2921,7 +2926,6 @@ void iwl4965_mac_channel_switch(struct ieee80211_hw *hw, | |||
2921 | } | 2926 | } |
2922 | out: | 2927 | out: |
2923 | mutex_unlock(&priv->mutex); | 2928 | mutex_unlock(&priv->mutex); |
2924 | out_exit: | ||
2925 | if (!priv->switch_rxon.switch_in_progress) | 2929 | if (!priv->switch_rxon.switch_in_progress) |
2926 | ieee80211_chswitch_done(ctx->vif, false); | 2930 | ieee80211_chswitch_done(ctx->vif, false); |
2927 | IWL_DEBUG_MAC80211(priv, "leave\n"); | 2931 | IWL_DEBUG_MAC80211(priv, "leave\n"); |