diff options
author | Stanislaw Gruszka <sgruszka@redhat.com> | 2011-03-31 11:36:28 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-07 15:34:11 -0400 |
commit | 8447c163afeaa7e9f6f015088177b1c8511e0877 (patch) | |
tree | 722edb206661c80575508c86ca690def6f05a254 | |
parent | dc1a4068fce2657991c5c3b1f6849f7fc466c69f (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>
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-hcmd.c | 13 |
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 70428e9b9f76..42fad62baf76 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 746587546a4f..1c9d2dd37cca 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 02499f684683..c71c0a45fa0b 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 | ||
235 | cancel: | 233 | cancel: |
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 | } |
251 | out: | 249 | |
252 | mutex_unlock(&priv->sync_cmd_mutex); | ||
253 | return ret; | 250 | return ret; |
254 | } | 251 | } |
255 | 252 | ||