ath10k: kill tasklets after free_irq
Commit 5c771e7454
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: [<c1316fb0>] ioread32+0x30/0x40
...
Call Trace:
[<fe576c1b>] ath10k_pci_tasklet+0x1b/0x60 [ath10k_pci]
[<c1053fbe>] tasklet_action+0x9e/0xb0
[<c10534f1>] __do_softirq+0xf1/0x3f0
[<c1053400>] ? ftrace_raw_event_irq_handler_entry+0xa0/0xa0
[<c1004999>] do_softirq_own_stack+0x29/0x40
<IRQ>
[<c1053a76>] irq_exit+0x86/0xb0
...
[<c132d522>] do_pci_disable_device+0x52/0x60
[<c132d57f>] pci_disable_device+0x4f/0xb0
[<c132a961>] ? __pci_set_master+0x51/0x80
[<fe5740b3>] ath10k_pci_release+0x33/0x40 [ath10k_pci]
[<fe575d4b>] ath10k_pci_remove+0x7b/0x90 [ath10k_pci]
Reported-by: Kalle Valo <kvalo@qca.qualcomm.com>
Tested-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
a4841eb639
commit
2139627172
@ -2547,6 +2547,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
|||||||
|
|
||||||
err_free_irq:
|
err_free_irq:
|
||||||
ath10k_pci_free_irq(ar);
|
ath10k_pci_free_irq(ar);
|
||||||
|
ath10k_pci_kill_tasklet(ar);
|
||||||
|
|
||||||
err_deinit_irq:
|
err_deinit_irq:
|
||||||
ath10k_pci_deinit_irq(ar);
|
ath10k_pci_deinit_irq(ar);
|
||||||
@ -2583,6 +2584,7 @@ static void ath10k_pci_remove(struct pci_dev *pdev)
|
|||||||
|
|
||||||
ath10k_core_unregister(ar);
|
ath10k_core_unregister(ar);
|
||||||
ath10k_pci_free_irq(ar);
|
ath10k_pci_free_irq(ar);
|
||||||
|
ath10k_pci_kill_tasklet(ar);
|
||||||
ath10k_pci_deinit_irq(ar);
|
ath10k_pci_deinit_irq(ar);
|
||||||
ath10k_pci_ce_deinit(ar);
|
ath10k_pci_ce_deinit(ar);
|
||||||
ath10k_pci_free_ce(ar);
|
ath10k_pci_free_ce(ar);
|
||||||
|
Loading…
Reference in New Issue
Block a user