Re: Fw: [PATCH] Corrected Oops on omap_vout when no manager is connected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Sep 15, 2012 at 9:36 PM, Mauro Carvalho Chehab
<mchehab@xxxxxxxxxx> wrote:
> Prabhakar,
>
> Please review.
>
> Thanks!
> Mauro
>
> Forwarded message:
>
> Date: Fri, 24 Aug 2012 17:54:11 +0200
> From: Federico Fuga <fuga@xxxxxxxxxxxxxx>
> To: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx>
> Cc: linux-media@xxxxxxxxxxxxxxx, Federico Fuga <fuga@xxxxxxxxxxxxxx>
> Subject: [PATCH] Corrected Oops on omap_vout when no manager is connected
>
>
> If no manager is connected to the vout device, the omapvid_init() function
> fails. No error condition is checked, and the device is started. Later on,
> when irq is serviced, a NULL pointer dereference occurs.
> Also, the isr routine must be registered only if no error occurs, otherwise
> the isr triggers without the proper setup, and the kernel oops again.
> To prevent this, the error condition is checked, and the streamon function
> exits with error. Also the isr registration call is moved after the setup
> procedure is completed.

Reviewed-by: Prabhakar Lad <prabhakar.lad@xxxxxx>

Regards,
--Prabhakar

> ---
>  drivers/media/video/omap/omap_vout.c |   14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/video/omap/omap_vout.c b/drivers/media/video/omap/omap_vout.c
> index 15c5f4d..f456587 100644
> --- a/drivers/media/video/omap/omap_vout.c
> +++ b/drivers/media/video/omap/omap_vout.c
> @@ -650,9 +650,12 @@ static void omap_vout_isr(void *arg, unsigned int irqstatus)
>
>         /* First save the configuration in ovelray structure */
>         ret = omapvid_init(vout, addr);
> -       if (ret)
> +       if (ret) {
>                 printk(KERN_ERR VOUT_NAME
>                         "failed to set overlay info\n");
> +               goto vout_isr_err;
> +       }
> +
>         /* Enable the pipeline and set the Go bit */
>         ret = omapvid_apply_changes(vout);
>         if (ret)
> @@ -1678,13 +1681,16 @@ static int vidioc_streamon(struct file *file, void *fh, enum v4l2_buf_type i)
>         mask = DISPC_IRQ_VSYNC | DISPC_IRQ_EVSYNC_EVEN | DISPC_IRQ_EVSYNC_ODD
>                 | DISPC_IRQ_VSYNC2;
>
> -       omap_dispc_register_isr(omap_vout_isr, vout, mask);
> -
>         /* First save the configuration in ovelray structure */
>         ret = omapvid_init(vout, addr);
> -       if (ret)
> +       if (ret) {
>                 v4l2_err(&vout->vid_dev->v4l2_dev,
>                                 "failed to set overlay info\n");
> +               goto streamon_err1;
> +       }
> +
> +       omap_dispc_register_isr(omap_vout_isr, vout, mask);
> +
>         /* Enable the pipeline and set the Go bit */
>         ret = omapvid_apply_changes(vout);
>         if (ret)
> --
> 1.7.9.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>
> --
> Regards,
> Mauro
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux