aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmitkumar Karwar <akarwar@marvell.com>2013-12-23 17:15:13 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2014-01-05 17:20:15 -0500
commitfa9be5f009e8cfc695a2cd71617fc620ab5c1c18 (patch)
treebad68b5f41934abd1173136929ff3ee6d4f57d5b
parentc36aeba8c072d20a08e8546483494ab0f6458963 (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.c2
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