Re: [PATCH] drm/exynos: fixed a issue that plane isn't disabled when released

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

 



Dear Inki,


Am Freitag, den 24.08.2012, 18:27 +0900 schrieb Inki Dae:

You can shorten the commit summary by leaving out the word issue, which
is redundant. Maybe one of the following? I do not understand the
process of releasing so it might be wrong.

        drm/exynos: Disable plane after release
        drm/exynos: Disable plane when being released
        drm/exynos: Fix disabling of plane when released

> when drm is released, drm framebuffers are released and all crtcs using
> same framebuffer and also all gem buffers used but plane isn't disabled
> so when crtc and encoder are turned on, overlay can access to invalid memory
> because plane still has memory address released already.
> this patch makes sure that each plane is disabled when released.

Please use sentences to make it easier to understand.

Also describe the solution. Maybe something like this.

        This patch ensures that each plane is disabled when released, by
        adding a new function and adding that to the helper functions.

Is there a report for that issue? Did you experience it in your setup?
Is this tested?

> Signed-off-by: Inki Dae <inki.dae@xxxxxxxxxxx>
> Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_encoder.c |   15 +++++++++++++++
>  1 files changed, 15 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_encoder.c b/drivers/gpu/drm/exynos/exynos_drm_encoder.c
> index 92f9acf..96a10c3 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_encoder.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_encoder.c
> @@ -214,12 +214,27 @@ static void exynos_drm_encoder_commit(struct drm_encoder *encoder)
>  		manager_ops->commit(manager->dev);
>  }
>  
> +static void exynos_drm_encoder_disable(struct drm_encoder *encoder)
> +{
> +	struct drm_plane *plane;
> +	struct drm_device *dev = encoder->dev;
> +
> +	exynos_drm_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
> +
> +	/* all planes connected to this encoder should be also disabled. */
> +	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> +		if (plane->crtc == encoder->crtc)
> +			plane->funcs->disable_plane(plane);
> +	}
> +}
> +
>  static struct drm_encoder_helper_funcs exynos_encoder_helper_funcs = {
>  	.dpms		= exynos_drm_encoder_dpms,
>  	.mode_fixup	= exynos_drm_encoder_mode_fixup,
>  	.mode_set	= exynos_drm_encoder_mode_set,
>  	.prepare	= exynos_drm_encoder_prepare,
>  	.commit		= exynos_drm_encoder_commit,
> +	.disable	= exynos_drm_encoder_disable,
>  };
>  
>  static void exynos_drm_encoder_destroy(struct drm_encoder *encoder)


Thanks,

Paul

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux