OMAP: Fix a BUG in l3 error handler.
With the current sequence of registering the irq and assigning it to the app_irq, debug_irq driver variables, there can be corner cases where the pending irq gets triggered immediately after registering, handler gets called resulting in a crash. So changed this sequence. Signed-off-by: sricharan <r.sricharan@ti.com> Signed-off-by: Todd Poynor <toddpoynor@google.com> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
This commit is contained in:
committed by
Santosh Shilimkar
parent
342fd14429
commit
c1df2dcc90
@@ -124,7 +124,7 @@ static int __init omap4_l3_probe(struct platform_device *pdev)
|
|||||||
{
|
{
|
||||||
static struct omap4_l3 *l3;
|
static struct omap4_l3 *l3;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
int ret, irq;
|
int ret;
|
||||||
|
|
||||||
l3 = kzalloc(sizeof(*l3), GFP_KERNEL);
|
l3 = kzalloc(sizeof(*l3), GFP_KERNEL);
|
||||||
if (!l3)
|
if (!l3)
|
||||||
@@ -176,8 +176,8 @@ static int __init omap4_l3_probe(struct platform_device *pdev)
|
|||||||
/*
|
/*
|
||||||
* Setup interrupt Handlers
|
* Setup interrupt Handlers
|
||||||
*/
|
*/
|
||||||
irq = platform_get_irq(pdev, 0);
|
l3->debug_irq = platform_get_irq(pdev, 0);
|
||||||
ret = request_irq(irq,
|
ret = request_irq(l3->debug_irq,
|
||||||
l3_interrupt_handler,
|
l3_interrupt_handler,
|
||||||
IRQF_DISABLED, "l3-dbg-irq", l3);
|
IRQF_DISABLED, "l3-dbg-irq", l3);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -185,10 +185,9 @@ static int __init omap4_l3_probe(struct platform_device *pdev)
|
|||||||
OMAP44XX_IRQ_L3_DBG);
|
OMAP44XX_IRQ_L3_DBG);
|
||||||
goto err3;
|
goto err3;
|
||||||
}
|
}
|
||||||
l3->debug_irq = irq;
|
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 1);
|
l3->app_irq = platform_get_irq(pdev, 1);
|
||||||
ret = request_irq(irq,
|
ret = request_irq(l3->app_irq,
|
||||||
l3_interrupt_handler,
|
l3_interrupt_handler,
|
||||||
IRQF_DISABLED, "l3-app-irq", l3);
|
IRQF_DISABLED, "l3-app-irq", l3);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -196,7 +195,6 @@ static int __init omap4_l3_probe(struct platform_device *pdev)
|
|||||||
OMAP44XX_IRQ_L3_APP);
|
OMAP44XX_IRQ_L3_APP);
|
||||||
goto err4;
|
goto err4;
|
||||||
}
|
}
|
||||||
l3->app_irq = irq;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user