diff options
author | Amitkumar Karwar <akarwar@marvell.com> | 2013-12-23 17:15:13 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2014-01-05 17:20:15 -0500 |
commit | fa9be5f009e8cfc695a2cd71617fc620ab5c1c18 (patch) | |
tree | bad68b5f41934abd1173136929ff3ee6d4f57d5b | |
parent | c36aeba8c072d20a08e8546483494ab0f6458963 (diff) |
NFC: NCI: Cancel cmd_timer in nci_close_device()
nci_close_device() sends nci reset command to the device.
If there is no response for this command, nci request timeout
occurs first and then cmd timeout happens. Because command
timer has started after sending the command.
We are immediately flushing command workqueue after nci
timeout. Later we will try to schedule cmd_work in command
timer which leads to a crash.
Cancel cmd_timer before flushing the workqueue to fix the
problem.
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r-- | net/nfc/nci/core.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index f0e955e3a385..0a2ee83c3bd3 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c | |||
@@ -361,6 +361,8 @@ static int nci_close_device(struct nci_dev *ndev) | |||
361 | msecs_to_jiffies(NCI_RESET_TIMEOUT)); | 361 | msecs_to_jiffies(NCI_RESET_TIMEOUT)); |
362 | clear_bit(NCI_INIT, &ndev->flags); | 362 | clear_bit(NCI_INIT, &ndev->flags); |
363 | 363 | ||
364 | del_timer_sync(&ndev->cmd_timer); | ||
365 | |||
364 | /* Flush cmd wq */ | 366 | /* Flush cmd wq */ |
365 | flush_workqueue(ndev->cmd_wq); | 367 | flush_workqueue(ndev->cmd_wq); |
366 | 368 | ||