libertas: reduce command retry time
authorHolger Schurig <hs4233@mail.mn-solutions.de>
Wed, 14 May 2008 14:30:28 +0000 (16:30 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 22 May 2008 01:47:46 +0000 (21:47 -0400)
[PATCH, take 2] libertas: reduce command retry time

In the normal case, an unsuccessful command would be retried for 10*5 seconds,
or 10*10 seconds in the worst case. This patch reduces this to 3*3 seconds,
or 3*10 seconds in the worst case.

I also reduced the time it takes to start a new command downloaded.

Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Acked-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/cmd.c
drivers/net/wireless/libertas/main.c

index 7ccec98..2d9bbcc 100644 (file)
@@ -1136,7 +1136,7 @@ static void lbs_submit_command(struct lbs_private *priv,
        struct cmd_header *cmd;
        uint16_t cmdsize;
        uint16_t command;
-       int timeo = 5 * HZ;
+       int timeo = 3 * HZ;
        int ret;
 
        lbs_deb_enter(LBS_DEB_HOST);
@@ -1154,7 +1154,7 @@ static void lbs_submit_command(struct lbs_private *priv,
        /* These commands take longer */
        if (command == CMD_802_11_SCAN || command == CMD_802_11_ASSOCIATE ||
            command == CMD_802_11_AUTHENTICATE)
-               timeo = 10 * HZ;
+               timeo = 5 * HZ;
 
        lbs_deb_cmd("DNLD_CMD: command 0x%04x, seq %d, size %d\n",
                     command, le16_to_cpu(cmd->seqnum), cmdsize);
@@ -1166,7 +1166,7 @@ static void lbs_submit_command(struct lbs_private *priv,
                lbs_pr_info("DNLD_CMD: hw_host_to_card failed: %d\n", ret);
                /* Let the timer kick in and retry, and potentially reset
                   the whole thing if the condition persists */
-               timeo = HZ;
+               timeo = HZ/4;
        }
 
        /* Setup the timer after transmit command */
index 804da36..baafa44 100644 (file)
@@ -782,9 +782,10 @@ static int lbs_thread(void *data)
                if (priv->cmd_timed_out && priv->cur_cmd) {
                        struct cmd_ctrl_node *cmdnode = priv->cur_cmd;
 
-                       if (++priv->nr_retries > 10) {
-                               lbs_pr_info("Excessive timeouts submitting command %x\n",
-                                           le16_to_cpu(cmdnode->cmdbuf->command));
+                       if (++priv->nr_retries > 3) {
+                               lbs_pr_info("Excessive timeouts submitting "
+                                       "command 0x%04x\n",
+                                       le16_to_cpu(cmdnode->cmdbuf->command));
                                lbs_complete_command(priv, cmdnode, -ETIMEDOUT);
                                priv->nr_retries = 0;
                                if (priv->reset_card) {
@@ -794,8 +795,10 @@ static int lbs_thread(void *data)
                                }
                        } else {
                                priv->cur_cmd = NULL;
-                               lbs_pr_info("requeueing command %x due to timeout (#%d)\n",
-                                           le16_to_cpu(cmdnode->cmdbuf->command), priv->nr_retries);
+                               lbs_pr_info("requeueing command 0x%04x due "
+                                       "to timeout (#%d)\n",
+                                       le16_to_cpu(cmdnode->cmdbuf->command),
+                                       priv->nr_retries);
 
                                /* Stick it back at the _top_ of the pending queue
                                   for immediate resubmission */
@@ -986,12 +989,11 @@ static void command_timer_fn(unsigned long data)
        lbs_deb_enter(LBS_DEB_CMD);
        spin_lock_irqsave(&priv->driver_lock, flags);
 
-       if (!priv->cur_cmd) {
-               lbs_pr_info("Command timer expired; no pending command\n");
+       if (!priv->cur_cmd)
                goto out;
-       }
 
-       lbs_pr_info("Command %x timed out\n", le16_to_cpu(priv->cur_cmd->cmdbuf->command));
+       lbs_pr_info("command 0x%04x timed out\n",
+               le16_to_cpu(priv->cur_cmd->cmdbuf->command));
 
        priv->cmd_timed_out = 1;
        wake_up_interruptible(&priv->waitq);