提交 57962f0b 编写于 作者: H Holger Schurig 提交者: John W. Linville

libertas: reduce command retry time

[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: NHolger Schurig <hs4233@mail.mn-solutions.de>
Acked-by: NDan Williams <dcbw@redhat.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 bd9b448f
...@@ -1136,7 +1136,7 @@ static void lbs_submit_command(struct lbs_private *priv, ...@@ -1136,7 +1136,7 @@ static void lbs_submit_command(struct lbs_private *priv,
struct cmd_header *cmd; struct cmd_header *cmd;
uint16_t cmdsize; uint16_t cmdsize;
uint16_t command; uint16_t command;
int timeo = 5 * HZ; int timeo = 3 * HZ;
int ret; int ret;
lbs_deb_enter(LBS_DEB_HOST); lbs_deb_enter(LBS_DEB_HOST);
...@@ -1154,7 +1154,7 @@ static void lbs_submit_command(struct lbs_private *priv, ...@@ -1154,7 +1154,7 @@ static void lbs_submit_command(struct lbs_private *priv,
/* These commands take longer */ /* These commands take longer */
if (command == CMD_802_11_SCAN || command == CMD_802_11_ASSOCIATE || if (command == CMD_802_11_SCAN || command == CMD_802_11_ASSOCIATE ||
command == CMD_802_11_AUTHENTICATE) command == CMD_802_11_AUTHENTICATE)
timeo = 10 * HZ; timeo = 5 * HZ;
lbs_deb_cmd("DNLD_CMD: command 0x%04x, seq %d, size %d\n", lbs_deb_cmd("DNLD_CMD: command 0x%04x, seq %d, size %d\n",
command, le16_to_cpu(cmd->seqnum), cmdsize); command, le16_to_cpu(cmd->seqnum), cmdsize);
...@@ -1166,7 +1166,7 @@ static void lbs_submit_command(struct lbs_private *priv, ...@@ -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); lbs_pr_info("DNLD_CMD: hw_host_to_card failed: %d\n", ret);
/* Let the timer kick in and retry, and potentially reset /* Let the timer kick in and retry, and potentially reset
the whole thing if the condition persists */ the whole thing if the condition persists */
timeo = HZ; timeo = HZ/4;
} }
/* Setup the timer after transmit command */ /* Setup the timer after transmit command */
......
...@@ -782,9 +782,10 @@ static int lbs_thread(void *data) ...@@ -782,9 +782,10 @@ static int lbs_thread(void *data)
if (priv->cmd_timed_out && priv->cur_cmd) { if (priv->cmd_timed_out && priv->cur_cmd) {
struct cmd_ctrl_node *cmdnode = priv->cur_cmd; struct cmd_ctrl_node *cmdnode = priv->cur_cmd;
if (++priv->nr_retries > 10) { if (++priv->nr_retries > 3) {
lbs_pr_info("Excessive timeouts submitting command %x\n", lbs_pr_info("Excessive timeouts submitting "
le16_to_cpu(cmdnode->cmdbuf->command)); "command 0x%04x\n",
le16_to_cpu(cmdnode->cmdbuf->command));
lbs_complete_command(priv, cmdnode, -ETIMEDOUT); lbs_complete_command(priv, cmdnode, -ETIMEDOUT);
priv->nr_retries = 0; priv->nr_retries = 0;
if (priv->reset_card) { if (priv->reset_card) {
...@@ -794,8 +795,10 @@ static int lbs_thread(void *data) ...@@ -794,8 +795,10 @@ static int lbs_thread(void *data)
} }
} else { } else {
priv->cur_cmd = NULL; priv->cur_cmd = NULL;
lbs_pr_info("requeueing command %x due to timeout (#%d)\n", lbs_pr_info("requeueing command 0x%04x due "
le16_to_cpu(cmdnode->cmdbuf->command), priv->nr_retries); "to timeout (#%d)\n",
le16_to_cpu(cmdnode->cmdbuf->command),
priv->nr_retries);
/* Stick it back at the _top_ of the pending queue /* Stick it back at the _top_ of the pending queue
for immediate resubmission */ for immediate resubmission */
...@@ -986,12 +989,11 @@ static void command_timer_fn(unsigned long data) ...@@ -986,12 +989,11 @@ static void command_timer_fn(unsigned long data)
lbs_deb_enter(LBS_DEB_CMD); lbs_deb_enter(LBS_DEB_CMD);
spin_lock_irqsave(&priv->driver_lock, flags); spin_lock_irqsave(&priv->driver_lock, flags);
if (!priv->cur_cmd) { if (!priv->cur_cmd)
lbs_pr_info("Command timer expired; no pending command\n");
goto out; 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; priv->cmd_timed_out = 1;
wake_up_interruptible(&priv->waitq); wake_up_interruptible(&priv->waitq);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册