2012/12/5 Inki Dae <inki....@samsung.com>

>
>
> 2012/12/5 Prathyush K <prathy...@chromium.org>
>
>>
>>
>>
>> On Wed, Dec 5, 2012 at 11:40 AM, Inki Dae <inki....@samsung.com> wrote:
>>
>>>
>>>
>>> 2012/12/5 Inki Dae <inki....@samsung.com>
>>>
>>>>
>>>>
>>>> 2012/12/5 Prathyush K <prathyus...@samsung.com>
>>>>
>>>>> This patchset fixes a few issues with use of wait for vblank in
>>>>> exynos drm.
>>>>>
>>>>> Please apply these three patches without "drm/exynos: release fb
>>>>> pended by page flip"
>>>>> patch.
>>>>>
>>>>> Patch 1: modify wait for vsync functions to use wait queues
>>>>> This modifies the wait_for_vblank functions to use wait queues
>>>>> thus ensuring that the current task goes to sleep without taking
>>>>> up CPU while waiting.
>>>>>
>>>>> Patch 2: move wait_for_vblank to manager_ops
>>>>> Currently, we do not call wait for vblank if encoder is in DPMS_OFF
>>>>> state inside exynos_drm_encoder_complete_scanout function. This is
>>>>> because wait for vblank is treated as an overlay op.
>>>>
>>>> This can be
>>>>> modified to a manager_op thus removing the above check for DPMS_OFF.
>>>>> This fixes a crash while removing a fb.
>>>>> While removing the current fb (crtc->fb == fb) the encoder
>>>>> dpms off is called and then the framebuffer is removed. So in
>>>>> this case, the wait for vblank is not called thus leading to a crash
>>>>> (since fb might get removed before dma is finished)
>>>>>
>>>>> Patch 3: do not disable crtc if already off
>>>>> We should not disable the overlay if the crtc is in DPMS_OFF state.
>>>>> Also, the disable function should not call DPMS_OFF of the crtc.
>>>>> This is required to ensure we are able to wait for vblank
>>>>> before freeing any framebuffers after disabling the crtc.
>>>>>
>>>>> With these three patches and without "drm/exynos: release fb pended by
>>>>> page flip"
>>>>> I could not find any crash/page_fault in drm with fimd/hdmi during
>>>>> hotplug
>>>>> and page flips.
>>>>>
>>>>>
>>>> It seems better than old one and also including some exception codes,
>>>> Patch 3 we did't consider. Ok, we will test these patches and merge them
>>>> instead of old one if no problem.
>>>>
>>>>
>>>
>>> Tested and worked fine. But with this patch and without "drm/exynos:
>>> release fb pended by page flip", we would still have potential issue to
>>> page fault like below,
>>> 1. dma is accessing no current fb
>>> 2. the fb to be released is not current fb so the fb would be released
>>> without disabling crtc when drm is released.
>>> 3. but the memory region to no current fb is being accessed by the dma
>>> so the page fault would be induced. This is a rare case but possible issue.
>>>
>>> Hi Mr. Dae,
>>
>> But we would not release the fb till we get a vblank (i.e. wait for
>> vblank is called before removing every framebuffer).
>>
>> Taking your example itself:
>>
>> fb0 is current fb i.e. (crtc->fb = fb0).
>>
>> But the dma is accessing from fb1.
>>
>> We call remove fb1.
>>
>> In this case, as you said, crtc will not be disabled as fb1 is not
>> current fb.
>>
>> But we wait for vblank before removing fb1. Thus we ensure that dma from
>> fb1 is complete and dma from fb0 has started.
>> So it is safe to remove fb1.
>>
>
> Please, see the below codes,
>
> drm_release()
>         drm_fb_release()
>                 drm_framebuffer_remove()
>                         /* assume that current fb is fb1 and dma is
> accessing fb0 but trying to release fb0 at here */
>                         /* this situation could be reproduced with
> pageflip test. */
>                         fb0 is not crtc->fb so the crtc isn't disabled
>                         ...
>                         drm_framebuffer_unreference(fb0);  <- fb0 will be
> released without wait_for_vblank().
>
> The wait_for_vblank() is called by exynos_drm_encoder_complete_scanout()
> when fb->func->destroy() is called so the wait_for_vblank() will be called
> after fb0 is released.
> Is there another place that wait_for_vblank() is called?
>
>
Ah, sorry~. exynos_drm_encoder_completescanout() is called prior to gem
releasing. Right, no problem. :)

Thanks,
Inki Dae



> Thanks,
> Inki Dae
>
>
>> Hope I correctly understood the issue you mentioned.
>>
>>
>>
>>> Anyway I removed the patch, "drm/exynos: release fb pended by page
>>> flip". And I hope this issue can be resolved by Daniel's fixup later.
>>>
>>> And I think it's better to separate your patch set into 4 patches like
>>> below,
>>> 1. the patch including only exynos drm framework part.
>>> 2. the patch including only fimd driver part.
>>> 3. the patch including only hdmi driver part.
>>> 4. the patch including exception code.(previous Patch 3)
>>>
>>> Please, re-send them.
>>>
>>> Sure. I'll post them again as requested.
>>
>> Regards,
>> Prathyush
>>
>>
>>
>>> Thanks,
>>> Inki Dae
>>>
>>>  Thanks,
>>>> Inki Dae
>>>>
>>>>
>>>>> Prathyush K (3)
>>>>>   drm/exynos: modify wait for vsync functions to use wait queues
>>>>>   drm/exynos: move wait_for_vblank to manager_ops
>>>>>   drm/exynos: do not disable crtc if already off
>>>>>
>>>>>  drivers/gpu/drm/exynos/exynos_drm_crtc.c    |    6 +++-
>>>>>  drivers/gpu/drm/exynos/exynos_drm_drv.h     |   20 ++------------
>>>>>  drivers/gpu/drm/exynos/exynos_drm_encoder.c |   15 +++--------
>>>>>  drivers/gpu/drm/exynos/exynos_drm_fimd.c    |   37
>>>>> ++++++++++++++++++--------
>>>>>  drivers/gpu/drm/exynos/exynos_drm_hdmi.c    |   22 ++++++++--------
>>>>>  drivers/gpu/drm/exynos/exynos_drm_hdmi.h    |    2 +-
>>>>>  drivers/gpu/drm/exynos/exynos_mixer.c       |   37
>>>>> +++++++++++++++++---------
>>>>>  7 files changed, 73 insertions(+), 66 deletions(-)
>>>>>
>>>>> _______________________________________________
>>>>> dri-devel mailing list
>>>>> dri-devel@lists.freedesktop.org
>>>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel@lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>>
>>>
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>
>>
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to