Commit f931c770 authored by Amitkumar Karwar's avatar Amitkumar Karwar Committed by John W. Linville

mwifiex: wake up main thread to handle Tx traffic if scan is delayed/aborted

This is a flaw in recently implemented logic to handle Tx traffic
and scan operation simultaneously. We missed to wakeup main thread
to handle Tx traffic if scan is delayed/aborted.

For some cards (SD8797, for example), firmware will send SLEEP event
if there is no activity for 50msec. While handling the SLEEP event,
main thread will be woken up and Tx packet gets sent hence. In worst
case Tx traffic will be delayed for 50msec.

For other cards, such as USB8797, firmware won't send SLEEP event.
So, Tx traffic gets stuck if no other event triggers the wakeup of
main thread.

This patch fixes above issues.
Signed-off-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0fd66be4
...@@ -103,6 +103,7 @@ static void scan_delay_timer_fn(unsigned long data) ...@@ -103,6 +103,7 @@ static void scan_delay_timer_fn(unsigned long data)
msecs_to_jiffies(MWIFIEX_SCAN_DELAY_MSEC)); msecs_to_jiffies(MWIFIEX_SCAN_DELAY_MSEC));
adapter->scan_delay_cnt++; adapter->scan_delay_cnt++;
} }
queue_work(priv->adapter->workqueue, &priv->adapter->main_work);
} else { } else {
/* /*
* Tx data queue is empty. Get scan command from scan_pending_q * Tx data queue is empty. Get scan command from scan_pending_q
......
...@@ -190,7 +190,8 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter) ...@@ -190,7 +190,8 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
adapter->tx_lock_flag) adapter->tx_lock_flag)
break; break;
if (adapter->scan_processing || adapter->data_sent || if ((adapter->scan_processing &&
!adapter->scan_delay_cnt) || adapter->data_sent ||
mwifiex_wmm_lists_empty(adapter)) { mwifiex_wmm_lists_empty(adapter)) {
if (adapter->cmd_sent || adapter->curr_cmd || if (adapter->cmd_sent || adapter->curr_cmd ||
(!is_command_pending(adapter))) (!is_command_pending(adapter)))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment