[PATCH 02/15] drm/mode: move framebuffer_free up above framebuffer_init
Daniel Vetter
daniel at ffwll.ch
Thu Apr 21 08:03:53 UTC 2016
On Fri, Apr 15, 2016 at 03:10:33PM +1000, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> A later patch will use it in framebuffer_init, and I want
> to keep the diff cleaner.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/drm_crtc.c | 58 +++++++++++++++++++++++-----------------------
> 1 file changed, 29 insertions(+), 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 21cb8dc..e69aac4 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -389,6 +389,35 @@ struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
> }
> EXPORT_SYMBOL(drm_mode_object_find);
>
> +/* dev->mode_config.fb_lock must be held! */
> +static void __drm_framebuffer_unregister(struct drm_device *dev,
> + struct drm_framebuffer *fb)
> +{
> + drm_mode_object_put(dev, &fb->base);
> +
> + fb->base.id = 0;
> +}
> +
> +static void drm_framebuffer_free(struct kref *kref)
> +{
> + struct drm_framebuffer *fb =
> + container_of(kref, struct drm_framebuffer, refcount);
> + struct drm_device *dev = fb->dev;
> +
> + /*
> + * The lookup idr holds a weak reference, which has not necessarily been
> + * removed at this point. Check for that.
> + */
> + mutex_lock(&dev->mode_config.fb_lock);
> + if (fb->base.id) {
> + /* Mark fb as reaped and drop idr ref. */
> + __drm_framebuffer_unregister(dev, fb);
> + }
> + mutex_unlock(&dev->mode_config.fb_lock);
> +
> + fb->funcs->destroy(fb);
> +}
> +
> /**
> * drm_framebuffer_init - initialize a framebuffer
> * @dev: DRM device
> @@ -431,35 +460,6 @@ out:
> }
> EXPORT_SYMBOL(drm_framebuffer_init);
>
> -/* dev->mode_config.fb_lock must be held! */
> -static void __drm_framebuffer_unregister(struct drm_device *dev,
> - struct drm_framebuffer *fb)
> -{
> - drm_mode_object_put(dev, &fb->base);
> -
> - fb->base.id = 0;
> -}
> -
> -static void drm_framebuffer_free(struct kref *kref)
> -{
> - struct drm_framebuffer *fb =
> - container_of(kref, struct drm_framebuffer, refcount);
> - struct drm_device *dev = fb->dev;
> -
> - /*
> - * The lookup idr holds a weak reference, which has not necessarily been
> - * removed at this point. Check for that.
> - */
> - mutex_lock(&dev->mode_config.fb_lock);
> - if (fb->base.id) {
> - /* Mark fb as reaped and drop idr ref. */
> - __drm_framebuffer_unregister(dev, fb);
> - }
> - mutex_unlock(&dev->mode_config.fb_lock);
> -
> - fb->funcs->destroy(fb);
> -}
> -
> static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev,
> uint32_t id)
> {
> --
> 2.5.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list