On Tue, Feb 19, 2013 at 03:35:59PM +0100, Philipp Zabel wrote:
> If the bootloader already enabled the display, the interrupt handler
> will be called as soon as it is registered. If the CRTC is not already
> added at this time, the call to imx_drm_handle_vblank will result in
> a NULL pointer dereference.
> 
> Signed-off-by: Philipp Zabel <[email protected]>

Tested-by: Shawn Guo <[email protected]>

Greg,

The patch fixes a kernel panic [1], which has been on linux-next since
Jan 8 [2].  Can you please apply it if it looks good to you?

Shawn

[1] http://thread.gmane.org/gmane.linux.ports.arm.kernel/218858
[2] http://thread.gmane.org/gmane.linux.ports.arm.kernel/208192

> ---
>  drivers/staging/imx-drm/ipuv3-crtc.c |   23 ++++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c 
> b/drivers/staging/imx-drm/ipuv3-crtc.c
> index 1892006..d454a16 100644
> --- a/drivers/staging/imx-drm/ipuv3-crtc.c
> +++ b/drivers/staging/imx-drm/ipuv3-crtc.c
> @@ -483,17 +483,6 @@ static int ipu_get_resources(struct ipu_crtc *ipu_crtc,
>               goto err_out;
>       }
>  
> -     ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch,
> -                     IPU_IRQ_EOF);
> -     ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0,
> -                     "imx_drm", ipu_crtc);
> -     if (ret < 0) {
> -             dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret);
> -             goto err_out;
> -     }
> -
> -     disable_irq(ipu_crtc->irq);
> -
>       return 0;
>  err_out:
>       ipu_put_resources(ipu_crtc);
> @@ -504,6 +493,7 @@ err_out:
>  static int ipu_crtc_init(struct ipu_crtc *ipu_crtc,
>               struct ipu_client_platformdata *pdata)
>  {
> +     struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent);
>       int ret;
>  
>       ret = ipu_get_resources(ipu_crtc, pdata);
> @@ -522,6 +512,17 @@ static int ipu_crtc_init(struct ipu_crtc *ipu_crtc,
>               goto err_put_resources;
>       }
>  
> +     ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch,
> +                     IPU_IRQ_EOF);
> +     ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0,
> +                     "imx_drm", ipu_crtc);
> +     if (ret < 0) {
> +             dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret);
> +             goto err_put_resources;
> +     }
> +
> +     disable_irq(ipu_crtc->irq);
> +
>       return 0;
>  
>  err_put_resources:
> -- 
> 1.7.10.4
> 

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to