iwlwifi: remove sync_cmd_mutex
Stanislaw Gruszka [Thu, 31 Mar 2011 15:36:28 +0000 (17:36 +0200)]
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>

drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-dev.h
drivers/net/wireless/iwlwifi/iwl-hcmd.c

index 70428e9..42fad62 100644 (file)
@@ -2371,9 +2371,6 @@ static void __iwl_down(struct iwl_priv *priv)
        priv->bt_full_concurrent = false;
        priv->bt_ci_compliance = 0;
 
-       /* Unblock any waiting calls */
-       wake_up_interruptible_all(&priv->wait_command_queue);
-
        /* Wipe out the EXIT_PENDING status bit if we are not actually
         * exiting the module */
        if (!exit_pending)
@@ -3620,7 +3617,6 @@ static int iwl_init_drv(struct iwl_priv *priv)
        INIT_LIST_HEAD(&priv->free_frames);
 
        mutex_init(&priv->mutex);
-       mutex_init(&priv->sync_cmd_mutex);
 
        priv->ieee_channels = NULL;
        priv->ieee_rates = NULL;
index 7465875..1c9d2dd 100644 (file)
@@ -1307,7 +1307,6 @@ struct iwl_priv {
        spinlock_t hcmd_lock;   /* protect hcmd */
        spinlock_t reg_lock;    /* protect hw register access */
        struct mutex mutex;
-       struct mutex sync_cmd_mutex; /* enable serialization of sync commands */
 
        /* basic pci-network driver stuff */
        struct pci_dev *pci_dev;
index 02499f6..c71c0a4 100644 (file)
@@ -171,14 +171,13 @@ int iwl_send_cmd_sync(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
        int cmd_idx;
        int ret;
 
-       BUG_ON(cmd->flags & CMD_ASYNC);
+       lockdep_assert_held(&priv->mutex);
 
         /* A synchronous command can not have a callback set. */
-       BUG_ON(cmd->callback);
+       BUG_ON((cmd->flags & CMD_ASYNC) || cmd->callback);
 
        IWL_DEBUG_INFO(priv, "Attempting to send sync command %s\n",
                        get_cmd_string(cmd->id));
-       mutex_lock(&priv->sync_cmd_mutex);
 
        set_bit(STATUS_HCMD_ACTIVE, &priv->status);
        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)
                ret = cmd_idx;
                IWL_ERR(priv, "Error sending %s: enqueue_hcmd failed: %d\n",
                          get_cmd_string(cmd->id), ret);
-               goto out;
+               return ret;
        }
 
        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)
                goto cancel;
        }
 
-       ret = 0;
-       goto out;
+       return 0;
 
 cancel:
        if (cmd->flags & CMD_WANT_SKB) {
@@ -248,8 +246,7 @@ fail:
                iwl_free_pages(priv, cmd->reply_page);
                cmd->reply_page = 0;
        }
-out:
-       mutex_unlock(&priv->sync_cmd_mutex);
+
        return ret;
 }