#define MWIFIEX_EVENT_HEADER_LEN 4
+#define MWIFIEX_QUEUE_TIMEOUT_MSEC 5000
+
struct mwifiex_dbg {
u32 num_cmd_host_to_card_failure;
u32 num_cmd_sleep_cfm_host_to_card_failure;
bool cancel_flag = false;
int status;
struct cmd_ctrl_node *cmd_queued;
+ int ret;
if (!adapter->cmd_queued)
return 0;
atomic_inc(&adapter->cmd_pending);
/* Wait for completion */
- wait_event_interruptible(adapter->cmd_wait_q.wait,
- *(cmd_queued->condition));
+ ret = wait_event_interruptible_timeout(adapter->cmd_wait_q.wait,
+ *(cmd_queued->condition),
+ msecs_to_jiffies(MWIFIEX_QUEUE_TIMEOUT_MSEC));
+ if (ret == 0) {
+ WARN_ON(1);
+ /* Let's give waiting one more try, and then reboot */
+ ret = wait_event_interruptible_timeout(adapter->cmd_wait_q.wait,
+ *(cmd_queued->condition),
+ msecs_to_jiffies(MWIFIEX_QUEUE_TIMEOUT_MSEC));
+ BUG_ON(ret == 0);
+ }
+
if (!*(cmd_queued->condition))
cancel_flag = true;