|
John W. Linville |
2e7bab3 |
From 51e708c1049e721b9c5c48d026bc97ca8497d39a Mon Sep 17 00:00:00 2001
|
|
John W. Linville |
2e7bab3 |
From: Yogesh Ashok Powar <yogeshp@marvell.com>
|
|
John W. Linville |
2e7bab3 |
Date: Tue, 13 Dec 2011 20:43:16 -0800
|
|
John W. Linville |
2e7bab3 |
Subject: [PATCH 04/10] mwifiex: avoid double list_del in command cancel path
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
Command cancel path cancels the current command and moves
|
|
John W. Linville |
2e7bab3 |
it to free command queue. While doing that it deletes the
|
|
John W. Linville |
2e7bab3 |
command entry from the pending list. This is not correct
|
|
John W. Linville |
2e7bab3 |
as the entry has been already deleted from the pending
|
|
John W. Linville |
2e7bab3 |
list at 'mwifiex_exec_next_cmd'. Fixing it.
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
Also making sure the stale command pointer is cleaned and
|
|
John W. Linville |
2e7bab3 |
unaccessible for later use.
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
|
|
John W. Linville |
2e7bab3 |
Signed-off-by: Bing Zhao <bzhao@marvell.com>
|
|
John W. Linville |
2e7bab3 |
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
John W. Linville |
2e7bab3 |
---
|
|
John W. Linville |
2e7bab3 |
drivers/net/wireless/mwifiex/cmdevt.c | 9 ++-------
|
|
John W. Linville |
2e7bab3 |
1 files changed, 2 insertions(+), 7 deletions(-)
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
|
|
John W. Linville |
2e7bab3 |
index ac27815..6e0a3ea 100644
|
|
John W. Linville |
2e7bab3 |
--- a/drivers/net/wireless/mwifiex/cmdevt.c
|
|
John W. Linville |
2e7bab3 |
+++ b/drivers/net/wireless/mwifiex/cmdevt.c
|
|
John W. Linville |
2e7bab3 |
@@ -939,7 +939,6 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
|
|
John W. Linville |
2e7bab3 |
{
|
|
John W. Linville |
2e7bab3 |
struct cmd_ctrl_node *cmd_node = NULL, *tmp_node = NULL;
|
|
John W. Linville |
2e7bab3 |
unsigned long cmd_flags;
|
|
John W. Linville |
2e7bab3 |
- unsigned long cmd_pending_q_flags;
|
|
John W. Linville |
2e7bab3 |
unsigned long scan_pending_q_flags;
|
|
John W. Linville |
2e7bab3 |
uint16_t cancel_scan_cmd = false;
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
@@ -949,12 +948,9 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
|
|
John W. Linville |
2e7bab3 |
cmd_node = adapter->curr_cmd;
|
|
John W. Linville |
2e7bab3 |
cmd_node->wait_q_enabled = false;
|
|
John W. Linville |
2e7bab3 |
cmd_node->cmd_flag |= CMD_F_CANCELED;
|
|
John W. Linville |
2e7bab3 |
- spin_lock_irqsave(&adapter->cmd_pending_q_lock,
|
|
John W. Linville |
2e7bab3 |
- cmd_pending_q_flags);
|
|
John W. Linville |
2e7bab3 |
- list_del(&cmd_node->list);
|
|
John W. Linville |
2e7bab3 |
- spin_unlock_irqrestore(&adapter->cmd_pending_q_lock,
|
|
John W. Linville |
2e7bab3 |
- cmd_pending_q_flags);
|
|
John W. Linville |
2e7bab3 |
mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
|
|
John W. Linville |
2e7bab3 |
+ mwifiex_complete_cmd(adapter, adapter->curr_cmd);
|
|
John W. Linville |
2e7bab3 |
+ adapter->curr_cmd = NULL;
|
|
John W. Linville |
2e7bab3 |
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
|
|
John W. Linville |
2e7bab3 |
}
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
@@ -981,7 +977,6 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
|
|
John W. Linville |
2e7bab3 |
spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
|
|
John W. Linville |
2e7bab3 |
}
|
|
John W. Linville |
2e7bab3 |
adapter->cmd_wait_q.status = -1;
|
|
John W. Linville |
2e7bab3 |
- mwifiex_complete_cmd(adapter, adapter->curr_cmd);
|
|
John W. Linville |
2e7bab3 |
}
|
|
John W. Linville |
2e7bab3 |
|
|
John W. Linville |
2e7bab3 |
/*
|
|
John W. Linville |
2e7bab3 |
--
|
|
John W. Linville |
2e7bab3 |
1.7.4.4
|
|
John W. Linville |
2e7bab3 |
|