Hi Thomas, 2017-06-30 6:33 GMT+09:00 Thomas Gleixner <[email protected]>: > The irq chip callbacks irq_request/release_resources() have absolutely no > business with masking and unmasking the irq. > > The core code unmasks the interrupt after complete setup and masks it > before invoking irq_release_resources(). > > The unmask is actually harmful as it happens before the interrupt is > completely initialized in __setup_irq(). > > Remove it.
Good catch, thanks! (Note that the original patch of mine [1] did that in .irq_startup()/.irq_shutdown(), which was for some reason changed later, but I don't remember the exact story.) [1] https://patchwork.kernel.org/patch/4466431/ Acked-by: Tomasz Figa <[email protected]> Sylwester, Krzysztof, would you be able to do some basic test? Best regards, Tomasz > > Fixes: f6a8249f9e55 ("pinctrl: exynos: Lock GPIOs as interrupts when used as > EINTs") > Signed-off-by: Thomas Gleixner <[email protected]> > Cc: Tomasz Figa <[email protected]> > Cc: Krzysztof Kozlowski <[email protected]> > Cc: Sylwester Nawrocki <[email protected]> > Cc: Linus Walleij <[email protected]> > Cc: Kukjin Kim <[email protected]> > Cc: [email protected] > Cc: [email protected] > Cc: [email protected] > --- > drivers/pinctrl/samsung/pinctrl-exynos.c | 4 ---- > 1 file changed, 4 deletions(-) > > --- a/drivers/pinctrl/samsung/pinctrl-exynos.c > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c > @@ -205,8 +205,6 @@ static int exynos_irq_request_resources( > > spin_unlock_irqrestore(&bank->slock, flags); > > - exynos_irq_unmask(irqd); > - > return 0; > } > > @@ -226,8 +224,6 @@ static void exynos_irq_release_resources > shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC]; > mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1; > > - exynos_irq_mask(irqd); > - > spin_lock_irqsave(&bank->slock, flags); > > con = readl(bank->eint_base + reg_con); > >

