Message ID | 20200324132353.21785-1-hslester96@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | [v4] video: fbdev: arcfb: add missed free_irq and fix the order of request_irq | expand |
On 3/24/20 2:23 PM, Chuhong Yuan wrote: > The driver forgets to free irq in remove which is requested in > probe. > Add the missed call to fix it. > Also, the position of request_irq() in probe should be put before > register_framebuffer(). > > Signed-off-by: Chuhong Yuan <hslester96@gmail.com> Patch queued for v5.8, thanks. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics > --- > Changes in v4: > - Use info->par->irq instead of par->irq to avoid dereferencing NULL pointer. > > drivers/video/fbdev/arcfb.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/video/fbdev/arcfb.c b/drivers/video/fbdev/arcfb.c > index 314ab82e01c0..6f7838979f0a 100644 > --- a/drivers/video/fbdev/arcfb.c > +++ b/drivers/video/fbdev/arcfb.c > @@ -544,10 +544,6 @@ static int arcfb_probe(struct platform_device *dev) > par->cslut[1] = 0x06; > info->flags = FBINFO_FLAG_DEFAULT; > spin_lock_init(&par->lock); > - retval = register_framebuffer(info); > - if (retval < 0) > - goto err1; > - platform_set_drvdata(dev, info); > if (irq) { > par->irq = irq; > if (request_irq(par->irq, &arcfb_interrupt, IRQF_SHARED, > @@ -558,6 +554,10 @@ static int arcfb_probe(struct platform_device *dev) > goto err1; > } > } > + retval = register_framebuffer(info); > + if (retval < 0) > + goto err1; > + platform_set_drvdata(dev, info); > fb_info(info, "Arc frame buffer device, using %dK of video memory\n", > videomemorysize >> 10); > > @@ -593,6 +593,8 @@ static int arcfb_remove(struct platform_device *dev) > > if (info) { > unregister_framebuffer(info); > + if (irq) > + free_irq(((struct arcfb_par *)(info->par))->irq, info); > vfree((void __force *)info->screen_base); > framebuffer_release(info); > } >
diff --git a/drivers/video/fbdev/arcfb.c b/drivers/video/fbdev/arcfb.c index 314ab82e01c0..6f7838979f0a 100644 --- a/drivers/video/fbdev/arcfb.c +++ b/drivers/video/fbdev/arcfb.c @@ -544,10 +544,6 @@ static int arcfb_probe(struct platform_device *dev) par->cslut[1] = 0x06; info->flags = FBINFO_FLAG_DEFAULT; spin_lock_init(&par->lock); - retval = register_framebuffer(info); - if (retval < 0) - goto err1; - platform_set_drvdata(dev, info); if (irq) { par->irq = irq; if (request_irq(par->irq, &arcfb_interrupt, IRQF_SHARED, @@ -558,6 +554,10 @@ static int arcfb_probe(struct platform_device *dev) goto err1; } } + retval = register_framebuffer(info); + if (retval < 0) + goto err1; + platform_set_drvdata(dev, info); fb_info(info, "Arc frame buffer device, using %dK of video memory\n", videomemorysize >> 10); @@ -593,6 +593,8 @@ static int arcfb_remove(struct platform_device *dev) if (info) { unregister_framebuffer(info); + if (irq) + free_irq(((struct arcfb_par *)(info->par))->irq, info); vfree((void __force *)info->screen_base); framebuffer_release(info); }
The driver forgets to free irq in remove which is requested in probe. Add the missed call to fix it. Also, the position of request_irq() in probe should be put before register_framebuffer(). Signed-off-by: Chuhong Yuan <hslester96@gmail.com> --- Changes in v4: - Use info->par->irq instead of par->irq to avoid dereferencing NULL pointer. drivers/video/fbdev/arcfb.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)