diff options
author | Dave Airlie <airlied@redhat.com> | 2016-04-15 01:10:33 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-04-21 20:26:42 -0400 |
commit | f55f1f91f567ac32cbf04fbdd455fc54661504fb (patch) | |
tree | a34fa9afd174606b88dbfb9e58a274edbb351082 /drivers/gpu/drm/drm_crtc.c | |
parent | 7c8f6d2577c7565f67ba3f6b9b76f7422710d66e (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.c | 58 |
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 | } |
390 | EXPORT_SYMBOL(drm_mode_object_find); | 390 | EXPORT_SYMBOL(drm_mode_object_find); |
391 | 391 | ||
392 | /* dev->mode_config.fb_lock must be held! */ | ||
393 | static 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 | |||
401 | static 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 | } |
432 | EXPORT_SYMBOL(drm_framebuffer_init); | 461 | EXPORT_SYMBOL(drm_framebuffer_init); |
433 | 462 | ||
434 | /* dev->mode_config.fb_lock must be held! */ | ||
435 | static 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 | |||
443 | static 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 | |||
463 | static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev, | 463 | static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev, |
464 | uint32_t id) | 464 | uint32_t id) |
465 | { | 465 | { |