[PATCH] staging: imx/drm: request irq only after adding the crtc
Shawn Guo
shawn.guo at linaro.org
Tue Feb 19 21:57:01 EST 2013
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 <p.zabel at pengutronix.de>
Tested-by: Shawn Guo <shawn.guo at linaro.org>
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
>
More information about the linux-arm-kernel
mailing list