diff options
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 8cee833edc6e..0e4e25509c3d 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -362,8 +362,7 @@ static struct drm_mode_object *_object_find(struct drm_device *dev, obj = NULL; /* don't leak out unref'd fb's */ if (obj && - (obj->type == DRM_MODE_OBJECT_FB || - obj->type == DRM_MODE_OBJECT_BLOB)) + obj->type == DRM_MODE_OBJECT_BLOB) obj = NULL; mutex_unlock(&dev->mode_config.idr_mutex); @@ -478,23 +477,6 @@ out: } EXPORT_SYMBOL(drm_framebuffer_init); -static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev, - uint32_t id) -{ - struct drm_mode_object *obj = NULL; - struct drm_framebuffer *fb; - - mutex_lock(&dev->mode_config.idr_mutex); - obj = idr_find(&dev->mode_config.crtc_idr, id); - if (!obj || (obj->type != DRM_MODE_OBJECT_FB) || (obj->id != id)) - fb = NULL; - else - fb = obj_to_fb(obj); - mutex_unlock(&dev->mode_config.idr_mutex); - - return fb; -} - /** * drm_framebuffer_lookup - look up a drm framebuffer and grab a reference * @dev: drm device @@ -507,11 +489,13 @@ static struct drm_framebuffer *__drm_framebuffer_lookup(struct drm_device *dev, struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev, uint32_t id) { - struct drm_framebuffer *fb; + struct drm_mode_object *obj; + struct drm_framebuffer *fb = NULL; mutex_lock(&dev->mode_config.fb_lock); - fb = __drm_framebuffer_lookup(dev, id); - if (fb) { + obj = _object_find(dev, id, DRM_MODE_OBJECT_FB); + if (obj) { + fb = obj_to_fb(obj); if (!kref_get_unless_zero(&fb->base.refcount)) fb = NULL; } @@ -3489,6 +3473,7 @@ int drm_mode_rmfb(struct drm_device *dev, { struct drm_framebuffer *fb = NULL; struct drm_framebuffer *fbl = NULL; + struct drm_mode_object *obj; uint32_t *id = data; int found = 0; @@ -3497,10 +3482,10 @@ int drm_mode_rmfb(struct drm_device *dev, mutex_lock(&file_priv->fbs_lock); mutex_lock(&dev->mode_config.fb_lock); - fb = __drm_framebuffer_lookup(dev, *id); - if (!fb) + obj = _object_find(dev, *id, DRM_MODE_OBJECT_FB); + if (!obj) goto fail_lookup; - + fb = obj_to_fb(obj); list_for_each_entry(fbl, &file_priv->fbs, filp_head) if (fb == fbl) found = 1; |