aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2011-03-31 11:36:28 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-07 15:34:11 -0400
commit8447c163afeaa7e9f6f015088177b1c8511e0877 (patch)
tree722edb206661c80575508c86ca690def6f05a254 /drivers/net/wireless/iwlwifi
parentdc1a4068fce2657991c5c3b1f6849f7fc466c69f (diff)
iwlwifi: remove sync_cmd_mutex
We now use priv->mutex to serialize sync command, remove old priv->sync_cmd_mutex and add assertion that priv->mutex must be locked. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-hcmd.c13
3 files changed, 5 insertions, 13 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 70428e9b9f7..42fad62baf7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2371,9 +2371,6 @@ static void __iwl_down(struct iwl_priv *priv)
2371 priv->bt_full_concurrent = false; 2371 priv->bt_full_concurrent = false;
2372 priv->bt_ci_compliance = 0; 2372 priv->bt_ci_compliance = 0;
2373 2373
2374 /* Unblock any waiting calls */
2375 wake_up_interruptible_all(&priv->wait_command_queue);
2376
2377 /* Wipe out the EXIT_PENDING status bit if we are not actually 2374 /* Wipe out the EXIT_PENDING status bit if we are not actually
2378 * exiting the module */ 2375 * exiting the module */
2379 if (!exit_pending) 2376 if (!exit_pending)
@@ -3620,7 +3617,6 @@ static int iwl_init_drv(struct iwl_priv *priv)
3620 INIT_LIST_HEAD(&priv->free_frames); 3617 INIT_LIST_HEAD(&priv->free_frames);
3621 3618
3622 mutex_init(&priv->mutex); 3619 mutex_init(&priv->mutex);
3623 mutex_init(&priv->sync_cmd_mutex);
3624 3620
3625 priv->ieee_channels = NULL; 3621 priv->ieee_channels = NULL;
3626 priv->ieee_rates = NULL; 3622 priv->ieee_rates = NULL;
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 746587546a4..1c9d2dd37cc 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -1307,7 +1307,6 @@ struct iwl_priv {
1307 spinlock_t hcmd_lock; /* protect hcmd */ 1307 spinlock_t hcmd_lock; /* protect hcmd */
1308 spinlock_t reg_lock; /* protect hw register access */ 1308 spinlock_t reg_lock; /* protect hw register access */
1309 struct mutex mutex; 1309 struct mutex mutex;
1310 struct mutex sync_cmd_mutex; /* enable serialization of sync commands */
1311 1310
1312 /* basic pci-network driver stuff */ 1311 /* basic pci-network driver stuff */
1313 struct pci_dev *pci_dev; 1312 struct pci_dev *pci_dev;
diff --git a/drivers/net/wireless/iwlwifi/iwl-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-hcmd.c
index 02499f68468..c71c0a45fa0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-hcmd.c
+++ b/drivers/net/wireless/iwlwifi/iwl-hcmd.c
@@ -171,14 +171,13 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
171 int cmd_idx; 171 int cmd_idx;
172 int ret; 172 int ret;
173 173
174 BUG_ON(cmd->flags & CMD_ASYNC); 174 lockdep_assert_held(&priv->mutex);
175 175
176 /* A synchronous command can not have a callback set. */ 176 /* A synchronous command can not have a callback set. */
177 BUG_ON(cmd->callback); 177 BUG_ON((cmd->flags & CMD_ASYNC) || cmd->callback);
178 178
179 IWL_DEBUG_INFO(priv, "Attempting to send sync command %s\n", 179 IWL_DEBUG_INFO(priv, "Attempting to send sync command %s\n",
180 get_cmd_string(cmd->id)); 180 get_cmd_string(cmd->id));
181 mutex_lock(&priv->sync_cmd_mutex);
182 181
183 set_bit(STATUS_HCMD_ACTIVE, &priv->status); 182 set_bit(STATUS_HCMD_ACTIVE, &priv->status);
184 IWL_DEBUG_INFO(priv, "Setting HCMD_ACTIVE for command %s\n", 183 IWL_DEBUG_INFO(priv, "Setting HCMD_ACTIVE for command %s\n",
@@ -189,7 +188,7 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
189 ret = cmd_idx; 188 ret = cmd_idx;
190 IWL_ERR(priv, "Error sending %s: enqueue_hcmd failed: %d\n", 189 IWL_ERR(priv, "Error sending %s: enqueue_hcmd failed: %d\n",
191 get_cmd_string(cmd->id), ret); 190 get_cmd_string(cmd->id), ret);
192 goto out; 191 return ret;
193 } 192 }
194 193
195 ret = wait_event_interruptible_timeout(priv->wait_command_queue, 194 ret = wait_event_interruptible_timeout(priv->wait_command_queue,
@@ -229,8 +228,7 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
229 goto cancel; 228 goto cancel;
230 } 229 }
231 230
232 ret = 0; 231 return 0;
233 goto out;
234 232
235cancel: 233cancel:
236 if (cmd->flags & CMD_WANT_SKB) { 234 if (cmd->flags & CMD_WANT_SKB) {
@@ -248,8 +246,7 @@ fail:
248 iwl_free_pages(priv, cmd->reply_page); 246 iwl_free_pages(priv, cmd->reply_page);
249 cmd->reply_page = 0; 247 cmd->reply_page = 0;
250 } 248 }
251out: 249
252 mutex_unlock(&priv->sync_cmd_mutex);
253 return ret; 250 return ret;
254} 251}
255 252