Message ID | 20170707062252.10086-1-vigneshr@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 07/07/2017 01:22 AM, Vignesh R wrote: > IRQ_NOAUTOEN cannot be used with shared IRQs, since commit 04c848d39879 > ("genirq: Warn when IRQ_NOAUTOEN is used with shared interrupts") and > kernel now throws a warn dump. But OMAP DWC3 driver uses this flag. As > per commit 12a7f17fac5b ("usb: dwc3: omap: fix race of pm runtime with > irq handler in probe") that introduced this flag, PM runtime can race > with IRQ handler when deferred probing happens due to extcon, > therefore IRQ_NOAUTOEN needs to be set so that irq is not enabled until > extcon is registered. > > Remove setting of IRQ_NOAUTOEN and move the registration of > shared irq to a point after dwc3_omap_extcon_register() and > of_platform_populate(). This avoids possibility of probe deferring and > above said race condition. > > Signed-off-by: Vignesh R <vigneshr@ti.com> Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com> > --- > drivers/usb/dwc3/dwc3-omap.c | 18 ++++++++---------- > 1 file changed, 8 insertions(+), 10 deletions(-) > > diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c > index 98926504b55b..f5aaa0cf3873 100644 > --- a/drivers/usb/dwc3/dwc3-omap.c > +++ b/drivers/usb/dwc3/dwc3-omap.c > @@ -512,15 +512,6 @@ static int dwc3_omap_probe(struct platform_device *pdev) > > /* check the DMA Status */ > reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG); > - irq_set_status_flags(omap->irq, IRQ_NOAUTOEN); > - ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt, > - dwc3_omap_interrupt_thread, IRQF_SHARED, > - "dwc3-omap", omap); > - if (ret) { > - dev_err(dev, "failed to request IRQ #%d --> %d\n", > - omap->irq, ret); > - goto err1; > - } > > ret = dwc3_omap_extcon_register(omap); > if (ret < 0) > @@ -532,8 +523,15 @@ static int dwc3_omap_probe(struct platform_device *pdev) > goto err1; > } > > + ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt, > + dwc3_omap_interrupt_thread, IRQF_SHARED, > + "dwc3-omap", omap); > + if (ret) { > + dev_err(dev, "failed to request IRQ #%d --> %d\n", > + omap->irq, ret); > + goto err1; > + } > dwc3_omap_enable_irqs(omap); > - enable_irq(omap->irq); > return 0; > > err1: >
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c index 98926504b55b..f5aaa0cf3873 100644 --- a/drivers/usb/dwc3/dwc3-omap.c +++ b/drivers/usb/dwc3/dwc3-omap.c @@ -512,15 +512,6 @@ static int dwc3_omap_probe(struct platform_device *pdev) /* check the DMA Status */ reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG); - irq_set_status_flags(omap->irq, IRQ_NOAUTOEN); - ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt, - dwc3_omap_interrupt_thread, IRQF_SHARED, - "dwc3-omap", omap); - if (ret) { - dev_err(dev, "failed to request IRQ #%d --> %d\n", - omap->irq, ret); - goto err1; - } ret = dwc3_omap_extcon_register(omap); if (ret < 0) @@ -532,8 +523,15 @@ static int dwc3_omap_probe(struct platform_device *pdev) goto err1; } + ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt, + dwc3_omap_interrupt_thread, IRQF_SHARED, + "dwc3-omap", omap); + if (ret) { + dev_err(dev, "failed to request IRQ #%d --> %d\n", + omap->irq, ret); + goto err1; + } dwc3_omap_enable_irqs(omap); - enable_irq(omap->irq); return 0; err1:
IRQ_NOAUTOEN cannot be used with shared IRQs, since commit 04c848d39879 ("genirq: Warn when IRQ_NOAUTOEN is used with shared interrupts") and kernel now throws a warn dump. But OMAP DWC3 driver uses this flag. As per commit 12a7f17fac5b ("usb: dwc3: omap: fix race of pm runtime with irq handler in probe") that introduced this flag, PM runtime can race with IRQ handler when deferred probing happens due to extcon, therefore IRQ_NOAUTOEN needs to be set so that irq is not enabled until extcon is registered. Remove setting of IRQ_NOAUTOEN and move the registration of shared irq to a point after dwc3_omap_extcon_register() and of_platform_populate(). This avoids possibility of probe deferring and above said race condition. Signed-off-by: Vignesh R <vigneshr@ti.com> --- drivers/usb/dwc3/dwc3-omap.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)