aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-03-05 14:24:27 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:09 -0500
commit08ae86ac3f9d9c9a60d2883c82cd72a5c66b94db (patch)
tree9994018a15181358b6f5b8dbedec48d2e9c1a7be
parent4ff70fcdf3c424c3fdca253e7b7556f77eaf39be (diff)
iwlwifi: remove shared lock
Some data doesn't need protection, some of the lock places are simply useless, and some data can be protected with the mutex instead. Thus the shared lock can be removed by making those changes. 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-5000.c7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rs.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rxon.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-tx.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-mac80211.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-shared.h1
9 files changed, 3 insertions, 44 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 1527dec7a267..ccaeead29c2f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -63,12 +63,8 @@
63/* NIC configuration for 5000 series */ 63/* NIC configuration for 5000 series */
64static void iwl5000_nic_config(struct iwl_priv *priv) 64static void iwl5000_nic_config(struct iwl_priv *priv)
65{ 65{
66 unsigned long flags;
67
68 iwl_rf_config(priv); 66 iwl_rf_config(priv);
69 67
70 spin_lock_irqsave(&priv->shrd->lock, flags);
71
72 /* W/A : NIC is stuck in a reset state after Early PCIe power off 68 /* W/A : NIC is stuck in a reset state after Early PCIe power off
73 * (PCIe power is lost before PERST# is asserted), 69 * (PCIe power is lost before PERST# is asserted),
74 * causing ME FW to lose ownership and not being able to obtain it back. 70 * causing ME FW to lose ownership and not being able to obtain it back.
@@ -76,9 +72,6 @@ static void iwl5000_nic_config(struct iwl_priv *priv)
76 iwl_set_bits_mask_prph(trans(priv), APMG_PS_CTRL_REG, 72 iwl_set_bits_mask_prph(trans(priv), APMG_PS_CTRL_REG,
77 APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS, 73 APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS,
78 ~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS); 74 ~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS);
79
80
81 spin_unlock_irqrestore(&priv->shrd->lock, flags);
82} 75}
83 76
84static struct iwl_sensitivity_ranges iwl5000_sensitivity = { 77static struct iwl_sensitivity_ranges iwl5000_sensitivity = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 0f8dd0f96fa6..2470ca767589 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -710,7 +710,6 @@ int iwlagn_bt_coex_profile_notif(struct iwl_priv *priv,
710 struct iwl_rx_mem_buffer *rxb, 710 struct iwl_rx_mem_buffer *rxb,
711 struct iwl_device_cmd *cmd) 711 struct iwl_device_cmd *cmd)
712{ 712{
713 unsigned long flags;
714 struct iwl_rx_packet *pkt = rxb_addr(rxb); 713 struct iwl_rx_packet *pkt = rxb_addr(rxb);
715 struct iwl_bt_coex_profile_notif *coex = &pkt->u.bt_coex_profile_notif; 714 struct iwl_bt_coex_profile_notif *coex = &pkt->u.bt_coex_profile_notif;
716 struct iwl_bt_uart_msg *uart_msg = &coex->last_bt_uart_msg; 715 struct iwl_bt_uart_msg *uart_msg = &coex->last_bt_uart_msg;
@@ -756,9 +755,7 @@ int iwlagn_bt_coex_profile_notif(struct iwl_priv *priv,
756 755
757 /* FIXME: based on notification, adjust the prio_boost */ 756 /* FIXME: based on notification, adjust the prio_boost */
758 757
759 spin_lock_irqsave(&priv->shrd->lock, flags);
760 priv->bt_ci_compliance = coex->bt_ci_compliance; 758 priv->bt_ci_compliance = coex->bt_ci_compliance;
761 spin_unlock_irqrestore(&priv->shrd->lock, flags);
762 return 0; 759 return 0;
763} 760}
764 761
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
index a7d67135e3dc..9895b807246b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
@@ -870,19 +870,16 @@ static void rs_bt_update_lq(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
870{ 870{
871 struct iwl_scale_tbl_info *tbl; 871 struct iwl_scale_tbl_info *tbl;
872 bool full_concurrent = priv->bt_full_concurrent; 872 bool full_concurrent = priv->bt_full_concurrent;
873 unsigned long flags;
874 873
875 if (priv->bt_ant_couple_ok) { 874 if (priv->bt_ant_couple_ok) {
876 /* 875 /*
877 * Is there a need to switch between 876 * Is there a need to switch between
878 * full concurrency and 3-wire? 877 * full concurrency and 3-wire?
879 */ 878 */
880 spin_lock_irqsave(&priv->shrd->lock, flags);
881 if (priv->bt_ci_compliance && priv->bt_ant_couple_ok) 879 if (priv->bt_ci_compliance && priv->bt_ant_couple_ok)
882 full_concurrent = true; 880 full_concurrent = true;
883 else 881 else
884 full_concurrent = false; 882 full_concurrent = false;
885 spin_unlock_irqrestore(&priv->shrd->lock, flags);
886 } 883 }
887 if ((priv->bt_traffic_load != priv->last_bt_traffic_load) || 884 if ((priv->bt_traffic_load != priv->last_bt_traffic_load) ||
888 (priv->bt_full_concurrent != full_concurrent)) { 885 (priv->bt_full_concurrent != full_concurrent)) {
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
index 73653a6cf32d..a8c790028d53 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
@@ -590,8 +590,6 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)
590 } 590 }
591 591
592 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { 592 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
593 unsigned long flags;
594
595 ch_info = iwl_get_channel_info(priv, channel->band, 593 ch_info = iwl_get_channel_info(priv, channel->band,
596 channel->hw_value); 594 channel->hw_value);
597 if (!is_channel_valid(ch_info)) { 595 if (!is_channel_valid(ch_info)) {
@@ -600,8 +598,6 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)
600 goto out; 598 goto out;
601 } 599 }
602 600
603 spin_lock_irqsave(&priv->shrd->lock, flags);
604
605 for_each_context(priv, ctx) { 601 for_each_context(priv, ctx) {
606 /* Configure HT40 channels */ 602 /* Configure HT40 channels */
607 if (ctx->ht.enabled != conf_is_ht(conf)) 603 if (ctx->ht.enabled != conf_is_ht(conf))
@@ -636,8 +632,6 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)
636 ctx->vif); 632 ctx->vif);
637 } 633 }
638 634
639 spin_unlock_irqrestore(&priv->shrd->lock, flags);
640
641 iwl_update_bcast_stations(priv); 635 iwl_update_bcast_stations(priv);
642 636
643 /* 637 /*
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index 4e69189a631d..2b722ccb730a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -259,18 +259,15 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
259 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; 259 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
260 struct iwl_device_cmd *dev_cmd = NULL; 260 struct iwl_device_cmd *dev_cmd = NULL;
261 struct iwl_tx_cmd *tx_cmd; 261 struct iwl_tx_cmd *tx_cmd;
262
263 __le16 fc; 262 __le16 fc;
264 u8 hdr_len; 263 u8 hdr_len;
265 u16 len, seq_number = 0; 264 u16 len, seq_number = 0;
266 u8 sta_id, tid = IWL_MAX_TID_COUNT; 265 u8 sta_id, tid = IWL_MAX_TID_COUNT;
267 unsigned long flags;
268 bool is_agg = false; 266 bool is_agg = false;
269 267
270 if (info->control.vif) 268 if (info->control.vif)
271 ctx = iwl_rxon_ctx_from_vif(info->control.vif); 269 ctx = iwl_rxon_ctx_from_vif(info->control.vif);
272 270
273 spin_lock_irqsave(&priv->shrd->lock, flags);
274 if (iwl_is_rfkill(priv->shrd)) { 271 if (iwl_is_rfkill(priv->shrd)) {
275 IWL_DEBUG_DROP(priv, "Dropping - RF KILL\n"); 272 IWL_DEBUG_DROP(priv, "Dropping - RF KILL\n");
276 goto drop_unlock_priv; 273 goto drop_unlock_priv;
@@ -369,7 +366,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
369 info->driver_data[0] = ctx; 366 info->driver_data[0] = ctx;
370 info->driver_data[1] = dev_cmd; 367 info->driver_data[1] = dev_cmd;
371 368
372 /* irqs already disabled/saved above when locking priv->shrd->lock */
373 spin_lock(&priv->sta_lock); 369 spin_lock(&priv->sta_lock);
374 370
375 if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc)) { 371 if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc)) {
@@ -418,7 +414,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
418 priv->tid_data[sta_id][tid].seq_number = seq_number; 414 priv->tid_data[sta_id][tid].seq_number = seq_number;
419 415
420 spin_unlock(&priv->sta_lock); 416 spin_unlock(&priv->sta_lock);
421 spin_unlock_irqrestore(&priv->shrd->lock, flags);
422 417
423 /* 418 /*
424 * Avoid atomic ops if it isn't an associated client. 419 * Avoid atomic ops if it isn't an associated client.
@@ -437,7 +432,6 @@ drop_unlock_sta:
437 kmem_cache_free(priv->tx_cmd_pool, dev_cmd); 432 kmem_cache_free(priv->tx_cmd_pool, dev_cmd);
438 spin_unlock(&priv->sta_lock); 433 spin_unlock(&priv->sta_lock);
439drop_unlock_priv: 434drop_unlock_priv:
440 spin_unlock_irqrestore(&priv->shrd->lock, flags);
441 return -1; 435 return -1;
442} 436}
443 437
@@ -445,7 +439,6 @@ int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
445 struct ieee80211_sta *sta, u16 tid) 439 struct ieee80211_sta *sta, u16 tid)
446{ 440{
447 struct iwl_tid_data *tid_data; 441 struct iwl_tid_data *tid_data;
448 unsigned long flags;
449 int sta_id; 442 int sta_id;
450 443
451 sta_id = iwl_sta_id(sta); 444 sta_id = iwl_sta_id(sta);
@@ -500,9 +493,7 @@ turn_off:
500 493
501 spin_unlock_bh(&priv->sta_lock); 494 spin_unlock_bh(&priv->sta_lock);
502 495
503 spin_lock_irqsave(&priv->shrd->lock, flags);
504 iwl_trans_tx_agg_disable(trans(priv), sta_id, tid); 496 iwl_trans_tx_agg_disable(trans(priv), sta_id, tid);
505 spin_unlock_irqrestore(&priv->shrd->lock, flags);
506 497
507 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); 498 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
508 499
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 47c788607024..ada9d9e4402b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -552,13 +552,11 @@ static void iwl_rf_kill_ct_config(struct iwl_priv *priv)
552{ 552{
553 struct iwl_ct_kill_config cmd; 553 struct iwl_ct_kill_config cmd;
554 struct iwl_ct_kill_throttling_config adv_cmd; 554 struct iwl_ct_kill_throttling_config adv_cmd;
555 unsigned long flags;
556 int ret = 0; 555 int ret = 0;
557 556
558 spin_lock_irqsave(&priv->shrd->lock, flags);
559 iwl_write32(trans(priv), CSR_UCODE_DRV_GP1_CLR, 557 iwl_write32(trans(priv), CSR_UCODE_DRV_GP1_CLR,
560 CSR_UCODE_DRV_GP1_REG_BIT_CT_KILL_EXIT); 558 CSR_UCODE_DRV_GP1_REG_BIT_CT_KILL_EXIT);
561 spin_unlock_irqrestore(&priv->shrd->lock, flags); 559
562 priv->thermal_throttle.ct_kill_toggle = false; 560 priv->thermal_throttle.ct_kill_toggle = false;
563 561
564 if (cfg(priv)->base_params->support_ct_kill_exit) { 562 if (cfg(priv)->base_params->support_ct_kill_exit) {
@@ -1232,7 +1230,6 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans)
1232 * we should init now 1230 * we should init now
1233 */ 1231 */
1234 spin_lock_init(&trans(priv)->reg_lock); 1232 spin_lock_init(&trans(priv)->reg_lock);
1235 spin_lock_init(&priv->shrd->lock);
1236 spin_lock_init(&priv->statistics.lock); 1233 spin_lock_init(&priv->statistics.lock);
1237 1234
1238 /*********************** 1235 /***********************
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index daf233026b5e..5b537dbe0af4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -719,10 +719,6 @@ struct iwl_priv {
719 /*data shared among all the driver's layers */ 719 /*data shared among all the driver's layers */
720 struct iwl_shared *shrd; 720 struct iwl_shared *shrd;
721 721
722 /*
723 * protects the station table, if shrd->lock and sta_lock are
724 * needed, shrd->lock must be acquired first
725 */
726 spinlock_t sta_lock; 722 spinlock_t sta_lock;
727 723
728 /* ieee device used by generic ieee processing code */ 724 /* ieee device used by generic ieee processing code */
diff --git a/drivers/net/wireless/iwlwifi/iwl-mac80211.c b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
index 9fba532d35cd..dcee30f0d629 100644
--- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c
+++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
@@ -779,8 +779,6 @@ static void iwlagn_mac_channel_switch(struct ieee80211_hw *hw,
779 goto out; 779 goto out;
780 } 780 }
781 781
782 spin_lock_irq(&priv->shrd->lock);
783
784 priv->current_ht_config.smps = conf->smps_mode; 782 priv->current_ht_config.smps = conf->smps_mode;
785 783
786 /* Configure HT40 channels */ 784 /* Configure HT40 channels */
@@ -797,8 +795,6 @@ static void iwlagn_mac_channel_switch(struct ieee80211_hw *hw,
797 iwl_set_rxon_ht(priv, ht_conf); 795 iwl_set_rxon_ht(priv, ht_conf);
798 iwl_set_flags_for_band(priv, ctx, channel->band, ctx->vif); 796 iwl_set_flags_for_band(priv, ctx, channel->band, ctx->vif);
799 797
800 spin_unlock_irq(&priv->shrd->lock);
801
802 iwl_set_rate(priv); 798 iwl_set_rate(priv);
803 /* 799 /*
804 * at this point, staging_rxon has the 800 * at this point, staging_rxon has the
@@ -1133,7 +1129,6 @@ static int iwlagn_mac_conf_tx(struct ieee80211_hw *hw,
1133 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw); 1129 struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
1134 struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv; 1130 struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv;
1135 struct iwl_rxon_context *ctx = vif_priv->ctx; 1131 struct iwl_rxon_context *ctx = vif_priv->ctx;
1136 unsigned long flags;
1137 int q; 1132 int q;
1138 1133
1139 if (WARN_ON(!ctx)) 1134 if (WARN_ON(!ctx))
@@ -1153,7 +1148,7 @@ static int iwlagn_mac_conf_tx(struct ieee80211_hw *hw,
1153 1148
1154 q = AC_NUM - 1 - queue; 1149 q = AC_NUM - 1 - queue;
1155 1150
1156 spin_lock_irqsave(&priv->shrd->lock, flags); 1151 mutex_lock(&priv->shrd->mutex);
1157 1152
1158 ctx->qos_data.def_qos_parm.ac[q].cw_min = 1153 ctx->qos_data.def_qos_parm.ac[q].cw_min =
1159 cpu_to_le16(params->cw_min); 1154 cpu_to_le16(params->cw_min);
@@ -1165,7 +1160,7 @@ static int iwlagn_mac_conf_tx(struct ieee80211_hw *hw,
1165 1160
1166 ctx->qos_data.def_qos_parm.ac[q].reserved1 = 0; 1161 ctx->qos_data.def_qos_parm.ac[q].reserved1 = 0;
1167 1162
1168 spin_unlock_irqrestore(&priv->shrd->lock, flags); 1163 mutex_unlock(&priv->shrd->mutex);
1169 1164
1170 IWL_DEBUG_MAC80211(priv, "leave\n"); 1165 IWL_DEBUG_MAC80211(priv, "leave\n");
1171 return 0; 1166 return 0;
diff --git a/drivers/net/wireless/iwlwifi/iwl-shared.h b/drivers/net/wireless/iwlwifi/iwl-shared.h
index 3a0f0a4c58d3..7720fc34c278 100644
--- a/drivers/net/wireless/iwlwifi/iwl-shared.h
+++ b/drivers/net/wireless/iwlwifi/iwl-shared.h
@@ -388,7 +388,6 @@ struct iwl_shared {
388 struct iwl_nic *nic; 388 struct iwl_nic *nic;
389 struct iwl_hw_params hw_params; 389 struct iwl_hw_params hw_params;
390 390
391 spinlock_t lock;
392 struct mutex mutex; 391 struct mutex mutex;
393 392
394 wait_queue_head_t wait_command_queue; 393 wait_queue_head_t wait_command_queue;