cnss2: use disable_irq_nosync for rome linkdown
When PCIE linkdown happen, IRQ handler will disable IRQ line then trigger SSR. disable_irq() is used but it introduce sleep in IRQ context(unexpected). Crash will happen if CONFIG_SCHED_WALT is set: android_rvh_schedule_bug+0x4/0x8 __might_sleep+0x50/0x84 synchronize_irq+0x48/0xc4 disable_irq+0x70/0x9c cnss_pci_handle_linkdown+0x1a8/0x1c0 [cnss2] cnss_pci_event_cb+0x148/0x348 [cnss2] msm_pcie_notify_client+0x110/0x180 msm_pcie_handle_linkdown+0x2d8/0x2f8 handle_global_irq+0x464/0x5dc To avoid this issue, should use disable_irq_nosync(), which doesn't wait IRQ handler to finish. It should introduce no side effect, as the whole device will be restated later by SSR. Change-Id: I5ec96d41337a14280333ab9fea0c1f6132a532af CRs-Fixed: 3548604
This commit is contained in:

committed by
Rahul Choudhary

parent
696ac36d11
commit
744c0f19d7
@@ -1567,7 +1567,7 @@ void cnss_pci_handle_linkdown(struct cnss_pci_data *pci_priv)
|
||||
}
|
||||
|
||||
if (pci_dev->device == QCA6174_DEVICE_ID)
|
||||
disable_irq(pci_dev->irq);
|
||||
disable_irq_nosync(pci_dev->irq);
|
||||
|
||||
/* Notify bus related event. Now for all supported chips.
|
||||
* Here PCIe LINK_DOWN notification taken care.
|
||||
|
Reference in New Issue
Block a user