aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_crtc.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-04-15 01:10:33 -0400
committerDave Airlie <airlied@redhat.com>2016-04-21 20:26:42 -0400
commitf55f1f91f567ac32cbf04fbdd455fc54661504fb (patch)
treea34fa9afd174606b88dbfb9e58a274edbb351082 /drivers/gpu/drm/drm_crtc.c
parent7c8f6d2577c7565f67ba3f6b9b76f7422710d66e (diff)
drm/mode: move framebuffer_free up above framebuffer_init
A later patch will use it in framebuffer_init, and I want to keep the diff cleaner. Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_crtc.c')
-rw-r--r--drivers/gpu/drm/drm_crtc.c58
1 files changed, 29 insertions, 29 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 7724266dbaca..339d6ca21f57 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,
389} 389}
390EXPORT_SYMBOL(drm_mode_object_find); 390EXPORT_SYMBOL(drm_mode_object_find);
391 391
392/* dev->mode_config.fb_lock must be held! */
393static void __drm_framebuffer_unregister(struct drm_device *dev,
394 struct drm_framebuffer *fb)
395{
396 drm_mode_object_put(dev, &fb->base);
397
398 fb->base.id = 0;
399}
400
401static void drm_framebuffer_free(struct kref *kref)
402{
403 struct drm_framebuffer *fb =
404 container_of(kref, struct drm_framebuffer, refcount);
405 struct drm_device *dev = fb->dev;
406
407 /*
408 * The lookup idr holds a weak reference, which has not necessarily been
409 * removed at this point. Check for that.
410 */
411 mutex_lock(&dev->mode_config.fb_lock);
412 if (fb->base.id) {
413 /* Mark fb as reaped and drop idr ref. */
414 __drm_framebuffer_unregister(dev, fb);
415 }
416 mutex_unlock(&dev->mode_config.fb_lock);
417
418 fb->funcs->destroy(fb);
419}
420
392/** 421/**
393 * drm_framebuffer_init - initialize a framebuffer 422 * drm_framebuffer_init - initialize a framebuffer
394 * @dev: DRM device 423 * @dev: DRM device
@@ -431,35 +460,6 @@ out:
431} 460}
432EXPORT_SYMBOL(drm_framebuffer_init); 461EXPORT_SYMBOL(drm_framebuffer_init);
433 462
434/* dev->mode_config.fb_lock must be held! */
435static void __drm_framebuffer_unregister(struct drm_device *dev,
436 struct drm_framebuffer *fb)
437{
438 drm_mode_object_put(dev, &fb->base);
439
440 fb->base.id = 0;
441}
442
443static void drm_framebuffer_free(struct kref *kref)
444{
445 struct drm_framebuffer *fb =
446 container_of(kref, struct drm_framebuffer, refcount);
447 struct drm_device *dev = fb->dev;
448
449 /*
450 * The lookup idr holds a weak reference, which has not necessarily been
451 * removed at this point. Check for that.
452 */
453 mutex_lock(&dev->mode_config.fb_lock);
454 if (fb->base.id) {
455 /* Mark fb as reaped and drop idr ref. */
456 __drm_framebuffer_unregister(dev, fb);
457 }
458 mutex_unlock(&dev->mode_config.fb_lock);
459
460 fb->funcs->destroy(fb);
461}
462
463static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev, 463static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev,
464 uint32_t id) 464 uint32_t id)
465{ 465{