mwl8k: allow more time for firmware commands to complete
authorLennert Buytenhek <buytenh@wantstofly.org>
Mon, 30 Nov 2009 17:12:49 +0000 (18:12 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 7 Dec 2009 21:51:20 +0000 (16:51 -0500)
Some firmware commands can under some circumstances take more than 2
seconds to complete.  This patch bumps the timeout up to 10 seconds,
and prints a message whenever a command takes more than 2 seconds.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwl8k.c

index f1566f93696e00f75a4613e472129f3a8d6df142..793a83e10e169feffd4ad595a1a98e36950045de 100644 (file)
@@ -1579,8 +1579,8 @@ static void mwl8k_fw_unlock(struct ieee80211_hw *hw)
  * Command processing.
  */
 
-/* Timeout firmware commands after 2000ms */
-#define MWL8K_CMD_TIMEOUT_MS   2000
+/* Timeout firmware commands after 10s */
+#define MWL8K_CMD_TIMEOUT_MS   10000
 
 static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
 {
@@ -1631,12 +1631,21 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)
                       MWL8K_CMD_TIMEOUT_MS);
                rc = -ETIMEDOUT;
        } else {
+               int ms;
+
+               ms = MWL8K_CMD_TIMEOUT_MS - jiffies_to_msecs(timeout);
+
                rc = cmd->result ? -EINVAL : 0;
                if (rc)
                        printk(KERN_ERR "%s: Command %s error 0x%x\n",
                               wiphy_name(hw->wiphy),
                               mwl8k_cmd_name(cmd->code, buf, sizeof(buf)),
                               le16_to_cpu(cmd->result));
+               else if (ms > 2000)
+                       printk(KERN_NOTICE "%s: Command %s took %d ms\n",
+                              wiphy_name(hw->wiphy),
+                              mwl8k_cmd_name(cmd->code, buf, sizeof(buf)),
+                              ms);
        }
 
        return rc;