[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