mwifiex: skipping pending commands after unload
authorAmitkumar Karwar <akarwar@marvell.com>
Fri, 28 Feb 2014 03:35:16 +0000 (19:35 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 28 Feb 2014 19:33:42 +0000 (14:33 -0500)
We skip downloading other commands after FUNC_SHUTDOWN is queued
during driver unload. Main thread should be woken up each time
after freeing skipped command so that FUNC_SHUTDOWN gets served
in case if there are other pending commands before FUNC_SHUTDOWN.
Also, call mwifiex_complete_cmd() only for synchronous commands.

Reported-by: Avery Pennarun <apenwarr@gmail.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Maithili Hinge <maithili@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/cmdevt.c

index 58cf3a98f1f74ed19117fa9dbd64581e6bf7db04..0958764d2baee7f1b308d487bdc0f4a55faedf78 100644 (file)
@@ -165,8 +165,10 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
                dev_err(adapter->dev,
                        "DNLD_CMD: FW in reset state, ignore cmd %#x\n",
                        cmd_code);
-               mwifiex_complete_cmd(adapter, cmd_node);
+               if (cmd_node->wait_q_enabled)
+                       mwifiex_complete_cmd(adapter, cmd_node);
                mwifiex_recycle_cmd_node(adapter, cmd_node);
+               queue_work(adapter->workqueue, &adapter->main_work);
                return -1;
        }