[PATCH 1/2] Revert "drm/core: Preserve the fb id on close."
David Herrmann
dh.herrmann at gmail.com
Fri Oct 2 04:49:08 PDT 2015
Hi
On Fri, Oct 2, 2015 at 1:40 PM, Vincent Abriou <vincent.abriou at st.com> wrote:
> This reverts commit 73f7570bc6c853ca1fad24f9d31815b20e405354.
>
> This patch need to be revert because it breaks middlewares way of working.
> As example, modetest and weston, only relies on drmModeRmFB to close
> CRTC or planes.
> Keeping this patch will induce weird behavior like a plane displayed
> with modetest will be visible on weston and vice-versa.
>
> We can overcome this by updating the middleware (successfully tested
> with modetest) to force them to disable CRTC and plane using
> drmModeSetCrtc or drmModeSetPlane.
> But it is a long to way and for short term, it is not acceptable to break
> ABI.
Can you please provide some real scenario that breaks? Using
'modetest' is not enough to argue for a revert. It is a testing tool
to exercise DRM internals, of course it is possible to show the new
behavior by using it.
Furthermore, using drmModeRmFB() should not be enough to reset a
plane. Can you back your claim that weston relies on this behavior?
Reading weston code, I see an explicit plane-disable on each render
pass. I cannot see how it relies on planes to be disabled after
removing the FB (and it really cannot do that..). Regarding modetest:
this is not a runtime tool. It does not do dynamic adjustments to
runtime changes. Hence, it obviously relies on close(2) to clean
things up..
I'd really appreciate if you could elaborate why *exactly* you think
this is needed.
Thanks
David
>
> Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Cc: David Herrmann <dh.herrmann at gmail.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Signed-off-by: Vincent Abriou <vincent.abriou at st.com>
> ---
> drivers/gpu/drm/drm_crtc.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index e600a5f..626b0a5 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -3320,6 +3320,9 @@ int drm_mode_rmfb(struct drm_device *dev,
> if (!found)
> goto fail_lookup;
>
> + /* Mark fb as reaped, we still have a ref from fpriv->fbs. */
> + __drm_framebuffer_unregister(dev, fb);
> +
> list_del_init(&fb->filp_head);
> mutex_unlock(&dev->mode_config.fb_lock);
> mutex_unlock(&file_priv->fbs_lock);
> @@ -3491,6 +3494,7 @@ out_err1:
> */
> void drm_fb_release(struct drm_file *priv)
> {
> + struct drm_device *dev = priv->minor->dev;
> struct drm_framebuffer *fb, *tfb;
>
> /*
> @@ -3504,9 +3508,15 @@ void drm_fb_release(struct drm_file *priv)
> * at it any more.
> */
> list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) {
> +
> + mutex_lock(&dev->mode_config.fb_lock);
> + /* Mark fb as reaped, we still have a ref from fpriv->fbs. */
> + __drm_framebuffer_unregister(dev, fb);
> + mutex_unlock(&dev->mode_config.fb_lock);
> +
> list_del_init(&fb->filp_head);
>
> - /* This drops the fpriv->fbs reference. */
> + /* This will also drop the fpriv->fbs reference. */
> drm_framebuffer_unreference(fb);
> }
> }
> --
> 1.9.1
>
More information about the dri-devel
mailing list