libertas: before sleeping, check for a command result
authorHolger Schurig <hs4233@mail.mn-solutions.de>
Fri, 23 May 2008 14:04:13 +0000 (16:04 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 3 Jun 2008 19:00:15 +0000 (15:00 -0400)
If we don't check for a command response early, but rather sleep,
then we might sleep despite an already-received command response.
This will lead to a command-timeout.

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/main.c

index 0cd4702d2f76648cefdfeb02a54d794d329824e3..faa4db1838b6396d4b50ae824d694210a85ebe43 100644 (file)
@@ -722,14 +722,14 @@ static int lbs_thread(void *data)
                        shouldsleep = 1;        /* Something is en route to the device already */
                else if (priv->tx_pending_len > 0)
                        shouldsleep = 0;        /* We've a packet to send */
+               else if (priv->resp_len[priv->resp_idx])
+                       shouldsleep = 0;        /* We have a command response */
                else if (priv->cur_cmd)
                        shouldsleep = 1;        /* Can't send a command; one already running */
                else if (!list_empty(&priv->cmdpendingq))
                        shouldsleep = 0;        /* We have a command to send */
                else if (__kfifo_len(priv->event_fifo))
                        shouldsleep = 0;        /* We have an event to process */
-               else if (priv->resp_len[priv->resp_idx])
-                       shouldsleep = 0;        /* We have a command response */
                else
                        shouldsleep = 1;        /* No command */