aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-03-05 14:24:28 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:10 -0500
commit5c40d8603d8ed03aa851d20ad8a9155fc79a1b07 (patch)
treeddd9ee366be599049e96b17e69d6fac64e68d110
parent08ae86ac3f9d9c9a60d2883c82cd72a5c66b94db (diff)
iwlwifi: make EXIT_PENDING depend on mac80211
There's no reason to set EXIT_PENDING when we start removing the module, as mac80211 will cleanly shut down the device in this case. Additionally, there's no point in rejecting commands to the device when we're cleaning up as that only leads to unwanted errors from mac80211 being printed, such as failed to remove key (...) from hardware (-16) Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rxon.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-mac80211.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-scan.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c7
5 files changed, 1 insertions, 25 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
index a8c790028d53..7a86a359e573 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
@@ -422,9 +422,6 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
422 422
423 lockdep_assert_held(&priv->shrd->mutex); 423 lockdep_assert_held(&priv->shrd->mutex);
424 424
425 if (test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
426 return -EINVAL;
427
428 if (!iwl_is_alive(priv->shrd)) 425 if (!iwl_is_alive(priv->shrd))
429 return -EBUSY; 426 return -EBUSY;
430 427
@@ -560,9 +557,6 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)
560 557
561 mutex_lock(&priv->shrd->mutex); 558 mutex_lock(&priv->shrd->mutex);
562 559
563 if (test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
564 goto out;
565
566 if (unlikely(test_bit(STATUS_SCANNING, &priv->shrd->status))) { 560 if (unlikely(test_bit(STATUS_SCANNING, &priv->shrd->status))) {
567 IWL_DEBUG_MAC80211(priv, "leave - scanning\n"); 561 IWL_DEBUG_MAC80211(priv, "leave - scanning\n");
568 goto out; 562 goto out;
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index ada9d9e4402b..c14eda048948 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1378,12 +1378,6 @@ static void iwl_op_mode_dvm_stop(struct iwl_op_mode *op_mode)
1378 1378
1379 iwl_dbgfs_unregister(priv); 1379 iwl_dbgfs_unregister(priv);
1380 1380
1381 /* ieee80211_unregister_hw call wil cause iwlagn_mac_stop to
1382 * to be called and iwl_down since we are removing the device
1383 * we need to set STATUS_EXIT_PENDING bit.
1384 */
1385 set_bit(STATUS_EXIT_PENDING, &priv->shrd->status);
1386
1387 iwl_testmode_cleanup(priv); 1381 iwl_testmode_cleanup(priv);
1388 iwlagn_mac_unregister(priv); 1382 iwlagn_mac_unregister(priv);
1389 1383
diff --git a/drivers/net/wireless/iwlwifi/iwl-mac80211.c b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
index dcee30f0d629..7f63ba93ba5d 100644
--- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c
+++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
@@ -649,8 +649,6 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
649 case IEEE80211_AMPDU_RX_STOP: 649 case IEEE80211_AMPDU_RX_STOP:
650 IWL_DEBUG_HT(priv, "stop Rx\n"); 650 IWL_DEBUG_HT(priv, "stop Rx\n");
651 ret = iwl_sta_rx_agg_stop(priv, sta, tid); 651 ret = iwl_sta_rx_agg_stop(priv, sta, tid);
652 if (test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
653 ret = 0;
654 break; 652 break;
655 case IEEE80211_AMPDU_TX_START: 653 case IEEE80211_AMPDU_TX_START:
656 if (iwlagn_mod_params.disable_11n & IWL_DISABLE_HT_TXAGG) 654 if (iwlagn_mod_params.disable_11n & IWL_DISABLE_HT_TXAGG)
@@ -666,8 +664,6 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
666 IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n", 664 IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
667 priv->agg_tids_count); 665 priv->agg_tids_count);
668 } 666 }
669 if (test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
670 ret = 0;
671 if (!priv->agg_tids_count && cfg(priv)->ht_params && 667 if (!priv->agg_tids_count && cfg(priv)->ht_params &&
672 cfg(priv)->ht_params->use_rts_for_aggregation) { 668 cfg(priv)->ht_params->use_rts_for_aggregation) {
673 /* 669 /*
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c
index 42ee1c410efd..766572b9ac89 100644
--- a/drivers/net/wireless/iwlwifi/iwl-scan.c
+++ b/drivers/net/wireless/iwlwifi/iwl-scan.c
@@ -69,8 +69,7 @@ static int iwl_send_scan_abort(struct iwl_priv *priv)
69 if (!test_bit(STATUS_READY, &priv->shrd->status) || 69 if (!test_bit(STATUS_READY, &priv->shrd->status) ||
70 !test_bit(STATUS_GEO_CONFIGURED, &priv->shrd->status) || 70 !test_bit(STATUS_GEO_CONFIGURED, &priv->shrd->status) ||
71 !test_bit(STATUS_SCAN_HW, &priv->shrd->status) || 71 !test_bit(STATUS_SCAN_HW, &priv->shrd->status) ||
72 test_bit(STATUS_FW_ERROR, &priv->shrd->status) || 72 test_bit(STATUS_FW_ERROR, &priv->shrd->status))
73 test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
74 return -EIO; 73 return -EIO;
75 74
76 ret = iwl_trans_send_cmd(trans(priv), &cmd); 75 ret = iwl_trans_send_cmd(trans(priv), &cmd);
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
index 1cb1dd29b3fe..de2a0d91d658 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c
@@ -914,9 +914,6 @@ static int iwl_send_cmd_async(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
914 return -EINVAL; 914 return -EINVAL;
915 915
916 916
917 if (test_bit(STATUS_EXIT_PENDING, &trans->shrd->status))
918 return -EBUSY;
919
920 ret = iwl_enqueue_hcmd(trans, cmd); 917 ret = iwl_enqueue_hcmd(trans, cmd);
921 if (ret < 0) { 918 if (ret < 0) {
922 IWL_DEBUG_QUIET_RFKILL(trans, 919 IWL_DEBUG_QUIET_RFKILL(trans,
@@ -938,10 +935,6 @@ static int iwl_send_cmd_sync(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
938 IWL_DEBUG_INFO(trans, "Attempting to send sync command %s\n", 935 IWL_DEBUG_INFO(trans, "Attempting to send sync command %s\n",
939 get_cmd_string(cmd->id)); 936 get_cmd_string(cmd->id));
940 937
941 if (test_bit(STATUS_EXIT_PENDING, &trans->shrd->status))
942 return -EBUSY;
943
944
945 if (test_bit(STATUS_RF_KILL_HW, &trans->shrd->status)) { 938 if (test_bit(STATUS_RF_KILL_HW, &trans->shrd->status)) {
946 IWL_ERR(trans, "Command %s aborted: RF KILL Switch\n", 939 IWL_ERR(trans, "Command %s aborted: RF KILL Switch\n",
947 get_cmd_string(cmd->id)); 940 get_cmd_string(cmd->id));