From 2139627172429baee9d62696c6923ce5dc7052bc Mon Sep 17 00:00:00 2001 From: Michal Kazior Date: Thu, 28 Aug 2014 10:24:40 +0200 Subject: [PATCH] ath10k: kill tasklets after free_irq Commit 5c771e7454d148af35e8b4297d00f880de79ea49 introduced a regression. On some systems spurious interrupts could schedule a tasklet while tearing down leading to, e.g.: BUG: unable to handle kernel paging request at fe589030 IP: [] ioread32+0x30/0x40 ... Call Trace: [] ath10k_pci_tasklet+0x1b/0x60 [ath10k_pci] [] tasklet_action+0x9e/0xb0 [] __do_softirq+0xf1/0x3f0 [] ? ftrace_raw_event_irq_handler_entry+0xa0/0xa0 [] do_softirq_own_stack+0x29/0x40 [] irq_exit+0x86/0xb0 ... [] do_pci_disable_device+0x52/0x60 [] pci_disable_device+0x4f/0xb0 [] ? __pci_set_master+0x51/0x80 [] ath10k_pci_release+0x33/0x40 [ath10k_pci] [] ath10k_pci_remove+0x7b/0x90 [ath10k_pci] Reported-by: Kalle Valo Tested-by: Kalle Valo Signed-off-by: Michal Kazior Signed-off-by: Kalle Valo --- drivers/net/wireless/ath/ath10k/pci.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index 6abe9394e8d7..3c7abca0156e 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -2547,6 +2547,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev, err_free_irq: ath10k_pci_free_irq(ar); + ath10k_pci_kill_tasklet(ar); err_deinit_irq: ath10k_pci_deinit_irq(ar); @@ -2583,6 +2584,7 @@ static void ath10k_pci_remove(struct pci_dev *pdev) ath10k_core_unregister(ar); ath10k_pci_free_irq(ar); + ath10k_pci_kill_tasklet(ar); ath10k_pci_deinit_irq(ar); ath10k_pci_ce_deinit(ar); ath10k_pci_free_ce(ar); -- 2.30.2