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: Holger Schurig <hs4233@mail.mn-solutions.de> Acked-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
bd9b448f4c
Коммит
57962f0b9d
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче