Messages in this thread | | | Date | Wed, 1 Jul 2015 09:30:00 +0100 | From | Lee Jones <> | Subject | Re: [tip:irq/urgent] mfd/asic3: Fix race in installing chained IRQ handler |
| |
On Fri, 26 Jun 2015, tip-bot for Thomas Gleixner wrote:
> Commit-ID: c30e30478c74e5be2fa3bbe954084a31f0d60570 > Gitweb: http://git.kernel.org/tip/c30e30478c74e5be2fa3bbe954084a31f0d60570 > Author: Thomas Gleixner <tglx@linutronix.de> > AuthorDate: Sun, 21 Jun 2015 20:16:06 +0200 > Committer: Thomas Gleixner <tglx@linutronix.de> > CommitDate: Thu, 25 Jun 2015 11:56:52 +0200 > > mfd/asic3: Fix race in installing chained IRQ handler > > Fix a race where a pending interrupt could be received and the handler > called before the handler's data has been setup, by converting to > irq_set_chained_handler_and_data(). > > Search and conversion was done with coccinelle: > > @@ > expression E1, E2, E3; > @@ > ( > -if (irq_set_chained_handler(E1, E3) != 0) > - BUG(); > | > -irq_set_chained_handler(E1, E3); > ) > -irq_set_handler_data(E1, E2); > +irq_set_chained_handler_and_data(E1, E3, E2); > > @@ > expression E1, E2, E3; > @@ > ( > -if (irq_set_chained_handler(E1, E3) != 0) > - BUG(); > ... > | > -irq_set_chained_handler(E1, E3); > ... > ) > -irq_set_handler_data(E1, E2); > +irq_set_chained_handler_and_data(E1, E3, E2); > > Reported-by: Russell King <rmk+kernel@arm.linux.org.uk> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Julia Lawall <Julia.Lawall@lip6.fr> > Cc: Samuel Ortiz <sameo@linux.intel.com> > Cc: Lee Jones <lee.jones@linaro.org> > --- > drivers/mfd/asic3.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-)
Applied to MFD -fixes.
> diff --git a/drivers/mfd/asic3.c b/drivers/mfd/asic3.c > index 977bd3a..120df5c 100644 > --- a/drivers/mfd/asic3.c > +++ b/drivers/mfd/asic3.c > @@ -417,9 +417,8 @@ static int __init asic3_irq_probe(struct platform_device *pdev) > asic3_write_register(asic, ASIC3_OFFSET(INTR, INT_MASK), > ASIC3_INTMASK_GINTMASK); > > - irq_set_chained_handler(asic->irq_nr, asic3_irq_demux); > + irq_set_chained_handler_and_data(asic->irq_nr, asic3_irq_demux, asic); > irq_set_irq_type(asic->irq_nr, IRQ_TYPE_EDGE_RISING); > - irq_set_handler_data(asic->irq_nr, asic); > > return 0; > }
-- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
| |