[PATCH] drm/exynos: fixed a issue that plane isn't disabled when released
InKi Dae
inki.dae at samsung.com
Fri Aug 24 09:49:49 PDT 2012
2012/8/24 Paul Menzel <paulepanter at users.sourceforge.net>:
> 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?
>
Thank you for your advice. acutally, I missed some sentences for
describing this patch so I will send it again.
Thanks,
Inki Dae
>> Signed-off-by: Inki Dae <inki.dae at samsung.com>
>> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
>> ---
>> 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
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
More information about the dri-devel
mailing list