summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-hcmd.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-06-27 06:06:42 -0700
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2011-07-01 07:46:21 -0700
commit98a648e10a3c4eb30f8043281345506e17ace007 (patch)
tree0e1f04eb63b342018635f0bb38860e13cedaaa7d /drivers/net/wireless/iwlwifi/iwl-hcmd.c
parent9a4ba833a2d0016cf836827e136f0c219834bd41 (diff)
downloadlinux-98a648e10a3c4eb30f8043281345506e17ace007.tar.gz
linux-98a648e10a3c4eb30f8043281345506e17ace007.tar.bz2
linux-98a648e10a3c4eb30f8043281345506e17ace007.zip
iwlagn: verify mutex held for sync commands
Emmanuel noticed that there's no explicit checking that prevents the driver from attempting to issue multiple synchronous commands at the same time and wrote a patch to check. However, his patch warns only if a collision actually happened, an unlikely thing since the driver mutex should be held for synchronous command submissions. So instead of checking that a collision happened add a check that the mutex is held which ensures that collisions can't happen. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-hcmd.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-hcmd.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-hcmd.c
index e3e5fb614178..107b38e2ee93 100644
--- a/drivers/net/wireless/iwlwifi/iwl-hcmd.c
+++ b/drivers/net/wireless/iwlwifi/iwl-hcmd.c
@@ -171,6 +171,8 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
int cmd_idx;
int ret;
+ lockdep_assert_held(&priv->mutex);
+
if (WARN_ON(cmd->flags & CMD_ASYNC))
return -EINVAL;
@@ -181,16 +183,7 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
IWL_DEBUG_INFO(priv, "Attempting to send sync command %s\n",
get_cmd_string(cmd->id));
- if (test_and_set_bit(STATUS_HCMD_ACTIVE, &priv->status)) {
- IWL_ERR(priv, "STATUS_HCMD_ACTIVE already set while sending %s"
- ". Previous SYNC cmdn is %s\n",
- get_cmd_string(cmd->id),
- get_cmd_string(priv->last_sync_cmd_id));
- WARN_ON(1);
- } else {
- priv->last_sync_cmd_id = cmd->id;
- }
-
+ set_bit(STATUS_HCMD_ACTIVE, &priv->status);
IWL_DEBUG_INFO(priv, "Setting HCMD_ACTIVE for command %s\n",
get_cmd_string(cmd->id));