[PATCH v2] usb: dwc3: omap: fix race of pm runtime with irq handler in probe
Tony Lindgren
tony at atomide.com
Mon Dec 12 13:10:12 PST 2016
* Grygorii Strashko <grygorii.strashko at ti.com> [161212 11:38]:
> Now races can happen between interrupt handler execution and PM runtime in
> error handling code path in probe and in dwc3_omap_remove() which will lead
> to system crash:
>
> in probe:
> ...
> err1:
> pm_runtime_put_sync(dev);
> ^^ PM runtime can race with IRQ handler when deferred probing happening
> due to extcon
> pm_runtime_disable(dev);
>
> return ret;
>
> in dwc3_omap_remove:
> ...
> dwc3_omap_disable_irqs(omap);
> ^^ IRQs are disabled in HW, but handler may still run
> of_platform_depopulate(omap->dev);
> pm_runtime_put_sync(&pdev->dev);
> ^^ PM runtime can race with IRQ handler
> pm_runtime_disable(&pdev->dev);
>
> return 0;
>
> So, OMAP DWC3 IRQ need to be disabled before calling
> pm_runtime_put() in probe and in dwc3_omap_remove().
Acked-by: Tony Lindgren <tony at atomide.com>
More information about the linux-arm-kernel
mailing list