diff options
author | Amitkumar Karwar <akarwar@marvell.com> | 2012-06-07 00:12:41 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-06-11 14:59:43 -0400 |
commit | 3249ba7376caa93af387d8e6b5e41b290934f88c (patch) | |
tree | 7c4c762095bbb0e77261b9b1399d688aea04eeb4 /drivers/net/wireless/mwifiex/main.c | |
parent | 38e8b7d977786b0059c02744e4b96bc1e206d891 (diff) |
mwifiex: fix simultaneous scan and Tx traffic problem
If scan operation is started when Tx traffic is already running,
driver locks Tx queue until it gets completed. With this logic
there is a delay for Tx packets.
This patch implements new approach to give Tx path higher priority
in this case. Driver internally sends multiple synchronous scan
commands to firmware when scan is requested by user. Now we will
make sure that Tx queue is empty everytime before sending next scan
command. If Tx queue isn't empty scan command will be postponsed by
20msec. This rule will be followed until Tx queue becomes empty or
timeout of 1 second happens. In case of timeout scan operation will
be aborted.
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/mwifiex/main.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/main.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c index 3192855c31c0..0f06f07a70e6 100644 --- a/drivers/net/wireless/mwifiex/main.c +++ b/drivers/net/wireless/mwifiex/main.c | |||
@@ -244,8 +244,8 @@ process_start: | |||
244 | } | 244 | } |
245 | } | 245 | } |
246 | 246 | ||
247 | if (!adapter->scan_processing && !adapter->data_sent && | 247 | if ((!adapter->scan_processing || adapter->scan_delay_cnt) && |
248 | !mwifiex_wmm_lists_empty(adapter)) { | 248 | !adapter->data_sent && !mwifiex_wmm_lists_empty(adapter)) { |
249 | mwifiex_wmm_process_tx(adapter); | 249 | mwifiex_wmm_process_tx(adapter); |
250 | if (adapter->hs_activated) { | 250 | if (adapter->hs_activated) { |
251 | adapter->is_hs_configured = false; | 251 | adapter->is_hs_configured = false; |